🐟

Github actionsにIAMユーザーを認証させて、serverless frameworkをデプロイする

2022/12/25に公開

仕事でserverlessを触る機会があり、ちょっと詰まったり、Web上にノウハウが見当たらなかったので、記事にしますmm
同じような方の参考になれれば幸いです🙇

環境

  • node : v16.13.2
  • serverless
    • Framework Core: 3.25.1
    • Plugin: 6.2.2
    • SDK: 4.3.2

前提条件

  • serverless frameworkのcliが使える
    • 入れていない方はnpm install -g serverlessbrew install serverless などでインストールしてください
    • 公式ドキュメントはこちら
  • serverless frameworkがセットアップせれていること
  • github actionsの環境変数を設定していること
    • やり方がわからない方はこちらの記事からどうぞ。(画像付きでわかりやすかったです。)

github actinos関連のファイルを作成

|
|- .github
|   |
|   |- workflows
|       |
|       |- deploy.yml (名前は何でも🙆)

CI/CDの内容を記載

以下で それぞれのポイントに絞って解説します。

deploy.yml
name: Deploy master branch

on:
  push:
    branches:
      - master

jobs:
  deploy:
    name: deploy
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    strategy:
      matrix:
        node-version: [16.x]
    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-region: ap-northeast-1
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      - name: serverless config
        run: npx serverless config credentials --provider aws --key ${{ secrets.AWS_ACCESS_KEY_ID }} --secret ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      - name: serverless deploy
        uses: serverless/github-action@v3.1
        with:
          args: deploy

IAMユーザーの認証

こちらでは、aws-actions/configure-aws-credentials@v1を利用して、AWSの認証情報を取得しています。
公式のUsageには、roleで書かれた例が載っていますが、aws-access-key-idaws-secret-access-key を指定すれば、IAMユーザーごと認証されます。

deploy.yml
- name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-region: ap-northeast-1
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

serverless にデプロイするIAMユーザーの情報を設定

こちらの処理で、serverless側にも、上で認証したユーザーでデプロイの操作を行うねと伝える

deploy.yml
- name: serverless config
        run: npx serverless config credentials --provider aws --key ${{ secrets.AWS_ACCESS_KEY_ID }} --secret ${{ secrets.AWS_SECRET_ACCESS_KEY }}

実際にデプロイ

こちらでは、serverless/github-action@v3.1を利用して、serverless frameworkをデプロイしています。

deploy.yml
 - name: serverless deploy
        uses: serverless/github-action@v3.1
        with:
          args: deploy

ハマった箇所

serverless.ymlにorgがあるとデプロイ失敗するよ

以下のように、 serverless.ymlorg を指定していると、そちらの認証情報でデプロイしようとするので、github actionsからデプロイするには削除が必要です。

Discussion