CircleCI で ServerlessFramework のデプロイを行うときに環境変数で設定した AWS クレデンシャルから別のアカウントにデプロイしたいパターンがあったのでメモ。
別のアカウントのクレデンシャルを CircleCI のコンテキスト使って環境変数に登録してしまえばいいじゃないかとも考えましたが、何個もクレデンシャル登録したくないなーということでスイッチロールでできないかやってみました。
先に結論
試した環境
aws-cli 自体のインストール、 serverless framework は公式 orbs を使っています。
- CircleCI 2.1
- Orbs
- circleci/serverless-framework@1.0.1
- circleci/aws-cli@1.0.0
config.yml
aws cli のクレデンシャルに直接スイッチ先の情報を書き込んでいます
"setup credential":
steps:
- aws-cli/setup:
aws-access-key-id: AWS_ACCESS_KEY
aws-region:AWS_REGION
aws-secret-access-key: AWS_SECRET_KEY
profile-name: jump
- run:
name: setup credential
command: |
echo "[hogehoge]" >> ~/.aws/credentials
echo "region = {リージョン名}" >> ~/.aws/credentials
echo "role_arn = {IAM ロール ARN}" >> ~/.aws/credentials
echo "source_profile = jump" >> ~/.aws/credentials
- serverless/setup
- run:
name: deploy
command: sls deploy
試してダメだったこと
aws cli の configure set を使う
config.yml の中でジャンプ先のクレデンシャルを作るのに configure set を使ってみましたが、 API キー を空だったり適当な値を入れると sls deploy
がエラーになってしまいます。
かと言って、 API キーを登録しないでとりあえずリージョンなど登録してもクレデンシャルが作られず ~/.aws/config
の方に書き込まれてしまって、 sls deploy
実行時に「クレデンシャルがないよ!」と怒られてしまいました。
- run:
name: setup credential
command: |
aws configure set region {リージョン名} --profile hogehoge
aws configure set role_arn {IAM ロール ARN} --profile hogehoge
aws configure set source_profile jump --profile hogehoge
# 空の API キーは NG でした
aws configure set aws_access_key_id "" --profile hogehoge
aws configure set aws_secret_access_key "" --profile hogehoge
サードパーティーの orbs を使う
公式 aws-cli はスイッチロールは対応してませんが、サードパーティーな orbs でこの辺の拡張してたりしないだろうか・・・ということで探してみました。
発見!
https://circleci.com/orbs/registry/orb/appfolio/awscli
なぜか source_profile
に自分自身を設定しているのでスイッチロールできなさそう・・・。