7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CircleCIAdvent Calendar 2021

Day 8

AWS CLIのためだけにcimg/pythonを使う必要はない

Last updated at Posted at 2021-12-07

CircleCIでAWS CLIを使うために、cimg/python(circleci/python)イメージを使い、pipでインストールしている人も多いかと思います。

以前はAWS CLIがPythonに依存していたので、Pythonが入ったイメージを使うのが効率的でした。ですが現行バージョンのAWS CLI v2は依存関係がないバイナリで提供されるので、Pythonがない環境でも動作します。したがってCircleCIでAWS CLIを使うだけならcimg/baseで問題ありません。

pipでインストールできるAWS CLIは非推奨バージョン

そもそも現行のv2はPyPIに公開されていないので、pipでインストールできません。これは意図的だそうです。反発も多くGitHubのIssueは相当荒れた結果、ロックされました。

publish v2 to PyPI

AWSとしてはv1はすでに推奨しておらず、v2の機能が必ずしもバックポートされないことが明記されています。今から使うならv2一択でしょう。

AWS CLI CLI バージョン 1 はオリジナルの AWS CLI CLI であり、引き続きサポートしています。ただし、‭AWS CLI‬ CLI バージョン 2 で導入された主な新機能は、‭AWS CLI‬ バージョン 1 にバックポートされない場合があります。これらの機能を使用するには、AWS CLI CLI バージョン 2 をインストールする必要があります。

AWS CLI のバージョンについて

ですがPyPIのダウンロードランキングによれば、awscli v1の順位は2021/12/05時点でWeekly9位、Monthly12位と相当な人気です。

PyPI Stats
PyPIランキング

AWS CLI v2のインストール

Orbが使える環境では公式のaws-cli Orbを使うと楽です。

Orbが使えない環境でもインストールは特に難しいことはなく、アーカイブを解凍してインストールするだけです。x86_64 Linux Executerで最新版CLIを使うならこんな感じです。

- run:
          name: install aws-cli(binary)
          command: |
            curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
            unzip -q awscliv2.zip
            sudo ./aws/install
            aws --version

Pagerに関する注意

AWS CLI v2では出力がless経由になります。手動で実行しているときは便利なこともありますが、CIは失敗します。このためpagerの無効化が必要です。

破壊的変更 - AWS CLI バージョン 1 からバージョン 2 への移行

無効化にはいくつかやり方はありますが、一例としてenvironmentでPAGER=catを与えるとpagerがcatになり、止まらなくなります。

他にもAWS_PAGER=""などでも無効化できるようです。

environment:
      PAGER: cat

インストール速度比較

下記config.ymlで簡単な速度比較を行ってみました。実行環境によって実行時間も変わってくるので、目安と思ってください。

version: 2
jobs:
  cli-pip:
    docker: 
      - image: cimg/python:3.10
    steps:
      - checkout
      - run:
          name: install aws-cli(pip)
          command: |
            pip3 -q install awscli
            aws --version
  cli-binary:
    docker: 
      - image: cimg/base:stable
    steps:
      - checkout
      - run:
          name: install aws-cli(binary)
          command: |
            curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
            unzip -q awscliv2.zip
            sudo ./aws/install
            aws --version
workflows:
  version: 2
  benchmark: 
    jobs:
    - cli-pip
    - cli-binary

pip経由でインストールした場合

13秒かかりました
pip install

バイナリでインストールした場合

4秒かかりました
binary install

AWS CLIが初めから入ったイメージはないの?

AWS公式でaws-cli Dockerイメージを提供していますが、gitやsshなどが入っていないので、CIで使うには向いていません。

amazon/aws-cli

まとめ

  • CircleCIでAWS CLIを使うなら、pip installではなく、パッケージインストールの方が効率的
  • デフォルトだと出力が途中で止まってしまうので、Pagerの無効化は必須
7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?