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?

GitHub Actions x SAMで苦労した部分まとめ

Posted at

概要

  • 基礎を終えて、独自に構築したらめちゃ大変だったのでまとめる。
  • 主に理解が浅いsam側の性であれこれ大変だった認識。

完成したワークフロー定義

まずは、動作する完成版のGitHub Actionsワークフロー定義を見てみる:

name: Deploy-AWS-SAM-Application
on:
  push:
    branches:
      - 'deploy'
env:
  SAM_CLI_TELEMETRY: 0
permissions:
  id-token: write
  contents: read
jobs:
  deploy:
    runs-on: ubuntu-22.04
    permissions:
      id-token: write
      contents: read
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v3
        with:
          python-version: '3.11'
      - uses: aws-actions/setup-sam@v2
        with:
          use-installer: true
      - uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::XXXXXXXXXX:role/XXXXXXXXXXXXXXXXXXXX
          aws-region: ap-northeast-1
          role-session-name: SamDeploy
      - name: Build and Deploy SAM Application
        working-directory: ./sam-deploy
        run: |
            # 最初のビルドとデプロイ
            sam build --template-file template.yaml
            sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
            
            # 2回目のビルド前に既存のファイルをリネーム
            mv samconfig.toml samconfig.toml.bak
            mv template.yaml template.yaml.bak
            mv .aws-sam/build/template.yaml .aws-sam/build/template.yaml.bak
            
            # Edge用のビルドとデプロイ
            sam build --template-file XXXXXXXXXXX.yaml
            sam deploy --stack-name XXXXXXXXXXX --region us-east-1 --capabilities CAPABILITY_IAM --resolve-s3

このワークフローは、deployブランチにプッシュされたときに実行され、SAMアプリケーションを自動的にAWSにデプロイする

苦労ポイント1: 作業ディレクトリの指定

最初の課題は、SAM設定ファイルが特定のサブディレクトリに配置されている場合の作業ディレクトリの指定だった。

問題点

最初は単純にcd ./sam-deployコマンドで移動しようとしたが、うまく機能しなかった。

解決策

GitHub Actionsにはworking-directoryというパラメータがあり、これを使用することで簡単に作業ディレクトリを指定できる:

- name: Build and Deploy SAM Application
  working-directory: ./sam-deploy
  run: |
      # コマンド...

これにより、すべてのコマンドが./sam-deployディレクトリから実行されるようにる。相対パスの基準点はリポジトリのルートからの相対パスとなる。

苦労ポイント2: 複数のSAMテンプレートを連続でビルド・デプロイする

より難しかった課題は、同じジョブ内で複数のSAMテンプレートをビルドしてデプロイする際の問題だった。

問題点

2回目のsam build実行時に、前回のビルド設定やファイルが残ってしまった。特にsamconfig.tomlの設定が引き継がれてしまい、使用していないはずのECRの設定エラーが発生した。

解決策

この問題を解決するために、2回目のビルド前に以前のビルド関連ファイルをリネームする方法を採用した:

# 2回目のビルド前に既存のファイルをリネーム
mv samconfig.toml samconfig.toml.bak
mv template.yaml template.yaml.bak
mv .aws-sam/build/template.yaml .aws-sam/build/template.yaml.bak

これにより、2回目のビルドが1回目のビルド設定の影響を受けることなく、クリーンな状態で実行できるようになった。

特別な要件: リージョンをまたいだデプロイ

この例では、通常のSAMアプリケーションを東京リージョン(ap-northeast-1)にデプロイした後、CloudFront + Lambda@Edge用のリソースをバージニアリージョン(us-east-1)にデプロイしている。

これは、Lambda@EdgeがCloudFrontと連携して動作するため、us-east-1リージョンにデプロイする必要があるため、2回目のデプロイでは、明示的にリージョンと追加のパラメータを指定している:

sam deploy --stack-name XXXXXXXXXXX --region us-east-1 --capabilities CAPABILITY_IAM --resolve-s3

まとめ

AWS SAMアプリケーションをGitHub Actionsで自動デプロイする際には、いくつかの注意点がある:

  1. 作業ディレクトリはworking-directoryパラメータで指定する
  2. 複数のテンプレートをビルド・デプロイする場合は、前回のビルド設定が影響しないように注意する
  3. リージョンをまたいだデプロイが必要な場合は、適切なパラメータを指定する

後はSAMの仕様をきちんと理解することが大事、、

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?