Przejdź do treści

Jak w AWS automatycznie wykonać polecenie na EC2

How to automatically execute a command on EC2 in AWS

Jeśli używasz chmury AWS, to na pewno ucieszy cię wiadomość, że możesz tam automatycznie wykonywać komendy na maszynach EC2 bez logowania się do nich. Jeśli nie używasz jeszcze narzędzi do automatyzacji takich jak np. Ansible albo Cheff, to żaden problem. Za pomocą AWS System Manager możesz instalować usługi, wykonywać polecenia i automatyzować swoją pracę.

aws system manager - run command

Uprawnienia dla AWS System Manager

Żeby automatycznie wykonywać komendy na swoich maszynach EC2 musisz dodać do nich odpowiednie uprawnienia. Opis jak dodać uprawnienia, które pozwolą, aby AWS Systems Manager mógł wykonywać polecenia, znajdziesz w tym artykule.

Wydawanie poleceń maszynom EC2

Gdy już przypiszesz odpowiednią rolę do swoich maszyn możesz przejść do wydawania poleceń 😉

Otwórz AWS System Manager i z menu po lewej wybierz “Run Command”.

AWS - system manager
aws run command

1) Command document

Teraz możesz kliknąć Run Command, a z listy komend wybrać “AWS-RunShellScript”.

aws run command 2021
aws run shell script

2) Command parameters

Poniżej znajdziesz 2 przykłady, które powinny ułatwić Ci zrozumienie tego, co się dzieje.

Przykład 1 – CentOS

W tym przykładzie zostanie dodana uruchomiona komenda, która wykona aktualizację systemu CentOS i zainstaluje Apache web server.

aws run shell script install apache web server

Dla ułatwienia wklejam kod, żebyś nie musiał przepisywać 😉

sudo yum update -y
sudo yum install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd

Przykład 2 – Ubuntu

W drugim przykładzie na maszynie Ubuntu zostanie automatycznie zainstalowany agent CloudWatch i utworzony jego config. Na koniec Agent zostanie uruchomiony i będzie mógł zacząć wysyłać metryki do CloudWatch. Jeśli interesuje Cię ten temat, to dokładnie go opisałem w innym artykule. Jak monitorować użycie pamięci RAM na AWS EC2.

aws run shell script install cloudWatch agent

Dla ułatwienia wklejam kod, żebyś nie musiał przepisywać 😉

sudo wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
sudo cat <<'EOF' > /opt/aws/amazon-cloudwatch-agent/bin/config.json
{
   "metrics":{
      "metrics_collected":{
         "mem":{
            "measurement":[
               "mem_used_percent"
            ],
            "metrics_collection_interval":320
         }
      },
      "append_dimensions": {
        "InstanceId": "${aws:InstanceId}"
      }
   }
}
EOF

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s

3) Targets

Teraz wybierasz maszyny EC2, na których chcesz uruchomić polecenia. Możesz wybrać je po TAGu. Ja jednak na pierwsze uruchomienie zalecam, żeby wybrać je ręcznie i sprawdzić, czy wszystko uruchamia się poprawnie.

aws run command targets

4) Other parameters

Jeśli potrzebujesz, możesz tu dodać dodatkowe parametry. Przy prostych poleceniach zazwyczaj nie ma takiej potrzeby.

run command other parameters

5) Rate control

Możesz tu określić na ilu maszynach jednocześnie mają być wykonane polecenia. Dodatkowo można zlecić przerwanie wykonywania poleceń przy określonej liczbie błędów. Zazwyczaj nie trzeba tu nic zmieniać.

run command rate control

6) Output options

Jeśli chcemy, to możemy wynik zapisać do S3. Jeśli nie, to odznaczamy “Enable an S3 bucket”

run command output options

7) SNS notifications

W tym miejscu możesz włączyć otrzymywanie powiadomień za pomocą SNS. Nie trzeba tu nic zmieniać, jeśli nie chcesz ich otrzymywać.

run command SNS notifications

8) AWS command line interface command

Tutaj znajdziesz polecenie, które możesz skopiować i wykonać za pomocą CLI. Zawiera ono wszystko to, co do tej pory ustawiłeś zapisane tak, żeby można uruchomić to w CLI.

run command CLI

Teraz przeszedłeś przez wszystkie ustawienia “Run a command” w AWS. Gdy klikniesz RUN, to na maszynach EC2, które wybrałeś, wykonają się polecenia z sekcji Command parameters.

Ponowne uruchamianie poleceń na maszynach EC2

Jeśli chcesz jeszcze raz uruchomić tą samą komendę, a nie chcesz wpisywać wszystkiego od początku, to przejdź do “Command history”. Znajdziesz tam komendy, które uruchamiałeś. Zaznacz tą, którą potrzebujesz i kliknij “Copy to new”.

aws command history

Podsumowanie

Podsumowując, jeśli nie automatyzujesz jeszcze swojej pracy, to za pomocą AWS System Manager możesz to nadrobić. AWS System Manager pozwoli na automatyczne wykonywanie poleceń i instalację usług na maszynach EC2. Dzięki automatyzacji możesz zaoszczędzić sobie dużo powtarzalnej pracy i czasu potrzebnego na jej ręczne wykonanie.

Pod tym linkiem znajdziesz dokumentację AWS dotycząca system managera.