CLI позволяет управлять не только серверами, но и настройками сети, базами данных, “дисками”.
В общем, все те же операции, что и в панели управления – но в консоли.
Установка выполняетс яна CentOS 6.5.
UPD 08.2016 Пост устарел, см. установку в документации.
Установка CLI tools
Создадим директорию, в которой будут храниться утилиты:
$ mkdir -p ~/aws/cli_tools
Загружаем в неё архив:
$ cd ~/aws/cli_tools && wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
$ unzip ec2-api-tools.zip && rm ec2-api-tools.zip
Для работы EC2 CLI потребуется установленная Java:
$ which java /usr/bin/java
Но, /usr/bin/java
является симлинком:
$ ls -l /usr/bin/java lrwxrwxrwx 1 root root 22 Oct 29 04:46 /usr/bin/java -> /etc/alternatives/java
А файл /etc/alternatives/java
– является ещё одним симлинком 🙂
$ ls -l /etc/alternatives/java lrwxrwxrwx 1 root root 46 Oct 29 04:46 /etc/alternatives/java -> /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
И уже /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
является самим исполняемым файлом Java:
$ file /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
Если не указана – прописываем JAVA_HOME
:
$ echo "export JAVA_HOME="/usr/lib/jvm/jre-1.7.0-openjdk.x86_64"" >> ~/.bashrc
$ . ~/.bashrc
$ echo $JAVA_HOME /usr/lib/jvm/jre-1.7.0-openjdk.x86_64
Проверяем:
$ java -version java version "1.7.0_71" OpenJDK Runtime Environment (rhel-2.5.3.1.el6-x86_64 u71-b14) OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
Для работы EC2 CLI требуется переменная EC2_HOME
, добавляем путь к каталогу, который создавали, и в нём – каталог, созданный после распаковки файлов:
$ ls -l /home/setevoy/aws/cli_tools/ec2-api-tools-1.7.2.3/
$ echo "export EC2_HOME="/home/setevoy/aws/cli_tools/ec2-api-tools-1.7.2.3"" >> ~/.bashrc
$ . ~/.bashrc
$ echo $EC2_HOME /home/setevoy/aws/cli_tools/ec2-api-tools-1.7.2.3.3
Для удобства – добавляем директорию bin
в PATH
в файле ~/.bashrc
:
export PATH="$PATH:/home/setevoy/scripts/:/home/setevoy/aws/cli_tools/ec2-api-tools-1.7.2.3/bin"
$ . ~/.bashrc
Для дальнейшей настройки нам потребуются Access Keys (Access Key ID and Secret Access Key).
Переходим в панель управления:
Кликаем на Create new access key:
Сохраняем ключи на диск, и открываем для просмотра:
Добавляем ещё две переменные:
$ echo "export AWS_ACCESS_KEY=A***Q" >> ~/.bashrc
$ echo "export AWS_SECRET_KEY="n***/fn***yg/O***dj+"" >> ~/.bashrc
$ . ~/.bashrc
Проверяем:
$ ec2-describe-regions REGION eu-central-1 ec2.eu-central-1.amazonaws.com REGION sa-east-1 ec2.sa-east-1.amazonaws.com REGION ap-northeast-1 ec2.ap-northeast-1.amazonaws.com REGION eu-west-1 ec2.eu-west-1.amazonaws.com REGION us-east-1 ec2.us-east-1.amazonaws.com REGION us-west-1 ec2.us-west-1.amazonaws.com REGION us-west-2 ec2.us-west-2.amazonaws.com REGION ap-southeast-2 ec2.ap-southeast-2.amazonaws.com REGION ap-southeast-1 ec2.ap-southeast-1.amazonaws.com
Для работы с вашей машиной – необходимо установить её регион.
Переходим в панель управления EC2 > Instances, и находим указание её зоны:
Находим URL для этой зоны:
$ ec2-describe-regions | grep us-west-2 REGION us-west-2 ec2.us-west-2.amazonaws.com
Добавляем ещё одну переменную:
$ echo "export EC2_URL="https://ec2.us-west-2.amazonaws.com"" >> ~/.bashrc
$ . ~/.bashrc
И попробуем проверить состояние нашей машины.
Находим её ID:
И выполняем запрос:
$ ec2-describe-instance-status i-74cd1078 -A INSTANCE i-74cd1078 us-west-2a stopped 80 not-applicable not-applicable active
Опция -A
– для отображения выключенных машин.
Запускаем машину с опцией -v
:
$ ec2-start-instances i-74cd1078 -v Setting User-Agent to [ec2-api-tools 1.7.2.3] 2014-11-29 13:33:45,495 [main] DEBUG org.apache.http.wire - >> "POST / HTTP/1.1[r][n]" 2014-11-29 13:33:45,497 [main] DEBUG org.apache.http.wire - >> "Host: ec2.us-west-2.amazonaws.com[r][n]" 2014-11-29 13:33:45,497 [main] DEBUG org.apache.http.wire - >> "X-Amz-Date: 20141129T113343Z[r][n]" 2014-11-29 13:33:45,497 [main] DEBUG org.apache.http.wire - >> "Authorization: ***/20141129/us-west-2/ec2/aws4_request, SignedHeaders=host;user-agent;x-amz-date, Signature=***[r][n]" 2014-11-29 13:33:45,498 [main] DEBUG org.apache.http.wire - >> "User-Agent: ec2-api-tools 1.7.2.3, aws-sdk-java/unknown-version Linux/2.6.32-504.1.3.el6.x86_64 OpenJDK_64-Bit_Server_VM/24.65-b04/1.7.0_71[r][n]" 2014-11-29 13:33:45,498 [main] DEBUG org.apache.http.wire - >> "Content-Type: application/x-www-form-urlencoded; charset=utf-8[r][n]" 2014-11-29 13:33:45,498 [main] DEBUG org.apache.http.wire - >> "Content-Length: 64[r][n]" 2014-11-29 13:33:45,498 [main] DEBUG org.apache.http.wire - >> "Connection: Keep-Alive[r][n]" 2014-11-29 13:33:45,498 [main] DEBUG org.apache.http.wire - >> "[r][n]" 2014-11-29 13:33:45,498 [main] DEBUG org.apache.http.wire - >> "Action=StartInstances&Version=2014-10-01&InstanceId.1=i-74cd1078" 2014-11-29 13:33:46,019 [main] DEBUG org.apache.http.wire - << "HTTP/1.1 200 OK[r][n]" 2014-11-29 13:33:46,021 [main] DEBUG org.apache.http.wire - << "Content-Type: text/xml;charset=UTF-8[r][n]" 2014-11-29 13:33:46,022 [main] DEBUG org.apache.http.wire - << "Transfer-Encoding: chunked[r][n]" 2014-11-29 13:33:46,022 [main] DEBUG org.apache.http.wire - << "Vary: Accept-Encoding[r][n]" 2014-11-29 13:33:46,022 [main] DEBUG org.apache.http.wire - << "Date: Sat, 29 Nov 2014 11:33:03 GMT[r][n]" 2014-11-29 13:33:46,022 [main] DEBUG org.apache.http.wire - << "Server: AmazonEC2[r][n]" 2014-11-29 13:33:46,022 [main] DEBUG org.apache.http.wire - << "[r][n]" 2014-11-29 13:33:46,047 [main] DEBUG org.apache.http.wire - << "239[r][n]" 2014-11-29 13:33:46,047 [main] DEBUG org.apache.http.wire - << "<?xml version="1.0" encoding="UTF-8"?>[n]" 2014-11-29 13:33:46,047 [main] DEBUG org.apache.http.wire - << "<StartInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2014-10-01/">[n]" 2014-11-29 13:33:46,047 [main] DEBUG org.apache.http.wire - << " <requestId>4cc69484-89c0-469f-a4a9-55f518e1be74</requestId>[n]" 2014-11-29 13:33:46,047 [main] DEBUG org.apache.http.wire - << " <instancesSet>[n]" 2014-11-29 13:33:46,047 [main] DEBUG org.apache.http.wire - << " <item>[n]" 2014-11-29 13:33:46,048 [main] DEBUG org.apache.http.wire - << " <instanceId>i-74cd1078</instanceId>[n]" 2014-11-29 13:33:46,048 [main] DEBUG org.apache.http.wire - << " <currentState>[n]" 2014-11-29 13:33:46,048 [main] DEBUG org.apache.http.wire - << " <code>0</code>[n]" 2014-11-29 13:33:46,048 [main] DEBUG org.apache.http.wire - << " <name>pending</name>[n]" 2014-11-29 13:33:46,048 [main] DEBUG org.apache.http.wire - << " </currentState>[n]" 2014-11-29 13:33:46,048 [main] DEBUG org.apache.http.wire - << " <previousState>[n]" 2014-11-29 13:33:46,048 [main] DEBUG org.apache.http.wire - << " <code>80</code>[n]" 2014-11-29 13:33:46,048 [main] DEBUG org.apache.http.wire - << " <name>stopped</name>[n]" 2014-11-29 13:33:46,048 [main] DEBUG org.apache.http.wire - << " </previousState>[n]" 2014-11-29 13:33:46,048 [main] DEBUG org.apache.http.wire - << " </item>[n]" 2014-11-29 13:33:46,048 [main] DEBUG org.apache.http.wire - << " </instancesSet>[n]" 2014-11-29 13:33:46,048 [main] DEBUG org.apache.http.wire - << "</StartInstancesResponse>" 2014-11-29 13:33:46,242 [main] DEBUG org.apache.http.wire - << "[r][n]" 2014-11-29 13:33:46,242 [main] DEBUG org.apache.http.wire - << "0[r][n]" 2014-11-29 13:33:46,242 [main] DEBUG org.apache.http.wire - << "[r][n]"
Ещё раз проверяем:
$ ec2-describe-instance-status i-74cd1078 -A INSTANCE i-74cd1078 us-west-2a running 16 initializing initializing active SYSTEMSTATUS reachability initializing INSTANCESTATUS reachability initializing
Останавливаем:
$ ec2-stop-instances i-74cd1078 INSTANCE i-74cd1078 running stopping
Готово.
P.S.
Несколько раз появлялась ошибка вида:
$ ec2-describe-instance-status i-74cd1078 -A Unknown problem connecting to host: 'https://ec2.us-west-2.amazonaws.com' Unable to execute HTTP request: ec2.us-west-2.amazonaws.com: No address associated with hostname
И dig
возвращал пустую строку, но через минуту всё работало опять:
$ dig ec2.us-west-2.amazonaws.com +short 205.251.235.5
Грешу на DNS дата-центра, которыми пользуюсь. Возможно – стоит добавить Google-вский 8.8.8.8.