0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

3.AWS環境をGitHub ActionsでCI/CD自動デプロイに挑戦

Last updated at Posted at 2026-01-31

前回の記事の続きから行う。
今回の目標
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 を入力。

  • [プロバイダーを追加] をクリック。

image.png


ステップ 2:GitHub Actions用の「IAMロール」を作る

次に、GitHubが実際に「変身」するためのIAMロールを作成します。

  • IAMコンソールの左メニュー: [ロール] → [ロールを作成] をクリック。

  • 信頼されたエンティティタイプ: ウェブアイデンティティ を選択。

  • アイデンティティプロバイダー: 先ほど作った token.actions.githubusercontent.com を選択。

  • Audience: sts.amazonaws.com を選択。

  • GitHub organization: あなたのGitHun上のユーザー名を入力。

  • GitHub repository: lambda-api を入力。

※これにより、「あなたの特定のリポジトリ」以外からのアクセスを拒否できます!
image.png

  • 許可ポリシー: 今回はSAMデプロイをするので、ひとまず AdministratorAccess を選択。

(※本来は権限を絞るべきですが、初学者のうちはデプロイ失敗を防ぐためにこれでOKです)

image.png

  • ロール名: 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] をクリック。
image.png

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からの自動デプロイ」が成功した瞬間です!

  • チェックマークがついていれば成功している。
    image.png
  • AWS上でもデプロイされている。
    image.png

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] を押す。
image.png


今回作成した 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環境の差異」を意識することの重要性。自動化ファイルには、環境に依存する固有情報を持ち込まず、汎用的な設定に保つ必要がある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?