お疲れ様です。agiです。
今回は初めてGitHub Actionsを使ってみました、という内容です!
目的
GitHub Actionsを使って、リポジトリにpushしたら自動でAWS S3やLambdaにデプロイが行われるようにすること。テストコードはchatgptに書いてもらってます。
事前準備
- GitHubのリポジトリを作成(.github/workflows配下にymlファイルを設置、lambda配下にはlambda関数のコード、public配下にはS3のhtmlファイルを設置)
- 適当なLambda関数を作成
- S3バケットを作成し、Webサイトをホスティング設定する
※バケットポリシーと静的ウェブサイトホスティングの設定も忘れずにしておきます。
下記はS3のエンドポイントを開いた時の状況

手順
GitHubとAWSの連携(OIDC使用)
公式ではOIDC(OpenID Connect)を使った連携が推奨されています。
[参考URL]
OIDCとは?
OAuth2.0をベースにした認証プロトコルで、ユーザーの認証情報を安全にやり取りする仕組みです。 GoogleやLINEアカウントを使った他サービスへのログイン(SSO)に利用されています。
AWSのIAMロールに対してGitHubの認証サービスのドメインを指定してIdentity Providerを作成すると、GitHubの認証情報を使ってAWSリソースにアクセスできます。
IAMのIdentity providerを作成
- Provider type:OIDC
- Provider URL:
https://token.actions.githubusercontent.com
- Audience:
sts.amazonaws.com
- GitHub組織:自分のユーザー名
- GitHubリポジトリ、ブランチ:自分が指定したいものを選択(空欄なら全てが対象になります)

IAMロールを作成
- 信頼関係の設定で、上記で作成したOIDCを選択
- S3、Lambdaへのアクセス権限を持つポリシーをアタッチ(一旦フルアクセス)
- 作成後、ARNを控えておく

GitHub Actionsのワークフロー設置
.github/workflows/
配下にYAMLファイルを作成- 以下の内容で作成しました(ChatGPTが生成)
name: Deploy static site & Lambda
on:
push:
branches: [ main ]
permissions:
id-token: write
contents: read
env:
AWS_REGION: ap-northeast-1
BUCKET: <YOUR-S3-BUCKET-NAME>
FUNCTION_NAME: <YOUR-LAMBDA-NAME>
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::<ACCOUNT_ID>:role/<OIDC-ROLE-NAME>
aws-region: ${{ env.AWS_REGION }}
- name: Sync S3
run: |
aws s3 sync ./public s3://$BUCKET --delete
- name: Update Lambda code
run: |
cd lambda
zip -r ../lambda.zip .
aws lambda update-function-code \
--region $AWS_REGION \
--function-name $FUNCTION_NAME \
--zip-file fileb://../lambda.zip
- GitHub Actionsの実行ユーザーはOIDCでIAMロールを引き受けてAWSリソースにアクセス
- S3へのデプロイには
aws s3 sync
を利用 - Lambdaへのデプロイはzipファイルを作成後、
aws lambda update-function-code
で更新
動作確認
- mainブランチの内容を変更してコミット
- pushするとGitHub Actionsが実行され、S3とLambdaにデプロイされるはずですが、、Actionsのタブを開くとworkflowsの実行結果を見ることができます。
- S3バケットにアクセスして
index.html
が表示されることを確認 - Lambda関数もAWSコンソールからコード更新を確認(今回空ファイルになっていたので、lambdaの初期コードが全部空っぽになっていました)
- ということで、無事成功です!
学んだこと
- AWSとGitHub Actionsの連携にはOIDCが安全で便利
- GitHub Actionsのワークフローの書き方
今回初めてGitHubでCI/CDをちょこっと体験しましたが、非常に便利でした。 以前AWSのCodeシリーズで構築した際はIAM周りで非常に苦労しましたが、今回は特に詰まることなくスムーズにできました。 今後はGitHub Actionsを中心に使っていこうと思います!