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

2016.12.02

西澤です。みんな大好き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の細かいアップデートをしっかり拾ってお伝えしていきたいと思います。