AWS CLIにalias機能が追加されました

aws-cli

西澤です。みんな大好きAWS CLIに地味に嬉しいアップデートがあったのをたまたま見つけたのでご紹介したいと思います。

AWS CLIのリリース情報を確認していたところ、ちょっと気になる記述を見つけました。

  • 1.11.24
    • feature:alias: Add ability to alias commands in the CLI

aws-cli/CHANGELOG.rst at develop · aws/aws-cli

しかし、使い方がどこにも見当たらずどうしたものか???と思っていたのですが、下記ページに詳しい使い方が書かれていました。

AWS CLIのaliasをセットアップ

前提として、AWS CLIのバージョンを執筆時点での最新版である1.11.24まで上げておく必要があります。必要に応じてバージョンアップしておきましょう。

$ aws --version
aws-cli/1.11.24 Python/2.7.10 Darwin/15.6.0 botocore/1.4.81

GitHubのREADMEの通りです。~/.aws/cli/aliasに特定の書式でファイルを作成することで利用できるようです。GitHub上のサンプルファイル内には7つの例が記載されています。

$ git clone https://github.com/awslabs/awscli-aliases.git
$ mkdir -p ~/.aws/cli
$ cp awscli-aliases/alias ~/.aws/cli/alias
$ cat ~/.aws/cli/alias
[toplevel]

whoami = sts get-caller-identity

create-assume-role =
  !f() {
    aws iam create-role --role-name "${1}" \
      --assume-role-policy-document \
        "{\"Statement\":[{\
            \"Action\":\"sts:AssumeRole\",\
            \"Effect\":\"Allow\",\
            \"Principal\":{\"Service\":\""${2}".amazonaws.com\"},\
            \"Sid\":\"\"\
          }],\
          \"Version\":\"2012-10-17\"\
        }";
  }; f


running-instances = ec2 describe-instances \
    --filter Name=instance-state-name,Values=running \
    --output table \
    --query 'Reservations[].Instances[].{ID: InstanceId,Hostname: PublicDnsName,Name: Tags[?Key==`Name`].Value | [0],Type: InstanceType, Platform: Platform || `Linux`}'

ebs-volumes= ec2 describe-volumes \
    --query 'Volumes[].{VolumeId: VolumeId,State: State,Size: Size,Name: Tags[0].Value,AZ: AvailabilityZone}' \
    --output table

amazon-linux-amis = ec2 describe-images \
    --filter \
      Name=owner-alias,Values=amazon \
      Name=name,Values="amzn-ami-hvm-*" \
      Name=architecture,Values=x86_64 \
      Name=virtualization-type,Values=hvm \
      Name=root-device-type,Values=ebs \
      Name=block-device-mapping.volume-type,Values=gp2 \
    --query "reverse(sort_by(Images, &CreationDate))[*].[ImageId,Name,Description]" \
    --output text

list-sgs = ec2 describe-security-groups --query "SecurityGroups[].[GroupId, GroupName]" --output text

sg-rules = !f() { aws ec2 describe-security-groups \
    --query "SecurityGroups[].IpPermissions[].[FromPort,ToPort,IpProtocol,join(',',IpRanges[].CidrIp)]" \
    --group-id "$1" --output text; }; f

AWS CLIのaliasの使い方

まずは、先に配置したサンプルに含まれているaliasを順番に試してみましょう。

$ aws whoami
{
    "Account": "123456789012",
    "UserId": "AIDAXXXXXXXXXXXXXXXX",
    "Arn": "arn:aws:iam::123456789012:user/cm-nishizawa.tetsunori"
}

$ aws running-instances
------------------------------------------------------------------------------------------------------------------
|                                                DescribeInstances                                               |
+----------------------------------------------------------+-------------+-------------+-----------+-------------+
|                         Hostname                         |     ID      |    Name     | Platform  |    Type     |
+----------------------------------------------------------+-------------+-------------+-----------+-------------+
|  ec2-00-000-0-00.ap-northeast-1.compute.amazonaws.com    |  i-xxxxxxxx |  aaaaaaaaaa |  Linux    |  t2.nano    |
|                                                          |  i-xxxxxxxx |  bbbbbbbbbb |  Linux    |  m4.xlarge  |
|                                                          |  i-xxxxxxxx |  cccccccc   |  Linux    |  t2.micro   |
|                                                          |  i-xxxxxxxx |  dddddddddd |  Linux    |  t2.micro   |
|  ec2-00-000-000-000.ap-northeast-1.compute.amazonaws.com |  i-xxxxxxxx |  eeeeeeeeee |  Linux    |  t2.large   |
|                                                          |  i-xxxxxxxx |  ffffffff   |  Linux    |  m4.xlarge  |
|  ec2-00-000-000-000.ap-northeast-1.compute.amazonaws.com |  i-xxxxxxxx |  gggggggggg |  Linux    |  t2.micro   |
|  ec2-00-000-00-00.ap-northeast-1.compute.amazonaws.com   |  i-xxxxxxxx |  hhhhhhhh   |  Linux    |  t2.nano    |
|                                                          |  i-xxxxxxxx |  iiiiiiiiii |  Linux    |  t2.medium  |
|                                                          |  i-xxxxxxxx |  jjjjjjjjjj |  Linux    |  t2.small   |
|                                                          |  i-xxxxxxxx |  kkkkkkkkkk |  Linux    |  t2.micro   |
|  ec2-00-00-00-00.ap-northeast-1.compute.amazonaws.com    |  i-xxxxxxxx |  llllllll   |  Linux    |  t2.nano    |
|                                                          |  i-xxxxxxxx |  mmmmmmmm   |  Linux    |  m4.xlarge  |
|                                                          |  i-xxxxxxxx |  nnnnnnnnnn |  Linux    |  m4.xlarge  |
+----------------------------------------------------------+-------------+-------------+-----------+-------------+

$ aws amazon-linux-amis
ami-0c11b26d    amzn-ami-hvm-2016.09.0.20161028-x86_64-gp2  Amazon Linux AMI 2016.09.0.20161028 x86_64 HVM GP2
ami-1a15c77b    amzn-ami-hvm-2016.09.0.20160923-x86_64-gp2  Amazon Linux AMI 2016.09.0.20160923 x86_64 HVM GP2
ami-15ca1d74    amzn-ami-hvm-2016.09.rc-0.20160910-x86_64-gp2   Amazon Linux AMI 2016.09.rc-0.20160910 x86_64 HVM GP2
ami-374db956    amzn-ami-hvm-2016.03.3.x86_64-gp2   Amazon Linux AMI 2016.03.3 x86_64 HVM GP2
ami-6154bb00    amzn-ami-hvm-2016.03.2.x86_64-gp2   Amazon Linux AMI 2016.03.2 x86_64 HVM GP2
ami-29160d47    amzn-ami-hvm-2016.03.1.x86_64-gp2   Amazon Linux AMI 2016.03.1 x86_64 HVM GP2
ami-f80e0596    amzn-ami-hvm-2016.03.0.x86_64-gp2   Amazon Linux AMI 2016.03.0 x86_64 HVM GP2
ami-59bdb937    amzn-ami-hvm-2015.09.2.x86_64-gp2   Amazon Linux AMI 2015.09.2 x86_64 HVM GP2
ami-383c1956    amzn-ami-hvm-2015.09.1.x86_64-gp2   Amazon Linux AMI 2015.09.1 x86_64 HVM GP2
ami-9a2fb89a    amzn-ami-hvm-2015.09.0.x86_64-gp2   Amazon Linux AMI 2015.09.0 x86_64 HVM GP2
ami-1c1b9f1c    amzn-ami-hvm-2015.03.1.x86_64-gp2   Amazon Linux AMI 2015.03.1 x86_64 HVM GP2
ami-cbf90ecb    amzn-ami-hvm-2015.03.0.x86_64-gp2   Amazon Linux AMI 2015.03.0 x86_64 HVM GP2
ami-1e86981f    amzn-ami-hvm-2014.09.2.x86_64-gp2   Amazon Linux AMI 2014.09.2 x86_64 HVM GP2
ami-4585b044    amzn-ami-hvm-2014.09.1.x86_64-gp2   Amazon Linux AMI 2014.09.1 x86_64 HVM GP2
ami-45072844    amzn-ami-hvm-2014.09.0.x86_64-gp2   Amazon Linux AMI 2014.09.0 x86_64 HVM GP2
ami-df470ede    amzn-ami-hvm-2014.03.2.x86_64-gp2   Amazon Linux AMI 2014.03.2 x86_64 HVM GP2

$ aws list-sgs
sg-xxxxxxxx default
sg-xxxxxxxx default
sg-xxxxxxxx default
sg-xxxxxxxx default
sg-xxxxxxxx launch-wizard-1
sg-xxxxxxxx myip
sg-xxxxxxxx rds-launch-wizard

$ aws sg-rules sg-76f2a510
22  22  tcp 00.000.000.00/32
3389    3389    tcp 00.000.000.00/32

独自のaliasを追加してみる

長いコマンドの1つをaliasで追加してみました。

$ tail -1 ~/.aws/cli/alias
daz = ec2 describe-availability-zones

それでは早速試してみます。

$ aws daz
{
    "AvailabilityZones": [
        {
            "State": "available",
            "RegionName": "us-west-2",
            "Messages": [],
            "ZoneName": "us-west-2a"
        },
        {
            "State": "available",
            "RegionName": "us-west-2",
            "Messages": [],
            "ZoneName": "us-west-2b"
        },
        {
            "State": "available",
            "RegionName": "us-west-2",
            "Messages": [],
            "ZoneName": "us-west-2c"
        }
    ]
}
$ aws daz --output text
AVAILABILITYZONES   us-west-2   available   us-west-2a
AVAILABILITYZONES   us-west-2   available   us-west-2b
AVAILABILITYZONES   us-west-2   available   us-west-2c

うまくいきましたね!

まとめ

re:Inventで盛り上がっている中ですが、今後もAWSの細かいアップデートをしっかり拾ってお伝えしていきたいと思います。