こんにちは。
アプリケーションサービス本部ディベロップメントサービス2課の濱田です。
普段は滋賀に住んでます。
東京は人が多くて苦手ですが、喫茶室ルノアールだけは大好きです☕️
さて、初心者として GitHub Actions のデプロイ構築で詰まったところを書き残しています。
私と同じような初心者の方で「あれっ、これどうやるんだっけ」と思った方がこのブログに辿り着いて、問題解決の数分間を節約できたら嬉しいです。
どなたかのお役に立てば幸いです!
前提:GitHub Actions で AWS にデプロイするには
GitHub Actions の実行環境は、詳細はともかく、GitHub がホストしているコンピューティングリソースです。
そしてこの環境と、デプロイ先となる AWS 環境は別のものですので、当然「AWS 環境へとアクセスする権限」を GitHub Actions に割り当てる必要があります。
GitHub Actions が AWS 権限を引き受けるために、どのような権限のセッティングが必要で、どのような仕組みが必要なのか?——CI/CD における権限設定はそれだけで大きな論題となりますので、稿を改めたいのですが、今回フォーカスしたいのは aws-actions/configure-aws-credentials です。
この GitHub Action を使うことで、GitHub Actions から AWS のサービスにアクセスするための認証情報を設定できます。
疑問:デプロイコマンドに権限指定は必要?
aws-actions/configure-aws-credentials を使って AWS 認証情報を設定した後、実際のデプロイコマンド(例:aws s3 sync や aws ecs update-service など)を実行する際に、改めて認証情報を指定する必要があるのか?という疑問が浮上します。
たとえば、こんな感じで認証情報を設定した後:
- name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole role-session-name: GitHubActions aws-region: ap-northeast-1
その後のステップで AWS CLI コマンドを実行する時に、さらに --profile オプションや環境変数の指定が必要なのでしょうか?
- name: Deploy to S3 run: | aws s3 sync ./dist s3://my-bucket --region ap-northeast-1 --profile default
初心者だと「権限設定したけど、コマンドでも指定しないとダメかな?」と迷ってしまいますよね。
解決:環境変数として登録されるので指定しないでOK
結論として、デプロイコマンドに追加の権限指定は不要です。
aws-actions/configure-aws-credentials は、認証情報を以下の環境変数として設定してくれます:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN(一時的な認証情報の場合)AWS_DEFAULT_REGION
AWS CLI や AWS SDK は、これらの環境変数を自動的に読み取って認証を行うため、コマンド実行時に追加で --profile や --access-key-id などのオプションを指定する必要がありません。
つまり、こんな感じでシンプルに書けます:
- name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole role-session-name: GitHubActions aws-region: ap-northeast-1 - name: Deploy to S3 run: | aws s3 sync ./dist s3://my-bucket - name: Update ECS service run: | aws ecs update-service --cluster my-cluster --service my-service --force-new-deployment
認証情報は既に環境変数として設定済みなので、各コマンドは自動的にそれらを使用してくれます。
注意:むしろ--profile オプションを使うとエラーになる
以下、私の失敗談です。
普段ローカル環境で AWS CLI を使っている方は、--profile オプションでプロファイルを指定することに慣れているかもしれません。しかし、GitHub Actions 内では --profile オプションを指定してはいけません。
- name: Deploy to S3 run: | aws s3 sync ./dist s3://my-bucket --profile default
なぜかというと、AWS CLI の認証情報の優先順位は以下のようになっているからです:
- コマンドラインオプション(
--access-key-id、--secret-access-keyなど) - 環境変数(
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYなど) - AWS 認証情報ファイル(
~/.aws/credentialsの内容) - AWS 設定ファイル(
~/.aws/configの内容) - IAM ロール(EC2 インスタンスなどにアタッチされたロール)
--profile オプションは AWS 認証情報ファイルや設定ファイルを参照しようとしますが、GitHub Actions の実行環境にはそれらのファイルが存在しません。そのため、--profile を指定すると認証エラーが発生してしまいます。
aws-actions/configure-aws-credentials が設定してくれる環境変数は優先順位2番目なので、追加のオプション指定なしで自動的に使用されるというわけなのですね。
まとめ
本記事は以上です。
aws-actions/configure-aws-credentials で認証情報を設定した後は、環境変数として自動的に設定されるため、その後の AWS CLI コマンドで追加の権限指定は不要です。
シンプルに書けて、迷いも減りますね。
みなさん、よき開発ライフを!
濱田 明日郎(執筆記事の一覧)
アプリケーションサービス本部ディベロップメントサービス2課
ベルクソン哲学研究で博士号取得ののち、2024年にサーバーワークスに新卒入社。
2025 Japan All AWS Certifications Engineers
奄美大島出身。
コメント