🐟
Github actionsにIAMユーザーを認証させて、serverless frameworkをデプロイする
仕事で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 serverless
やbrew 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-id
と aws-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.yml
で org
を指定していると、そちらの認証情報でデプロイしようとするので、github actionsからデプロイするには削除が必要です。
Discussion