[RUBY] [AWS SDK] Script de construction automatique EC2

Cible

La construction automatique EC2 est effectuée à l'aide du kit AWS SDK (AWS SDK for Ruby).

introduction

Après avoir résumé les connaissances de base du kit AWS SDK, essayons l'opération réelle avec la construction automatique EC2 à l'aide du kit AWS SDK pour Ruby.

AWS SDK Type d'API fourni par AWS qui est importé et utilisé comme bibliothèque dans divers langages de programmation pris en charge par AWS. Actuellement, les langues suivantes sont prises en charge, ce qui permet les opérations sur les ressources AWS à partir de divers programmes.

・ C ++ ・ 5 ・ Java ・ JavaScript ・.NET · Parce que. js ・ PHP ・ Python ・ ** Ruby (ceci est utilisé dans cet article) **

Authentification lors de l'utilisation de l'AWS CLI et du SDK

Les informations d'identification sont requises pour utiliser l'AWS CLI (utilisée sur la ligne de commande du système d'exploitation, les scripts shell et PowerShell) et le kit AWS SDK (utilisé sur divers langages de programmation). Il existe les trois méthodes suivantes pour définir les informations d'authentification et la priorité de référence est différente.

Numéro d'article priorité Emplacement du paramètre d'identification
1 Haute Variables d'environnement du système d'exploitation
2 Pendant ~ Fichier d'identification
3 Faible Profil d'instance (authentification du rôle IAM)

① Variables d'environnement OS Les informations d'identification peuvent être définies à l'aide des variables d'environnement AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY. Il a la priorité la plus élevée parmi les méthodes de paramétrage d'authentification. Par exemple, définissez comme suit.


# For LINUX
export AWS_ACCESS_KEY_ID=your_access_key_id
export AWS_SECRET_ACCESS_KEY=your_secret_access_key

# For Windows
set AWS_ACCESS_KEY_ID=your_access_key_id
set AWS_SECRET_ACCESS_KEY=your_secret_access_key

② Fichier d'identification Le fichier appelé «informations d'identification» qui existe dans le répertoire «aws» du répertoire de base de l'utilisateur du système d'exploitation est le fichier d'informations d'identification. Entrez la clé d'accès et la clé d'accès secrète pour aws_access_key_id et aws_secret_access_key dans ce fichier.


#Fichier d'identification
~/.aws/credentials

[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key

③ Profil d'instance Un profil d'instance est un environnement d'exécution utilisé pour l'authentification à l'aide du rôle IAM. Il est automatiquement créé lors de la création du rôle IAM. C'est un conteneur pour stocker les rouleaux IAM et semble agir comme un connecteur nécessaire lors de la fixation à EC2. ** Cette méthode d'authentification utilisant le rôle IAM est la meilleure pratique lors de l'utilisation du kit AWS SDK et de l'AWS CLI, et elle est recommandée car le risque de fuite d'informations d'authentification est réduit par rapport aux deux méthodes ci-dessus utilisant la clé d'accès et la clé d'accès secrète. Nous sommes. ** ** À propos, il a la priorité la plus basse en tant que méthode d'authentification, vous devez donc faire attention aux variables d'environnement et aux informations du fichier d'informations d'authentification.

Pour plus de détails sur le profil d'instance, les sites suivants ont été utiles. Connaissez-vous le profil d'instance qui transmet les informations de rôle IAM à EC2?

Flux de travail

Numéro d'article Titre
1 Configuration du kit SDK AWS pour Ruby
2 Configuration d'un script pour la construction automatique EC2
3 Vérification du fonctionnement

procédure

1. Configuration du kit AWS SDK pour Ruby

** ① AWS SDK pour l'installation de Ruby ** Notez que cela prendra beaucoup de temps ...


gem install aws-sdk

** ② Émission de la clé d'accès et de la clé d'accès secrète ** Si la clé d'accès et la clé d'accès secrète n'ont pas été émises, vous devez en créer une nouvelle. Reportez-vous à ce qui suit pour la procédure [[AWS CLI] Activez l'AWS CLI sur Red Hat Enterprise Linux 8 (3. Émettez l'ID de clé d'accès et la clé d'accès secrète)](https://qiita.com/aWdfcfG2jLr73pe/items/688d183ae6e1d678ea84#3-% E3% 82% A2% E3% 82% AF% E3% 82% BB% E3% 82% B9% E3% 82% AD% E3% 83% BCid% E3% 81% A8% E3% 82% B7% E3% 83% BC% E3% 82% AF% E3% 83% AC% E3% 83% 83% E3% 83% 88% E3% 82% A2% E3% 82% AF% E3% 82% BB% E3% 82% B9% E3% 82% AD% E3% 83% BC% E3% 81% AE% E7% 99% BA% E8% A1% 8C)

** ③ Modifier le fichier d'informations d'authentification ** Cette fois, enregistrez les informations d'identification du kit AWS SDK dans le fichier d'informations d'identification. Entrez la clé d'accès et la clé d'accès secrète dans ʻaws_access_key_id et ʻaws_secret_access_key dans le fichier d'identifiants ~ / .aws / credentials.


#Modification du fichier d'identification
vi ~/.aws/credentials

[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key

2. Configuration du script de construction automatique EC2

** ① Déployez le script de construction automatique EC2 dans l'environnement où le kit AWS SDK est configuré ** Diverses variables dépendant de l'environnement dans le script (<ami_id>, <keypair_name>, <security_group_id>, <instance_type>, <az_name>, <subnet_id>, <userdata_pass> ) Réécrit en fonction de l'environnement.

Écrivez également le traitement des données utilisateur que vous souhaitez définir dans EC2 dans le fichier spécifié dans `<userdata_pass> ''


Nom de fichier: ec2_create.rb

# **********************************************************************************
#Aperçu des fonctions: construction automatique EC2
#Utilisation du script: ruby<Chemin du script> <Nom de l'instance>
# **********************************************************************************

unless ARGV.size() == 1
  puts "The number of arguments is incorrect."
  exit
end

require 'aws-sdk'
require 'base64'

#Définition du composant EC2 (éditez les variables suivantes en fonction de l'environnement)
image_id = '<ami_id>'                         # AMIID
key_name = '<keypair_name>'                   #Nom de la paire de clés
security_group_ids = '<security_group_id>'    #ID du groupe de sécurité
instance_type = '<instance_type>'             #Type d'instance
availability_zone = '<az_name>'               #Utiliser AZ
subnet_id = '<subnet_id>'                     #ID de sous-réseau utilisé
user_data = '<userdata_pass>'                 #Chemin du fichier de données utilisateur

#Paramètres des données utilisateur
if File.exist?(user_data)
  file = File.open(user_data)
  script = file.read
  file.close
else
  script = ''
end
encoded_script = Base64.encode64(script)

#Créer une instance pour l'opération de ressource EC2
ec2 = Aws::EC2::Resource.new

#Implémentation de la création EC2
instance = ec2.create_instances({
  image_id: image_id,
  min_count: 1,
  max_count: 1,
  key_name: key_name,
  security_group_ids: [security_group_ids],
  user_data: encoded_script,
  instance_type: instance_type,
  placement: {
    availability_zone: availability_zone
  },
  subnet_id: subnet_id
})

#Attendez que l'instance soit disponible
ec2.client.wait_until(:instance_running, {instance_ids: [instance[0].id]})

#Donner le nom de l'instance (balise de nom)
instance_name = ARGV[0]
instance.batch_create_tags({ tags: [{ key: 'Name', value: instance_name }]})

puts "#{instance_name}(#{instance[0].id}) A été créé!"

3. Vérification du fonctionnement

** ** Créez EC2 avec les paramètres suivants.


#Définition du composant EC2 (éditez les variables suivantes en fonction de l'environnement)
image_id = 'ami-067152a7c26866dcb'        # AMIID
key_name = 'mykeypair'                    #Nom de la paire de clés
security_group_ids = 'sg-64a59718'        #ID du groupe de sécurité
instance_type = 't2.medium'               #Type d'instance
availability_zone = 'ap-northeast-1a'     #Utiliser AZ
subnet_id = 'subnet-41d23b09'             #ID de sous-réseau utilisé
user_data = '/tmp/userdata'               #Chemin du fichier de données utilisateur

De plus, les données utilisateur à définir dans EC2 ont le contenu suivant


$ cat /tmp/userdata
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd

** ① Exécution du script ** Exécutez le script avec le nom d'instance spécifié comme premier argument.


$ ruby ec2_create.rb test_server
test_server(i-0a4fd9cfe1613a8d6) a été créé!

** ② Confirmation des résultats ** Le nom de l'instance, le type d'instance, l'ID de sous-réseau, le nom de la paire de clés, le nom AZ et l'ID AMI sont définis en fonction des paramètres du script. tempsnip.png

Le groupe de sécurité attribué est également OK tempsnip.png

Le contenu des données utilisateur était également approprié. image.png

Pour le moment, vérifiez la connexion au système d'exploitation et vérifiez si les données utilisateur sont exécutées normalement.


#httpd est démarré en exécutant les données utilisateur
$ systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-07-11 03:03:01 UTC; 12min ago
     Docs: man:httpd.service(8)
 Main PID: 21821 (httpd)
   Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec:   0 B/sec"
   CGroup: /system.slice/httpd.service
           tq21821 /usr/sbin/httpd -DFOREGROUND
           tq21831 /usr/sbin/httpd -DFOREGROUND
           tq21832 /usr/sbin/httpd -DFOREGROUND
           tq21833 /usr/sbin/httpd -DFOREGROUND
           tq21834 /usr/sbin/httpd -DFOREGROUND
           mq21835 /usr/sbin/httpd -DFOREGROUND

Jul 11 03:03:01 ip-172-31-40-241.ap-northeast-1.compute.internal systemd[1]: Starting The Apache HTTP Server...
Jul 11 03:03:01 ip-172-31-40-241.ap-northeast-1.compute.internal systemd[1]: Started The Apache HTTP Server.

#Il est également activé
$ systemctl is-enabled httpd
enabled

Tous sont créés selon les valeurs définies, donc OK!

Site de référence

Vous pouvez consulter des exemples d'implémentation à l'aide du kit AWS SDK For Ruby dans divers services. Exemple de SDK AWS pour Ruby Code

Recommended Posts

[AWS SDK] Script de construction automatique EC2
[Rails] Construction de l'environnement d'instance AWS EC2
J'ai essayé le déploiement automatique avec CircleCI + Capistrano + AWS (EC2) + Rails
Installer docker sur AWS EC2
Comment publier une application à l'aide de la construction d'environnement d'instance AWS (3) EC2