AWS CLI v2の公式Dockerイメージが出たみたいなので使ってみた

AWS CLI v2の公式Dockerイメージが出たみたいなので使ってみた

  • Post Author:

既に使っている方も多くいると思いますが、先月AWS CLI v2が正式リリースされました。このバージョンではバイナリが各メジャーなOS毎に用意されていて、Pythonのインストールが不要になったので、v1の頃より使いやすくなったかと思います。

それとは別につ先日の3月31日、公式からAWS CLI v2のDockerイメージの紹介がありました。ローカルではあまり使わないかもしれませんが、既にDockerを利用しているCI/CD環境でより簡単にAWS CLIが使えるようになったのではないでしょうか?

今回は、早速公式のAWS CLI v2のDockerイメージを使ってみたいと思います。

まずはversionを表示してみます:

$ docker run --rm -it amazon/aws-cli --version
Unable to find image 'amazon/aws-cli:latest' locally
(初回なのでイメージをPullしてます表示がされる...)

aws-cli/2.0.6 Python/3.7.3 Linux/4.19.76-linuxkit botocore/2.0.0dev10

表示されました。run はENTRYPOINTなので aws コマンドを指定する必要は無いみたいです。

Credentialを渡す

さて、認証をしないままでは何もできないので、実際のAWSアカウントのCredentialを渡してみましょう。

docker run の -v オプションでローカルの .aws ディレクトリをコンテナの /root/.aws にマウントするだけです:

$ docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli sts get-caller-identity
{
    "UserId": "AIDAJ4I7WUG3DXXXXXXXX",
    "Account": "XXX",
    "Arn": "arn:aws:iam::XXX:user/issei"
}

無事get-caller-identityで認証者の情報が取得できました。
ちなみにこのマウントでは設定ファイルもマウントできて便利です。特定のprofileを使いたい時は --profile オプションを使ってください。

ファイルをS3にアップロードする

S3にファイルをアップロードする場合にもマウントが必要です。

$ docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli s3 cp /aws/README.md s3://some-nice-bucket/
upload: ./README.md to s3://some-nice-bucket/README.md 

その他:他のDockerネットワーク上のLocalStackをエンドポイントとする

例えば、DockerComposeとかを使って特定のコンテナスタックを作っており、その中で動いているLocalStackに対してCLIを叩きたいとします。
その場合は、docker run のオプションでネットワークを指定すればOKです。

例えばdocker-compose.ymlのLocalStackが以下のような定義とします:

# ...

service:
  # DynamoDBのモックをポート4569で動かしてる
  localstack:
    image: localstack/localstack
    environment:
      - SERVICES=dynamodb:4569
    # ...

# ...

このスタックのネットワーク名を docker network で探します:

$ docker network ls                   
NETWORK ID          NAME                              DRIVER              SCOPE
xxxxxxxxxxxx        test_stack_default                bridge              local
...

ネットワーク名が test_stack_default である場合、これをそのまま --network オプションに指定すればOKです:

docker run --rm -it -v ~/.aws:/root/.aws --network test_stack_default amazon/aws-cli --endpoint http://localstack:4569/ dynamodb list-tables
{
    "TableNames": [
        "some-nice-dynamodb-table"
    ]
}

以上、使い方の例のご紹介でした。恐らくローカルで使う機会はそんな無さそうですが、先述の通りCI/CD用途には良さそうです。

we are hiring

優秀な技術者と一緒に、好きな場所で働きませんか

株式会社もばらぶでは、優秀で意欲に溢れる方を常に求めています。働く場所は自由、働く時間も柔軟に選択可能です。

現在、以下の職種を募集中です。ご興味のある方は、リンク先をご参照下さい。

コメントを残す