GitHub Actions から AWS lambda を実行してみる

こちらのつづき

blog.kasei-san.com

GitHub Actions から AWS lambda を実行するまでの流れ

  • lambdaを作成
  • lambdaの実行権限を持つIAMユーザを作成
  • AWS認証の action aws-actions/configure-aws-credentials を GitHub Actions に組み込む
  • 認証に使用する、lambdaの実行権限を持つIAMユーザの各キーを secrets に設定
  • 実行

lambdaを作成

"hello" を puts するだけのシンプルな lambda hellous-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.

github.com

こんなふうに、アクセスキーとシークレットキーとリージョンを設定してやれば、ユーザの権限に応じた、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 で設定可能

f:id:kasei_san:20200304175044p:plain

ここに、AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY を設定する

f:id:kasei_san:20200304175206p:plain

実行

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 が実行されて、正常終了の結果が返ってきたことを確認 👏

f:id:kasei_san:20200304175342p:plain