yosemite's blog

About technology, books, diary

AWS SAM を使って ローカルで Lambda 実行環境を作ってみた

Amazon Serverless Application width=300

AWS Serverless Application Model(SAM) とは?

業務で cron のような簡易的なシステムの開発をすることになりました。
その際に、Lambda 関数 を API Gateway をトリガに実行する API を作ったので、備忘録的に書きたいと思います。

この時に利用したのがAWS が提供する SAM というものです。

簡単に特徴をまとめると、以下のようなかんじです。

SAM の環境を構築する

事前準備

事前に以下の2つがインストールされている必要があります。

  • Docker
  • python3, pip

セットアップ

SAM のインストール

まずは、 aws cli, 続いて sam cli をインストールしていきます。 次に、SAM をコマンドラインで扱うことのできるツール をインストールします。

$ pip install awscli

$ pip install aws-sam-cli

次に runtime を指定して Lambda関数の作るプロジェクトを初期化していきます。

$ sam init --runtime go --name <your-project-name>

$ tree
.
├── Makefile
├── README.md
├── hello-world
│   ├── main.go
│   └── main_test.go
└── template.yaml

今回は、Go を指定していますが、他には、 JavaGoPowerShellNode.jsC#PythonRuby が公式でサポートされています。

ちょっと解説

SAM の初期化で上記のようなディレクトリ構成が作られたと思います。
その中身について少しだけ解説します。

まず temlate.yml

...
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: test/
      Handler: test
      Runtime: go1.x
      Tracing: Active
      Events:
        CatchAll:
          Type: Api
          Properties:
            Path: /{proxy+}    <=
            Method: ANY        <=
      Environment:
        Variables:
          PARAM1: VALUE
...

今回は、若干 <= の部分に修正を入れています。
Path の部分は /{proxy+} とすることで、エンドポイントの制限を解放できます。
Method の部分は ANY なので、 GET でも POST でも大丈夫ということでしょうか。

これらの設定はシステムの仕様というか要件に合わせて変えてください。

注目すべきところとしては、 Type の箇所で AW::Serverless::Fuction となっているのが Lambda 関数を表しています。
あとは main.go というファイルが実際に Lambda 関数を実装しているところです(現状だと Hello と出力するだけの簡単な記述のみ)。

ローカルテスト

SAM で実際に Lambda 関数を実行してみましょう。
以下のコマンドで実行可能です。

$ sam local start-api
2019-07-13 23:47:40 Mounting TestFunction at http://127.0.0.1:3000/{proxy+} [GET, DELETE, PUT, POST, HEAD, OPTIONS, PATCH]
2019-07-13 23:47:40 You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template
2019-07-13 23:47:40  * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)

上記のように返ってきたら、起動しています。
実際に、ブラウザで http://127.0.0.1:3000/ を叩くと、 Hello が表示されていれば完了です。

最後に

今回は、AWS SAM を使ってローカルで Lambda 関数を実行するところをやっていきました。

本記事が参考になった、または面白かったという方、ぜひいいねや読者になるをお願いします。

次は、 NoSQL の勉強をして、 DynamoDB とかの投稿ができればとかうっすら考えています。
最後まで見てくださりありがとうございました。

それじゃまた🙋‍♂️