この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
Terminal上でawscliを実行した時に、以下のメッセージに気が付きました。念の為ActionsのWorkflowでも確認してみましたが同様でした。
Note: AWS CLI version 2, the latest major version of the AWS CLI, is now stable and recommended for general use. For more information, see the AWS CLI version 2 installation instructions at: https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html
今年始めに AWS CLI のversion2が出てから、DevIOでもたくさんの記事が投稿されました。
ただ、日々のCICD運用においては最新バージョンへの依存が求められない限り、優先順位は低くなりがちです。また、AWSCLI version2は単純にversion1と置き換わるものではないこともあります。そこで、今後バージョン更新が強制される前提を見越した対応を試みました。
GitHub Actions でversion 2を使う
Dockerを用いる方法が用意されているため、それを利用する方法があります。
ただ、個人的にはversion1とversion2を手軽に切り替えることができて、且つマイナーバージョンの固定も可能にしておきたいというのが本音です。実行される度に変わるとトラブルの原因になりかねません。
そこで以下のActionを利用します。これは、version 1とversion 2の指定が手軽にできる上に、マイナーバージョンの固定も可能になっています。
使い方
指定するversion表記を変えるくらいで、後は固定です。
version 1を例にあげます。マイナーバージョンを指定しない、つまりversion: 1
とすることで、version 1の最新がインストールされます。
test_specific_v1:
runs-on: ubuntu-latest
name: specific v1
steps:
- uses: actions/checkout@v2
- id: install-aws-cli
uses: unfor19/install-aws-cli-action@v1
with:
version: 1.18.137
Actions Workflow上での実動作
該当処理のログを貼っておきます。
Run unfor19/install-aws-cli-action@v1
with:
version: 1.18.137
>> [LOG]: Validating semantic version
>> [LOG]: Valid version input
>> [LOG]: Setting _DOWNLOAD_URL
>> [LOG]: _DOWNLOAD_URL = https://s3.amazonaws.com/aws-cli/awscli-bundle-1.18.137.zip
>> [LOG]: Checking if the provided version exists in AWS
>> [LOG]: Provided version exists - 1.18.137
>> [LOG]: Downloading …
-rw-r--r-- 1 root root 17M Sep 11 19:15 unfor19-awscli.zip
>> [LOG]: Unzipping unfor19-awscli.zip
>> [LOG]: Installing AWS CLI - 1.18.137
Running cmd: /usr/bin/python virtualenv.py --no-download --python /usr/bin/python /usr/local/aws
Running cmd: /usr/local/aws/bin/pip install --no-binary :all: --no-cache-dir --no-index --find-links file://. setuptools_scm-3.3.3.tar.gz
Running cmd: /usr/local/aws/bin/pip install --no-binary :all: --no-cache-dir --no-index --find-links file://. wheel-0.33.6.tar.gz
Running cmd: /usr/local/aws/bin/pip install --no-binary :all: --no-build-isolation --no-cache-dir --no-index --find-links file:///home/runner/work/workflow-test/workflow-test/awscli-bundle/packages awscli-1.18.137.tar.gz
Symlink already exists: /usr/local/bin/aws
Removing symlink.
You can now run: /usr/local/bin/aws --version
Note: AWS CLI version 2, the latest major version of the AWS CLI, is now stable and recommended for general use. For more information, see the AWS CLI version 2 installation instructions at: https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html
>> [LOG]: Installation completed
total 17M
drwxr-xr-x 3 runner docker 4.0K Nov 19 08:34 .
drwxr-xr-x 3 runner docker 4.0K Nov 19 08:33 ..
drwxr-xr-x 3 root root 4.0K Nov 19 08:34 awscli-bundle
-rw-r--r-- 1 root root 17M Sep 11 19:15 unfor19-awscli.zip
total 8.0K
drwxr-xr-x 2 runner docker 4.0K Nov 19 08:34 .
drwxr-xr-x 3 runner docker 4.0K Nov 19 08:33 ..
>> [LOG]: Printing AWS CLI installed version
aws-cli/1.18.137 Python/2.7.17 Linux/5.4.0-1031-azure botocore/1.17.60
aws-cli/1.18.137 Python/2.7.17 Linux/5.4.0-1031-azure botocore/1.17.60
::set-output name=version::
バージョンが切り替わる仕組み
Actionのentrypointにて、バージョンによってダウンロードするインストーラを切り替えています。マイナーバージョンが指定されている際には該当のアーカイブに絞る形です。
set_download_url(){
msg_log "Setting _DOWNLOAD<em>URL"
# v1
if [[ $_AWS_CLI_VERSION =~ ^1._$ ]]; then
if [[ $_AWS_CLI_VERSION = "1" ]]; then
_DOWNLOAD_URL="https://s3.amazonaws.com/aws-cli/awscli-bundle.zip"
else
_DOWNLOAD_URL="https://s3.amazonaws.com/aws-cli/awscli-bundle-${_AWS_CLI_VERSION}.zip"
fi
# v2
elif [[ $_AWS_CLI_VERSION =~ ^2._$ ]]; then
if [[ $_AWS_CLI_VERSION = "2" ]]; then
# Latest v2
_DOWNLOAD_URL="https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"
else
# Specific v2
_DOWNLOAD_URL="https://awscli.amazonaws.com/awscli-exe-linux-x86</em>64-${_AWS_CLI_VERSION}.zip"
fi
fi
msg_log "_DOWNLOAD_URL = ${_DOWNLOAD_URL}"
}
注意点
複数回実行も可能ですが、初回実行時に環境変数に記録されたバージョンを用いて更新を行う形となります。(例:初回ver1でインストールなら、2回目以降にver2を含んでいても、全てver1としてインストール
Run unfor19/install-aws-cli-action@v1
with:
version: 2
env:
AWS_CLI_VERSION: 1.18.137
echo "AWS_CLI_VERSION=2" >> $GITHUB_ENV
sudo /home/runner/work/_actions/unfor19/install-aws-cli-action/v1/entrypoint.sh $AWS_CLI_VERSION
>> [LOG]: Checking if the provided version exists in AWS
>> [LOG]: Provided version exists - 1.18.137
>> [LOG]: Downloading ...
-rw-r--r-- 1 root root 17M Sep 11 19:15 unfor19-awscli.zip
>> [LOG]: Unzipping unfor19-awscli.zip
>> [LOG]: Installing AWS CLI - 1.18.137
ぱっと見はAWS_CLI_VERSION=2
で更新されているように見えますが、環境変数で直指定されたenv:AWS_CLI_VERSION: 1.18.137
が優先される形です。
あとがき
AWS公式で用意しているActionが存在しないため、先行して作成されているActionを確認していましたが、Starを多く集めていたActionは約12ヶ月前にArchive入した状態でした。
自前で用意するしかないかと思っていたところ、以下のIssueにて12日前についたコメントから今回のActionを見つけました。
個人的にカバーしたい要件を全部満たしているため扱ってみました。自前で用意するにも手間という場合にはおすすめです。