Amazon web service: установка EC2 CLI tools

Автор: | 11/29/2014
 

aws-logo-square-02CLI позволяет управлять не только серверами, но и настройками сети, базами данных, «дисками».

В общем, все те же операции, что и в панели управления — но в консоли.

Установка выполняетс яна 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).

Переходим в панель управления:

ec2_cli_1

Кликаем на Create new access key:

ec2_cli_2

Сохраняем ключи на диск, и открываем для просмотра:

ec2_cli_3

Добавляем ещё две переменные:

$ 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, и находим указание её зоны:

ec2_cli_4

Находим 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_cli_5

И выполняем запрос:

$ 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.