😽

aws sam で lambda をローカルで実行 メモ

2022/08/29に公開

はじめに

aws sam で lambda をローカルで実行するメモ

前提

・vscodeインストール済み
・Dockerインストール済み

aws sam cliのセットアップ

Visual Studio Codeの拡張機能で、AWS上でのアプリケーションの作成、デバッグ、デプロイを支援してくれるAWS Toolkit for Visual Studio Codeがあります。

aws cliのインストール

こちらに記載されているコマンドでインストール
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

$ aws --version
aws-cli/2.4.20 Python/3.8.8 Darwin/20.2.0 exe/x86_64 prompt/off

aws sam cliのインストール

こちらに記載されているコマンドでインストール
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html

$ sam --version
SAM CLI, version 1.53.0

雛形作製

下記で雛形が作製される

$ sam init --runtime go1.x --name aws-golang 

ビルドを試してみる

$ sam build

Build Succeeded

Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml

Commands you can use next
=========================
[*] Validate SAM template: sam validate
[*] Invoke Function: sam local invoke
[*] Test Function in the Cloud: sam sync --stack-name {stack-name} --watch
[*] Deploy: sam deploy --guided

ローカルでlambda関数を呼び出す

$ sam local invoke

Error: Running AWS SAM projects locally requires Docker. Have you got it installed and running?

実行にはdockerを起動する必要があるようです。
dockerを起動後再度実行すると

Mounting /Users/VAIO/Desktop/aws-golang/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container
START RequestId: 001f6820-61d6-4ce7-b796-85b76bba1b6d Version: $LATEST
END RequestId: 001f6820-61d6-4ce7-b796-85b76bba1b6d
REPORT RequestId: 001f6820-61d6-4ce7-b796-85b76bba1b6d  Init Duration: 0.55 ms  Duration: 1060.60 ms    Billed Duration: 1061 ms     Memory Size: 128 MB     Max Memory Used: 128 MB
{"statusCode":200,"headers":null,"multiValueHeaders":null,"body":"Hello, 14.10.129.128\n"}%   

レスポンスが返るようになりました。

ローカル起動時に環境変数を読み込むには

env.jsonを作製

{
    "Parameters": {
      "DB_USERNAME": "ユーザー名",
      "DB_PASSWORD": "パスワード",
    }
}

template.yamlを編集

Globals:
  Function:
    Timeout: 5
    Environment:
      Variables:
        DB_USERNAME:
        DB_PASSWORD:
        HOSTNAME:
        PORT:
        DB_NAME:

ローカルapi起動時に optionを指定

> sam local start-api --env-vars env.json

ローカルでapiサーバーを立てる

sam local start-api

直接ローカルのlambdaを実行する

sam local invoke "関数名" -e event/event.json

デプロイ

$ sam deploy --guided

Discussion