前回の記事の続きから行う。
今回の目標
3️⃣ GitHub ActionsでCI/CD自動デプロイ
この工程の目的
Step A: SAMを使って手動でサーバーレス環境を構築。
→ここまで行った。
Step B: GitHub Actionsを導入し、手動作業(ミスが起きやすい部分)を自動化する。
→今回はここ
Step C: より汎用的なIaCツールであるTerraformへ移行し、インフラ管理を強化した。 このように「なぜそのツールを入れたのか」という理由が明確になる。
今後のステップ
①lambda-apiリポジトリに、template.yamlとsamconfig.tomlをプッシュする。
②AWS OIDCの設定を行う(GitHub ActionsにAWSのアクセスキーを直接書かずに、安全に接続するための最新の推奨設定です)。
③.github/workflows/deploy.yml を作成し、sam build と sam deploy を記述する
①lambda-apiリポジトリに、template.yamlとsamconfig.tomlをプッシュする。
Gitの準備
VS Codeのターミナルで、SAMプロジェクトのフォルダにいることを確認する。
※SAMプロジェクトのフォルダとは、前回ローカルに作成したlambda-api フォルダの
PS C:\Users\XXXX\Projects\lambda-api> pwd
Path
----
PS C:\Users\XXXX\Projects\lambda-api
PS PS C:\Users\XXXX\Projects\lambda-api> ls
ディレクトリ:PS C:\Users\XXXX\Projects\lambda-api
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2025/11/28 22:21 .aws-sam
d----- 2025/11/01 18:14 node_modules
-a---- 2025/11/01 18:03 60 .prettierrc
-a---- 2025/11/01 23:29 398 eslint.config.mjs
-a---- 2025/11/28 22:20 1259 index.js
-a---- 2025/11/01 18:18 42421 package-lock.json
-a---- 2025/11/01 18:14 460 package.json
-a---- 2025/11/21 1:11 295 samconfig.toml
-a---- 2025/11/28 22:20 923 template.yaml
ファイルを追加して送信する
△注意△
pushする前に
samconfig.toml内の下記1文を消去してください
profile = "sam-deploy"
その後ローカルからGitHubへ反映
PowerShell
# 1. 現在の変更をすべてステージング
git add .
# 2. メッセージを付けて保存
git commit -m "feat: add SAM templates and config"
# 3. GitHubへ送信
git push origin main
GitHub上のlambda-apiリポジトリに、template.yamlとsamconfig.tomlが追加されているはず
②AWS OIDC(OpenID Connect)の設定を行う
(GitHub ActionsにAWSのアクセスキーを直接書かずに、安全に接続するための最新の推奨設定です)。
これまでは「アクセスキー」という「期限のない合鍵」をGitHubに預けていましたが、
OIDCは「GitHubが『私は本人です』という証明書(トークン)を提示し、AWSがその場限りの『一時的な鍵』を貸し出す」**という、より安全でな方式です。
設定は「AWS側」と「GitHub側」の2ステップです。
ステップ 1:AWS側で「GitHub専用の窓口」を作る
まず、AWSに「GitHubからのログインを許可するよ」という設定(IDプロバイダー)を追加します。
-
IAMを開き、左メニューの [ID プロバイダー] → [プロバイダーを追加] をクリック。
-
プロバイダーのタイプ: OpenID Connect を選択。
-
プロバイダーのURL: https://token.actions.githubusercontent.com を入力。
-
対象者: sts.amazonaws.com を入力。
-
[プロバイダーを追加] をクリック。
ステップ 2:GitHub Actions用の「IAMロール」を作る
次に、GitHubが実際に「変身」するためのIAMロールを作成します。
-
IAMコンソールの左メニュー: [ロール] → [ロールを作成] をクリック。
-
信頼されたエンティティタイプ: ウェブアイデンティティ を選択。
-
アイデンティティプロバイダー: 先ほど作った token.actions.githubusercontent.com を選択。
-
Audience: sts.amazonaws.com を選択。
-
GitHub organization: あなたのGitHun上のユーザー名を入力。
-
GitHub repository: lambda-api を入力。
※これにより、「あなたの特定のリポジトリ」以外からのアクセスを拒否できます!

- 許可ポリシー: 今回はSAMデプロイをするので、ひとまず AdministratorAccess を選択。
(※本来は権限を絞るべきですが、初学者のうちはデプロイ失敗を防ぐためにこれでOKです)
- ロール名: github-actions-sam-deploy-role など分かりやすい名前を付けて作成。
作成後、表示される 「ロール ARN」(例: arn:aws:iam::123456789012:role/...)をコピーしておいてください。
③.github/workflows/deploy.yml を作成し、sam build と sam deploy を記述する
GitHub Actions の設定ファイルを作る
いよいよVS Codeに戻り、デプロイの手順書(Workflow)を作成します。
リポジトリの直下に .github/workflows/deploy.yml というファイルを作成し、以下を貼り付けてください。
name: SAM Deploy
on:
push:
branches: [ main ] # mainブランチにpushされたら起動
permissions:
id-token: write # OIDCを使うために必須
contents: read # ソースコードを読み取るために必須
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: ${{ secrets.AWS_ROLE_ARN }} # ここでロールARNを使う
aws-region: ap-northeast-1
- name: Setup SAM CLI
uses: aws-actions/setup-sam@v2
- name: Build and Deploy
run: |
sam build
sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
ステップ 4:GitHub に「ロール ARN」を教える
GitHubの自分のリポジトリ(lambda-api)のページを開き、
[Settings] → [Secrets and variables] → [Actions] → [New repository secret] をクリック。

Name: AWS_ROLE_ARN
Secret: ステップ2でコピーした ロール ARN を貼り付け。
GitHubからの自動デプロイの設定完了
PowerShell
git add .
git commit -m "ci: add GitHub Actions workflow with OIDC"
git push origin main
GitHubの [Actions] タブを開いてみてください。黄色いマークがクルクル回って、最後に緑色のチェックマーク ✅ が付けば、「GitHubからの自動デプロイ」が成功した瞬間です!
Congratilation!
デプロイ後のリソース削除方法
① AWS上のリソースを完全に削除する
SAMでデプロイしたものは、CloudFormationの「スタック」を削除することで、関連するLambda、API Gateway、DynamoDBをまとめて消去できます。
- 方法A:自分のPCのターミナルから削除(推奨)
VS Codeのターミナルで以下のコマンドを打つ。
sam delete --stack-name lambda-memo-api
※スタック名は、samconfig.toml に記載した名前です。 ※「Are you sure you want to delete...」と聞かれるので y を入力します。
- 方法B:AWSコンソールから削除
- AWSにログインし、CloudFormation の画面を開きます。
リストから lambda-memo-api を選択します。
右上の [削除] ボタンを押します。
② GitHub Actions を「一時的に停止」する
今のままだと、コードを修正して push するたびに、再びAWS上にリソースが作成されてしまいます。しばらく開発を休む場合は、自動デプロイを止めておきましょう。
方法: GitHubのリポジトリページ> [Actions] タブ > 左側の [SAM Deploy](ワークフロー名)を選択 > 右側の [...] > [Disable workflow] をクリック。
これで、push しても自動デプロイが走らなくなります。再開したい時は [Enable workflow] を押す。

今回作成した IAMロール や IDプロバイダー は、置いておいても料金はかかりません。
構築失敗メモ
<事象>
GitHubで自動デプロイが行われた際、プロファイルが見つからないエラー(Error: The config profile (sam-deploy) could not be found)が発生した。
<原因>
ローカルPCで作成された samconfig.toml 内に、ローカル専用の設定(profile = "sam-deploy")が残っていた。GitHub Actions(仮想サーバー)上にはそのプロファイルが存在しないためエラーとなった。
<解決策>
samconfig.toml から profile の文を削除。
学び: 「ローカル環境とCI/CD環境の差異」を意識することの重要性。自動化ファイルには、環境に依存する固有情報を持ち込まず、汎用的な設定に保つ必要がある。



