AWS CLI v2 が GA(General Availability) になったので早速使ってみました。


みんな大好き 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