こちらのつづき
GitHub Actions から AWS lambda を実行するまでの流れ
- lambdaを作成
- lambdaの実行権限を持つIAMユーザを作成
- AWS認証の action
aws-actions/configure-aws-credentials
を GitHub Actions に組み込む - 認証に使用する、lambdaの実行権限を持つIAMユーザの各キーを secrets に設定
- 実行
lambdaを作成
"hello"
を puts するだけのシンプルな lambda hello
を us-east-1
に作成
require 'json' def lambda_handler(event:, context:) # TODO implement puts 'hello' { statusCode: 200, body: JSON.generate('Hello from Lambda!') } end
lambdaの実行権限を持つIAMユーザを作成
IAMユーザ github-actions
を作成
$ aws iam create-user --user-name github-actions
{ "User": { "Path": "/", "UserName": "github-actions", "UserId": "********", "Arn": "arn:aws:iam::********:user/github-actions", "CreateDate": "2020-03-03T05:02:59Z" } }
github-actions
に lambda実行権限持つロールを付与
$ aws iam attach-user-policy \ --user-name github-actions \ --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaRole
ローカルで動作確認
$ aws lambda invoke --function-name hello --region us-east-1 response.json
{ "StatusCode": 200, "ExecutedVersion": "$LATEST" }
AWS認証の action aws-actions/configure-aws-credentials
を GitHub Actions に組み込む
aws-actions/configure-aws-credentials
は AWS 公式の github action
Configure AWS credential and region environment variables for use in other GitHub Actions.
こんなふうに、アクセスキーとシークレットキーとリージョンを設定してやれば、ユーザの権限に応じた、AWS CLI が使えるようになる
name: CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Run a one-line script run: echo Hello, world! - name: Run a multi-line script run: | echo Add other actions to build, echo test, and deploy your project.
認証に使用する、各キーを secrets に設定
GitHub Actionsで使用したい秘匿情報は、secrets に設定して、そこから取得する
アクセスキーを取得
$aws iam create-access-key --user-name github-actions { "AccessKey": { "UserName": "github-actions", "AccessKeyId": "********", "Status": "Active", "SecretAccessKey": "********", "CreateDate": "2020-03-03T05:03:23Z" } }
アクセスキーを github の secrets に設定
secrets に設定することで、GitHub Actions にて ${{ secrets.key_name }}
で参照できるようになる
settings -> secrets で設定可能
ここに、AWS_ACCESS_KEY_ID
と AWS_SECRET_ACCESS_KEY
を設定する
実行
lambdaを実行する処理をstepに追加する
name: CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Run a hello lambda run: aws lambda invoke --function-name hello response.json
動作確認
コードをPUSHして、GitHub Actions から lambda が実行されて、正常終了の結果が返ってきたことを確認 👏