8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CI/CDAdvent Calendar 2021

Day 8

Github Actions(IAMロール認証)を使ったLambdaへのデプロイ

Last updated at Posted at 2021-11-02

 はじめに

これまでGit ActionsでAWSサービスと連携する場合は、アクセスキーとシークレットキーといったクレデンシャル情報を使っていたが、IAMロール認証で行えるようになったとのこと。

ということで、IAMロール認証を用いたGithub ActionsのLambda関数デプロイの方法をまとめてみた。

IAMロールの作成

  • 最初に認証に必要なIAMロールの作成を行う。
  • 下記のように進めていく。

IAMポリシーの作成

  • IAMポリシーを作成。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "iam:ListRoles",
                "lambda:UpdateFunctionCode",
                "lambda:CreateFunction",
                "lambda:UpdateFunctionConfiguration"
            ],
            "Resource": "*"
        }
    ]
}

プロバイダの作成

  • IDブロバイダを作成。
    • プロバイダのタイプ:OpenID Connect
    • プロバイダURL:token.actions.githubusercontent.com
    • 対象者:sigstore

IAMロールの作成

  • IAMロールを作成。
  • 下記の通りに設定する。
    • 信頼されたエンティティ:ウェブID
    • IDプロバイダ:上記で作成したIDプロバイダを選択
    • Audience:IDプロバイダ作成時の対象者
    • ポリシー:上記で作成したIAMポリシー
  • 作成したIAMロールのARNは、Github Actionsの設定で必要なので控えておく。

Lambda関数の作成

  • あらかじめLambda関数を作成しておく。
    • Github Actionsが実行されたときに、対象のLambda関数がないというエラーになってしまうため。
    • あくまでも初回のデプロイのときの考慮。
  • Lambda関数名は、Github Acionsの設定で必要なので控えておく。

Githubの設定

リポジトリの作成

  • Lambda関数を格納するリポジトリを作成する。

Secretの設定

Github Actionsの設定

ワークフローの作成

  • 対象のリポジトリの「Actions」タブを押すと、下記画像のページが表示されるので「set up a workflow yourself」をクリック。
    image.png
  • 設定ファイルの作成画面が表示されるので、ここに記載していく(内容については次章)

image.png

設定ファイルの作成

  • 上記手順で作成した設定ファイルを下記のように書いていく。
name: deploy to lambda

on:
    push:
        branches:
            - main
    pull_request:

jobs:
   deploy:
        runs-on: ubuntu-latest
        permissions:
            id-token: write
            contents: read
        steps:
            - name: Configure AWS Credentials
              run: |
                export AWS_ROLE_ARN=${{ secrets.AWS_ROLE_ARN }}
                export AWS_WEB_IDENTITY_TOKEN_FILE=/tmp/awscreds
                export AWS_DEFAULT_REGION=ap-northeast-1

                echo AWS_WEB_IDENTITY_TOKEN_FILE=$AWS_WEB_IDENTITY_TOKEN_FILE >> $GITHUB_ENV
                echo AWS_ROLE_ARN=$AWS_ROLE_ARN >> $GITHUB_ENV
                echo AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION >> $GITHUB_ENV

                curl -H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=sigstore" | jq -r '.value' > $AWS_WEB_IDENTITY_TOKEN_FILE
            - uses: actions/checkout@v2
            - uses: actions/setup-python@v2
              with:
                python-version: 3.9
            - run: zip -r package.zip ./*
            - run: pip3 install awscli
            - run: aws lambda update-function-code --function-name {作成したLambda関数名} --zip-file fileb://package.zip --publish

※{作成したLambda関数名}の箇所は{}は除去すること。

実行

  • 実際に実行を行うと、以下のような画面が表示される、無事完了すると、Lambdaに関数がデプロイされる。

image.png

8
4
1

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
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?