2013年10月15日火曜日

オープンソースのAWS CLI vol.1

こんにちは。村田です。

Amazon Web Services の特徴といえば Web GUI インターフェイスによる管理性の高さですが、時にはコマンドラインからも使えたらと思うことはなかったでしょうか。
コマンドラインを使うことで、スケジュールを組んでのコマンド実行や定期的な監視やアクションの実行など、管理の柔軟性が向上するメリットもあります。

このような要望が多かったのかはわかりませんが、2013年9月、コマンドラインでAWS管理するツールがAmazon Command Line Interface (CLI)がオープンソースとして提供が開始されました。ライセンスはApache License, Version 2.0により提供されています。

AWS / AWS-CLI
https://github.com/aws/aws-cli

AWS-CLI はPythonで作られており、マルチプラットフォーム(Windows,Linux,Unix)で提供されています。Linuxでのインストールには Python 2.6 以降のバージョンおよび easy-install もしくは pip が必要になります。

最新のAmazon Linux AMIには標準で AWS-CLI が組み込まれているので、まずは触ってみたいという方には最新のAmazon Linux AMI (http://aws.amazon.com/jp/amazon-linux-ami/) のご利用をお勧めします。

今回のブログ記事では実際に使ってみるところまでをご案内したいと思います。

まず、AWS-CLI を使用するには、AWS の Access Keys を設定する必要があります。
AWS Management Console にログインする代わりに、Access Keys を用いて認証を行います。
一度設定してしまえば、ログイン作業が省けるのは個人的には嬉しいところです。

Access Keys の取得は以下の手順で行いました。

AWS Management Console の Security Credentials を選択します。

Your Security Credentials の Access Keys (Access Key ID and Secret Access Key) より

セキュリティ証明書のページより、アクセス証明書の項目にアクセスキーがあります。
ここで、アクセスキー ID とシークレットアクセスキーを取得して下さい。


Amazon Linux の設定

最新の Amazon Linux のインスタンスであれば AWS-CLI に対応しているということでしたので、 amzn-ami-pv-2013.09.0.x86_64-ebs (ami-3561fe34) を使用して確認を行いました。

インスタンスを起動し、SSH 経由で接続すると以下のように表示されます。”aws” と入力して Tab キーによる補完してみると、aws コマンドの存在が確認できました。

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2013.09-release-notes/
[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ aws
aws            aws_completer

aws コマンドの設定ファイルは "~/.aws/config" に配置します。デフォルトより用意されていないようなので作成して編集します。

$ mkdir .aws
$ cd .aws/

$ vi config

AWS の access Key と secret access key を設定の中に記述します。また、利用するリージョンもここで設定します。

[default]
aws_access_key_id = ACCESS_KEY_ID
aws_secret_access_key = SECRET_KEY_ID
region = ap-northeast-1

config の中でデフォルトの region の指定も行っています。これだけで AWS-CLI を使う準備ができました。
AWS-CLI の基本書式は以下のようになります。

$ aws <command> <sub-command> [options and parameters]

使い方に困ったときは、もちろん help が使えます。

$ aws help

AWS()                                                                    AWS()

NAME
       aws -

DESCRIPTION
       The  AWS  Command  Line  Interface is a unified tool to manage your AWS
       services.

SYNOPSIS
           aws [options]   [parameters]

       Use aws command help for information on a specific command.

OPTIONS
       --debug (boolean)

       Turn on debug logging.

       --endpoint-url (string)

       Override command's default URL with the given URL.

       --no-verify-ssl (boolean)

       Override default behavior of verifying SSL certificates.

       --no-paginate (boolean)

       Disable automatic pagination.

       --output (string)

       The formatting style for command output.

       o json

       o text

まずは、ディスクの情報を取得するとどのように表示されるのか見てみましょう。

[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ aws ec2 describe-volumes
{
    "Volumes": [
        {
            "AvailabilityZone": "ap-northeast-1a",
            "Attachments": [
                {
                    "AttachTime": "2013-10-04T09:04:43.000Z",
                    "InstanceId": "i-ec69a7e9",
                    "VolumeId": "vol-c226d294",
                    "State": "attached",
                    "DeleteOnTermination": true,
                    "Device": "/dev/sda1"
                }
            ],
            "VolumeType": "standard",
            "VolumeId": "vol-c226d294",
            "State": "in-use",
            "SnapshotId": "snap-adac1288",
            "CreateTime": "2013-10-04T09:04:43.000Z",
            "Size": 8
        },
        {
            "AvailabilityZone": "ap-northeast-1a",
            "Attachments": [
                {
                    "AttachTime": "2013-10-04T10:18:03.000Z",
                    "InstanceId": "i-f2ceb6f7",
                    "VolumeId": "vol-cc22d69a",
                    "State": "attached",
                    "DeleteOnTermination": false,
                    "Device": "/dev/sda"
                }
            ],
            "VolumeType": "standard",
            "VolumeId": "vol-cc22d69a",
            "State": "in-use",
            "SnapshotId": "snap-943880b6",
            "CreateTime": "2013-10-04T10:18:03.000Z",
            "Size": 8
        }
    ]
}

標準ではどうやら JSON フォーマットでの出力が行われるようです。
先ほどの help コマンド実行時に --output (string) というのがあったので、table で出力指定してみると...

$ aws ec2 describe-volumes --output table
---------------------------------------------------------
|                    DescribeVolumes                    |
+-------------------------------------------------------+
||                       Volumes                       ||
|+---------------------+-------------------------------+|
||  AvailabilityZone   |  ap-northeast-1a              ||
||  CreateTime         |  2013-10-04T09:04:43.000Z     ||
||  Size               |  8                            ||
||  SnapshotId         |  snap-adac1288                ||
||  State              |  in-use                       ||
||  VolumeId           |  vol-c226d294                 ||
||  VolumeType         |  standard                     ||
|+---------------------+-------------------------------+|
|||                    Attachments                    |||
||+----------------------+----------------------------+||
|||  AttachTime          |  2013-10-04T09:04:43.000Z  |||
|||  DeleteOnTermination |  True                      |||
|||  Device              |  /dev/sda1                 |||
|||  InstanceId          |  i-ec69a7e9                |||
|||  State               |  attached                  |||
|||  VolumeId            |  vol-c226d294              |||
||+----------------------+----------------------------+||
||                       Volumes                       ||
|+---------------------+-------------------------------+|
||  AvailabilityZone   |  ap-northeast-1a              ||
||  CreateTime         |  2013-10-04T10:18:03.000Z     ||
||  Size               |  8                            ||
||  SnapshotId         |  snap-943880b6                ||
||  State              |  in-use                       ||
||  VolumeId           |  vol-cc22d69a                 ||
||  VolumeType         |  standard                     ||
|+---------------------+-------------------------------+|
|||                    Attachments                    |||
||+----------------------+----------------------------+||
|||  AttachTime          |  2013-10-04T10:18:03.000Z  |||
|||  DeleteOnTermination |  False                     |||
|||  Device              |  /dev/sda                  |||
|||  InstanceId          |  i-f2ceb6f7                |||
|||  State               |  attached                  |||
|||  VolumeId            |  vol-cc22d69a              |||
||+----------------------+----------------------------+||

なるほど、 table で出力されました。
なお、output=text とすると text での出力になります。

出力形式も ~/.aws/config に設定することで変更することができます。
例えば text モードに設定を変更するには、以下のように記述します。

$ cd
$ vi .aws/config
[default]
aws_access_key_id = ACCESS_KEY_ID
aws_secret_access_key = SECRET_KEY_ID
region = ap-northeast-1
output=text

同じようにコマンドを入力すると今度は text 出力が行われました。

$ aws ec2 describe-volumes

ap-northeast-1a standard        vol-c226d294    in-use  snap-adac1288   2013-10-04T09:04:43.000Z        8
2013-10-04T09:04:43.000Z        i-ec69a7e9      vol-c226d294    attached        True    /dev/sda1
ap-northeast-1a standard        vol-cc22d69a    in-use  snap-943880b6   2013-10-04T10:18:03.000Z        8
2013-10-04T10:18:03.000Z        i-f2ceb6f7      vol-cc22d69a    attached        False   /dev/sda

個人的には慣れ親しんだ text 出力が好みですが、利用者が出力形式も選べるというのは嬉しいところですね。

少々長くなりましたが、次回は実際にインスタンスを管理するところまでを案内したいと思います。
AWS-CLI には様々な使い道が考えられるので、選択肢が多すぎて悩んでしまいます。

0 件のコメント:

コメントを投稿