[RUBY] [AWS SDK] Automatisches EC2-Konstruktionsskript

Ziel

Die automatische EC2-Konstruktion wird mit dem AWS SDK (AWS SDK für Ruby) durchgeführt.

Einführung

Nachdem wir die Grundkenntnisse des AWS SDK zusammengefasst haben, versuchen wir den tatsächlichen Betrieb mit der automatischen EC2-Konstruktion unter Verwendung des AWS SDK für Ruby.

AWS SDK Ein von AWS bereitgestellter API-Typ, der importiert und als Bibliothek in verschiedenen von AWS unterstützten Programmiersprachen verwendet wird. Derzeit werden die folgenden Sprachen unterstützt, wodurch AWS-Ressourcenoperationen aus verschiedenen Programmen aktiviert werden.

・ C ++ ・ 5 ・ Java ・ JavaScript ・.NET · Weil. js ・ PHP ・ Python ・ ** Ruby (dies wird in diesem Artikel verwendet) **

Authentifizierung bei Verwendung von AWS CLI und SDK

Anmeldeinformationen sind erforderlich, um die AWS CLI (in der Befehlszeile des Betriebssystems, in Shell-Skripten und in PowerShell verwendet) und das AWS SDK (in verschiedenen Programmiersprachen verwendet) zu verwenden. Es gibt drei Möglichkeiten, Anmeldeinformationen festzulegen, und die Referenzpriorität ist unterschiedlich.

Artikelnummer Priorität Speicherort für Anmeldeinformationen
1 Hoch Betriebssystemumgebungsvariablen
2 Während ~ Anmeldeinformationsdatei
3 Niedrig Instanzprofil (IAM-Rollenauthentifizierung)

① Betriebssystemumgebungsvariablen Anmeldeinformationen können mithilfe der Umgebungsvariablen AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY festgelegt werden. Es hat die höchste Priorität unter den Authentifizierungseinstellungsmethoden. Stellen Sie beispielsweise Folgendes ein.


# 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

② Anmeldeinformationsdatei Die Datei mit dem Namen "Anmeldeinformationen", die im Verzeichnis "aws" im Ausgangsverzeichnis des Betriebssystembenutzers vorhanden ist, ist die Datei mit den Anmeldeinformationen. Geben Sie den Zugriffsschlüssel und den geheimen Zugriffsschlüssel für aws_access_key_id und aws_secret_access_key in diese Datei ein.


#Anmeldeinformationsdatei
~/.aws/credentials

[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key

③ Instanzprofil Ein Instanzprofil ist eine Ausführungsumgebung, die zur Authentifizierung mithilfe der IAM-Rolle verwendet wird. Es wird automatisch erstellt, wenn die IAM-Rolle erstellt wird. Es ist ein Behälter zur Aufbewahrung von IAM-Rollen und scheint beim Anbringen an EC2 als notwendiger Anschluss zu fungieren. ** Diese Authentifizierungsmethode unter Verwendung der IAM-Rolle ist die beste Vorgehensweise bei der Verwendung von AWS SDK und AWS CLI. Sie wird empfohlen, da das Risiko eines Verlusts von Authentifizierungsinformationen im Vergleich zu den beiden oben genannten Methoden unter Verwendung des Zugriffsschlüssels und des geheimen Zugriffsschlüssels verringert ist. Wir sind. ** **. Übrigens hat es als Authentifizierungsmethode die niedrigste Priorität, daher müssen Sie auf die Umgebungsvariablen und die Informationen in der Authentifizierungsinformationsdatei achten.

Für Details zum Instanzprofil waren die folgenden Websites hilfreich. Kennen Sie das Instanzprofil, das IAM-Rolleninformationen an EC2 weitergibt?

Arbeitsablauf

Artikelnummer Titel
1 AWS SDK für Ruby-Setup
2 Einrichten eines Skripts für die automatische EC2-Konstruktion
3 Betriebsüberprüfung

Verfahren

1. Einrichten des AWS SDK für Ruby

** ① AWS SDK für Ruby-Installation ** Beachten Sie, dass es lange dauern wird ...


gem install aws-sdk

** ② Ausgabe des Zugangsschlüssels und des geheimen Zugangsschlüssels ** Wenn der Zugriffsschlüssel und der geheime Zugriffsschlüssel nicht ausgegeben wurden, müssen Sie einen neuen erstellen. Informationen zur Vorgehensweise finden Sie im Folgenden [[AWS CLI] Aktivieren Sie die AWS CLI unter Red Hat Enterprise Linux 8 (3. Geben Sie die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel aus)](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)

** ③ Authentifizierungsinformationsdatei bearbeiten ** Speichern Sie dieses Mal die AWS SDK-Anmeldeinformationen in der Anmeldeinformationsdatei. Geben Sie den Zugriffsschlüssel und den geheimen Zugriffsschlüssel in "aws_access_key_id" und "aws_secret_access_key" in die Anmeldeinformationsdatei "~ / .aws / credentials" ein.


#Bearbeitung von Anmeldeinformationsdateien
vi ~/.aws/credentials

[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key

2. Einrichtung des automatischen EC2-Konstruktionsskripts

** ① Stellen Sie das automatische EC2-Konstruktionsskript in der Umgebung bereit, in der das AWS SDK eingerichtet ist ** Verschiedene umgebungsabhängige Variablen im Skript ("<ami_id>", "<keypair_name>", "<security_group_id>", "<instance_type>", "<az_name>", "<subnet_id>", "<userdata_pass>") ) Umschreibt entsprechend der Umgebung.

Schreiben Sie außerdem die Benutzerdatenverarbeitung, die Sie in EC2 festlegen möchten, in die in << Benutzerdatenpass> angegebene Datei.


Dateiname: ec2_create.rb

# **********************************************************************************
#Funktionsübersicht: Automatischer Aufbau EC2
#Skriptverwendung: Ruby<Skriptpfad> <Instanzname>
# **********************************************************************************

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

require 'aws-sdk'
require 'base64'

#EC2-Komponentendefinition (bearbeiten Sie die folgenden Variablen entsprechend der Umgebung)
image_id = '<ami_id>'                         # AMIID
key_name = '<keypair_name>'                   #Schlüsselpaarname
security_group_ids = '<security_group_id>'    #Sicherheitsgruppen-ID
instance_type = '<instance_type>'             #Instanztyp
availability_zone = '<az_name>'               #Verwenden Sie AZ
subnet_id = '<subnet_id>'                     #Verwendete Subnetz-ID
user_data = '<userdata_pass>'                 #Pfad der Benutzerdatendatei

#Benutzerdateneinstellungen
if File.exist?(user_data)
  file = File.open(user_data)
  script = file.read
  file.close
else
  script = ''
end
encoded_script = Base64.encode64(script)

#Erstellen Sie eine Instanz für den EC2-Ressourcenbetrieb
ec2 = Aws::EC2::Resource.new

#Implementierung der EC2-Erstellung
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
})

#Warten Sie, bis die Instanz verfügbar ist
ec2.client.wait_until(:instance_running, {instance_ids: [instance[0].id]})

#Geben Sie den Instanznamen (Namensschild) an.
instance_name = ARGV[0]
instance.batch_create_tags({ tags: [{ key: 'Name', value: instance_name }]})

puts "#{instance_name}(#{instance[0].id}) Wurde erschaffen!"

3. Überprüfung des Betriebs

** ** Erstellen Sie EC2 mit den folgenden Parametern.


#EC2-Komponentendefinition (bearbeiten Sie die folgenden Variablen entsprechend der Umgebung)
image_id = 'ami-067152a7c26866dcb'        # AMIID
key_name = 'mykeypair'                    #Schlüsselpaarname
security_group_ids = 'sg-64a59718'        #Sicherheitsgruppen-ID
instance_type = 't2.medium'               #Instanztyp
availability_zone = 'ap-northeast-1a'     #Verwenden Sie AZ
subnet_id = 'subnet-41d23b09'             #Verwendete Subnetz-ID
user_data = '/tmp/userdata'               #Pfad der Benutzerdatendatei

Darüber hinaus enthalten die in EC2 einzustellenden Benutzerdaten folgenden Inhalt


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

** ① Skriptausführung ** Führen Sie das Skript mit dem als erstes Argument angegebenen Instanznamen aus.


$ ruby ec2_create.rb test_server
test_server(i-0a4fd9cfe1613a8d6) wurde erstellt!

** ② Ergebnisbestätigung ** Der Instanzname, der Instanztyp, die Subnetz-ID, der Schlüsselpaarname, der AZ-Name und die AMI-ID werden gemäß den Einstellungen im Skript festgelegt. tempsnip.png

Die zugewiesene Sicherheitsgruppe ist ebenfalls in Ordnung tempsnip.png

Der Inhalt der Benutzerdaten war ebenfalls angemessen. image.png

Überprüfen Sie vorerst die Anmeldung des Betriebssystems und ob die Benutzerdaten normal ausgeführt werden.


#httpd wird durch Ausführen von Benutzerdaten gestartet
$ 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.

#Es ist auch aktiviert
$ systemctl is-enabled httpd
enabled

Alle werden gemäß den eingestellten Werten erstellt, also OK!

Referenzseite

Sie können Implementierungsbeispiele mit AWS SDK For Ruby in verschiedenen Diensten überprüfen. AWS SDK für Ruby-Codebeispiel

Recommended Posts

[AWS SDK] Automatisches EC2-Konstruktionsskript
[Rails] Aufbau einer AWS EC2-Instanzumgebung
Ich habe versucht, die automatische Bereitstellung mit CircleCI + Capistrano + AWS (EC2) + Rails durchzuführen
Installieren Sie Docker auf AWS EC2
So veröffentlichen Sie eine Anwendung mithilfe der AWS (3) EC2-Instanzumgebungskonstruktion