GitHub Actionsを使ってNodeJSのaws-lambdaをデプロイする

前回の内容
こちらで作ったコードを少し参考にする。
ちなみに、バージニア北部で作っちゃったので、東京で作り直してます。
これがデプロイの設定の時に関係するので、ap-northeast-1で作るようにします。

デプロイする内容を作成

Lambdaにデプロイする内容を作っていきます。

以下ディレクトリでやります。

/mnt/c/root/work/learn/AWS/lambda/github-actions-aws-lambda-sample#

前回作成したlambdaの内容を生かすというか、どうレスポンスを返すかというのを確認します。

っでめちゃくちゃシンプルにhello worldだけ返すようにします。

const responseBody = "hello world"
/**
 * Returns an HTML page containing an interactive Web-based
 * tutorial. Visit the function URL to see it and learn how
 * to build with lambda.
 */
exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        headers: {
            'Content-Type': 'text/html',
        },
        body: responseBody,
    };
    return response;
};

workflowsを作成

# ディレクトリ作成
mkdir -p .github/workflows

# ファイル作成
deploy.yml

GitHub Actionsについてのお作法とかについては後日ということで、とりあえず以下内容をdeploy.ymlに書けばOKです。

バージニアから東京で作り直したのは、
aws-region: ap-northeast-1
の部分が関係するからでした。これのせいで少しはまった。

name: lambda-deployment-with-github-action

on:
  push:
    branches:
    - main   

jobs:
  deploy_lambda:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:  
          node-version: '14'
      - 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: ap-northeast-1
   # 今回はnpm使わないのでとりあえずここの部分はなしで。
      #- name: npm install
      #  env:
      #    CI: true
      #  run: |
      #    npm ci 
      - name: deploy
        run: |
          zip -j deploy.zip ./*
          aws lambda update-function-code --function-name=myFirstLambda --zip-file=fileb://deploy.zip 

aws lambda update-function-codeでzip化したソースを渡しています。
npm使って依存関係解消するような時は、/distを圧縮してアップする感じでしょう。

Secretsを登録する

aws lambda update-function-codeするために、aws側のアクセスキーとかを登録する必要があります。githubの設定からやっていきます。

以下の内容で追加
デプロイ用で新規IAMを作るのがお勧めです。

AWS

Posted by takumioda