話題の記事

[アップデート] リソース名の補完など強力な機能追加!AWS CLI v2 が GA されました!

AWS CLI v2 が GA!!最高やん。
2020.02.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

本日、AWS CLI v2 の GA がアナウンスされました!

ちょっと使ってみましたが、あまりの便利さに感動しております!

AWS CLI v2

従来の AWS CLI v1 に比べてインストールが容易(python のバージョンがーーっ!!とか悩まない)になっているだけでなく、AWS シングルサインオン(SSO)対応リソース名の補完ウィザードオプションなど強力なインタラクティブ機能が追加されています。

あと、YAML 形式の出力も使えますね!

詳細については、Shirota の re:Invent のセッションレポートをあわせてお読みください。

また、今回の記事では触れていない AWS SSO 対応については、Kitano の記事を参照ください。

何はともあれインストール

今回は自分の mac に AWS CLI v2 をインストールしました。従来の AWS CLI v1 や、direnv などのツールをインストールしている環境でしたが、結論から申し上げると特に何も考えることなく、インストーラーを実行して使えています。

インストール手順

公式ガイドに以下のインストール手順があります。

macOS にインストール

基本的に、手順どおりに進めていただければ、特に詰まることなくインストールが完了するかと思います。

$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg”
$ sudo installer -pkg AWSCLIV2.pkg -target /
Password:
installer: Package name is AWS Command Line Interface
installer: Installing at base path /
installer: The install was successful.

$ which aws
/usr/local/bin/aws

$ aws --version
aws-cli/2.0.0 Python/3.7.4 Darwin/18.7.0 botocore/2.0.0dev4

既存のクレデンシャル情報をそのまま利用できます。

機能追加

インストールが完了しましたので、新機能について試していきましょう。

クレデンシャルのインポート

従来、AWS CLI の設定をする際に、IAM 管理者から渡された .csv のクレデンシャル情報を開き、aws configure を叩いてアクセスキー、シークレットキーなどをコピペされていたかと思いますが、ファイルのままインポート出来るようになりました。

$ aws configure import --csv file://credentials.csv
Successfully imported 1 profile(s)

ユーザー名がないとダメらしい

ユーザー作成時の credentials.csv は問題なくインポートできましたが、既存ユーザーのアクセスキーを払い出した場合の accessKeys.csv だとユーザー名が含まれていないということでエラーになりました。

$ aws configure import --csv file://accessKeys.csv
Expected header "User Name" not found

default プロファイルは上書きされない

クレデンシャル情報は、default プロファイルではなく、ユーザー名(test-user)をプロファイル名にインポートするようですので、ユーザー名がないとエラーになるのかもしれません。

$ cat ~/.aws/credentials
[test-user]
aws_access_key_id = AKI***********
aws_secret_access_key = WO8H*****************

リソース名の補完

個人的に最高に感動したのが、リソース名の補完機能です。

従来の AWS CLI v1 ではコマンドの補完は出来ましたが、リソース名の補完はできませんでした。パラメータに指定するリソース名は別途、調べておく必要がありましたが、タブで補完してくれるのは本当にありがたいです。

$ aws iam update-role --role-name cm<TAB>
cm-config-role-all-regions  cm-job                      cm-membersportal            cm-test-role                cmtestpool-SMS-Role
cm-helpdesk

いくつかのサービスで試してみましたが、まだ、すべてのサービスのリソース名が補完されるわけでは無さそうでしたが、徐々に対応範囲が増えてくることを期待しましょう。

(補足)
補完が効かない場合、以下のコマンドを実行してください。v1 のときに .bash_profile 等に記載している場合は、そのまま使えます。

$ complete -C aws_completer aws

自動プロンプト

これも感動しました。コマンドのパラメータ名を補完しても、「必須パラメータってなんだっけ?」、「あれ?このパラメータってなんだっけ?」と迷うことは多々ありました。

今回、追加された --cli-auto-prompt オプションを利用すると、必須パラメータの入力をまず求められます。

その後、追加のパラメータはリストから選択することが可能です。各オプションの値の型や、簡単な説明も記載されているので便利ですね。

最後に、そのまま実行するのか、CLI コマンドを表示させるだけにするのか選択できます。

Print CLI command. を選択すると、以下のように CLI コマンドが表示されました。

$ aws s3api create-bucket --cli-auto-prompt
--bucket: cm-test-cliv2
aws s3api create-bucket --bucket cm-test-cliv2

ウィザード

--cli-auto-prompt より、更に抽象化して利用できる wizard オプションが追加されています。対応しているサービスや、アクションはまだ少ないですが、AWS コンソールを CLI メニューで操作する、といった感覚に近いです。

以下のように wizard <ウィザード名> を指定して利用します。

$ aws <service-name> wizard <wizard-name>

執筆時点で対応しているサービスおよび、ウィザード名は下記のとおりです。

  • aws configure
  • aws iam
    • new-role
  • aws dynamodb
    • new-table
  • aws lambda
    • new-function

以下、aws iam wizard new-role を実行した例です。選択できる値などもプルダウンで表示されるので便利ですね。

YAML 形式の出力

aws configure で出力形式を yaml に設定するか、--output yaml を付与して実行すれば YAML 形式の出力も使えます。

$ aws configure
AWS Access Key ID [****************XXXX]:
AWS Secret Access Key [****************XXXX]:
Default region name [ap-northeast-1]:
Default output format [None]: yaml

こんな感じです。

$ aws iam list-users
Users:
- Arn: arn:aws:iam::XXXXXXXXXXXX:user/CodeCommitUser
  CreateDate: '2020-01-18T11:38:32+00:00'
  Path: /
  UserId: XXXXXXXXXXXXXXXXX
  UserName: CodeCommitUser
- Arn: arn:aws:iam::XXXXXXXXXXXX:user/test-user
  CreateDate: '2020-02-10T23:28:42+00:00'
  Path: /
  UserId: XXXXXXXXXXXXXXXXX
  UserName: test-user

注意点

いくつか下位互換性のない変更が含まれているようですので、このあたりは公式ガイドを参照ください。

さいごに

待望の AWS CLI v2 の GA ですね!個人的には Python バージョンの管理から開放されただけでも非常に嬉しいのですが、加えて補完機能が強力になっているなど最高だな、と思います。

普段は本当に簡単な CLI コマンドしか使ってなかったんですが、CLI v2 であればちょっとした設定や、確認は補完機能をうまく使いながら CLI だけで完結できそうな気がします。

ぜひ、みなさんもお試しください!

以上!大阪オフィスの丸毛(@marumo1981)でした!

リファレンス