AWS CLIにalias機能が追加されました
西澤です。みんな大好き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の細かいアップデートをしっかり拾ってお伝えしていきたいと思います。