みんな大好き AWS CLI の v2 が 2020年2月11日日本時間早朝に GA(General Availability) となりました!
わーい。
https://aws.amazon.com/jp/blogs/developer/aws-cli-v2-is-now-generally-available/
筆者はAWS CLI の薄い本を書くくらい AWS CLI が好きだったりします。
というわけで、早速使ってみました。
インストール
公式ガイドには Linux、 macOS、 Windows 向けのインストール手順が載っています。
今回は、 AmazonLinux2 で試したので、 Linux の手順に則ってみました。
公式ガイド:https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html
インストールする
公式ガイドには以下の記載があります。
https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html#cliv2-linux-install
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
実際に試すとこんな感じ。
ec2-user@test ~]$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 30.6M 100 30.6M 0 0 64.1M 0 --:--:-- --:--:-- --:--:-- 64.0M
[ec2-user@test ~]$ ls
awscliv2.zip
[ec2-user@test ~]$
[ec2-user@test ~]$ unzip awscliv2.zip
Archive: awscliv2.zip
creating: aws/
creating: aws/dist/
(中略)
inflating: aws/dist/zlib/cpython-37m-x86_64-linux-gnu/soib.cpython-37m-x86_64-linux-gnu.so
[ec2-user@test ~]$
[ec2-user@test ~]$ sudo ./aws/install
You can now run: /usr/local/bin/aws --version
[ec2-user@test ~]$
[ec2-user@test ~]$ /usr/local/bin/aws --version
aws-cli/2.0.0 Python/3.7.3 Linux/4.14.154-128.181.amzn2.x86_64 botocore/2.0.0dev4
[ec2-user@test ~]$
早速試してみます。
本稿執筆時点での新機能は以下の通りです。
- インストーラ
- これは上記で試し済み。今までの差異としては、ビルド済みパッケージでの提供かつ前提を満たすバージョンの Python を事前にインストールする必要がなくなりました。
- 設定手順
- これまで AWS CLI に IAM ユーザーの認証情報を設定するのには、IAM ユーザー作成時に表示される情報もしくは作成時にダウンロードできる csv ファイルを参照して設定を行っていました。 v2 ではその csv ファイルをインポートして設定が可能になりました。
- また、認証方法として SSO も利用可能になりました。
- リソース名の自動補完
- すでに AWS アカウント上に存在するリソース名を補完して CLI のパラメータにしてができるようになりました。地味にすごい。
- 自動プロンプト
- 必要なパラメータ指定をアシストしてくれるようになりました。これで必須パラメータ漏れで怒られることも減ります。
- ウィザード
- いわゆる、対話型のコマンドとして動作するモードです。本稿執筆時点では一部のサービスのみに対応しています。
- yaml での出力
- 実行結果の出力形式に yaml が追加されました。
本稿では、リソース名の自動補完と自動プロンプト、ウィザード、yaml での出力について試してみます。
SSO は可能なら試行後に更新します。
リソース名の自動補完
現時点では全部のサービスには対応しきっていないようです。
例えば、試行した中では Amazon EC2 や Amazon S3 のバケット名、 RDS などは対応していないようです。
今後この辺りの拡充が期待されます。
というわけで、後述のウィザードに対応しているサービス(Amazon DynamoDB や AWS IAM、AWS Lambda)は対応しているようだったので、試してみました。
[ec2-user@test ~]$ aws dynamodb describe-table --table-name <TABキーを押す>
12234 table-us-east-1
[ec2-user@test ~]$
[ec2-user@test ~]$ aws iam get-user --user-name <TABキーを押す>
cli codecommit hirosys
[ec2-user@test ~]$
[ec2-user@test ~]$ aws lambda get-function --function-name <TABキーを押す>
AWS-DeepRacer-Test-Reward-Function aws-deepracer-reward-fn-********-****-****-****-************
自動プロンプト
自動プロンプト機能を使って、 Amazon VPC を作成してみました。
[ec2-user@test ~]$ aws ec2 create-vpc --cli-auto-prompt
--cidr-block: 10.20.0.0/16
必須パラメータである --cidr-block の指定の後、任意パラメータのリストが表示されました。
特に指定せずに一番下にある ** [DONE] Parameter input finished** を選択してEnterキーを押下すると、VPC が作成できました。
{
"Vpc": {
"CidrBlock": "10.20.0.0/16",
"DhcpOptionsId": "dopt-********",
"State": "pending",
"VpcId": "vpc-*****************",
"OwnerId": "************",
"InstanceTenancy": "default",
"Ipv6CidrBlockAssociationSet": [],
"CidrBlockAssociationSet": [
{
"AssociationId": "vpc-cidr-assoc-*****************",
"CidrBlock": "10.20.0.0/16",
"CidrBlockState": {
"State": "associated"
}
}
],
"IsDefault": false,
"Tags": []
}
}
無事に作成できました。
気になった点・・・
aws ec2 describe-instances を自動プロンプトモードで実行した際、 --instance-ids にインスタンスIDを指定しても、以下のメッセージが表示されて実行できませんでした。
An error occurred (InvalidInstanceID.Malformed) when calling the DescribeInstances operation: Invalid id: "-"
しかし、 Print CLI command. で出力した CLI を実行する分には意図した通りに動く不思議。。。
ウィザード
[ec2-user@test ~]$ aws lambda wizard new-function
まずは作成する Lambda 関数の名前を指定します。
次に、使用するランタイムの種類やバージョンをリストから選択します。
そして、 handler と Lambda 関数が入った zip ファイルを指定して、
最終的には以下のような感じになり、実行します。
[ec2-user@test ~]$ aws lambda wizard new-function
Enter the function name: cliv2
Select the Lambda runtime
Select the role to use
Enter the handler for your function: lambda_function.lambda_handler
Enter the new location of your code zip file: cliv2_test.zip
[ec2-user@test ~]$
特にエラーなく実行できれば Lambda 関数の作成に成功しています。
以下は、マネージメントコンソールで確認した結果です。
リストから選択したランタイムやロールが表示されると尚良さそうですね。
yaml での出力
好みの問題もあるかもしれませんが、個人的には yaml は読みやすいと思っているのでこのアップデートはナイスです。
[ec2-user@test ~]$ aws ec2 describe-instances --output yaml
Reservations:
- Groups: []
Instances:
- AmiLaunchIndex: 0
Architecture: x86_64
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
AttachTime: '2020-02-11T14:25:47+00:00'
DeleteOnTermination: true
Status: attached
VolumeId: vol-*****************
CapacityReservationSpecification:
CapacityReservationPreference: open
ClientToken: ''
CpuOptions:
CoreCount: 1
ThreadsPerCore: 1
EbsOptimized: false
EnaSupport: true
HibernationOptions:
Configured: false
Hypervisor: xen
IamInstanceProfile:
Arn: arn:aws:iam::************:instance-profile/role-tsuyoi
Id: *********************
ImageId: ami-*****************
InstanceId: i-*****************
InstanceType: t2.micro
KeyName: ***********
LaunchTime: '2020-02-11T14:25:46+00:00'
MetadataOptions:
HttpEndpoint: enabled
HttpPutResponseHopLimit: 1
HttpTokens: optional
State: applied
Monitoring:
State: disabled
NetworkInterfaces:
- Association:
IpOwnerId: amazon
PublicDnsName: ec2-***-***-***-***.ap-northeast-1.compute.amazonaws.com
PublicIp: ***.***.***.***
Attachment:
まとめ
AWS CLI はもともと好きでしたが、今回の v2 でさらにかゆいところに手が届く機能に変身しており、ますます好きな機能になったと感じました。
皆さんもこの機会に AWS CLI に触れてみてはいかがでしょうか。
追記
AWS さんが Docker Hub に AWS CLI v2 のイメージを公開してくれました!
さくっとお試しするのにはもってこいです!
早速使ってみた方が Qiita にまとめてくださっています!
https://qiita.com/kai_kou/items/cfb7c1d6a449e0da68d1