La construction automatique EC2 est effectuée à l'aide du kit AWS SDK (AWS SDK for Ruby).
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) **
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?
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 |
** ① 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
** ① 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éé!"
**
#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.
Le groupe de sécurité attribué est également OK
Le contenu des données utilisateur était également approprié.
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!
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