AWS SAM で HelloWorld
タイトルの通り。
2020/07/21 に AWS SAM CLI がGAされたようで、前から気になってたし少し触ってみようかなと思った次第です。
AWS サーバーレスアプリケーションモデル (SAM) CLI が一般提供を開始し、本番環境で利用可能に
調べてみると、v1.0.0より前はビルドに至るまでにコマンドがいくつかあったりして、今回触ったv1.0.0と少々様子が異なるようですね。。
ネットで拾った情報もv0.X.Xのものが多かったので、ここはやはり公式ドキュメントを見つつ進める方がよいでしょう。
AWS SAM ?
公式には、
AWS サーバーレスアプリケーションモデル (AWS SAM) は、AWS でサーバーレスアプリケーションを構築するために使用することができるオープンソースフレームワークです。
サーバーレスアプリケーションは、Lambda 関数、イベントソース、およびその他のリソースを組み合わせたもので、協調して動作することによってタスクを実行します。サーバーレスアプリケーションは単なる Lambda 関数ではないことに注意してください。API、データベース、イベントソースマッピングなどの追加リソースを含めることができます。
とはAWS Serverless Application Model(AWS SAM)? - AWS Serverless Application Model より引用
とあります。
Lambda や API Gataway、DynamoDB の管理を簡単にできるフレームワークという感じかな。
AWS SAM のテンプレートを使用して、CloudFormation でデプロイするという流れになるので、サーバーレスに特化した CloudFormation というところでしょうか。
Hello World までの道のり
チュートリアルに HelloWorld があるので、それを試してみます。
まずは AWS SAM CLI のインストール。
(ちょっと時間かかります)
$ brew tap aws/tap $ brew install aws-sam-cli
こちらにも書いてありますが、事前に Docker のインストール及びプロジェクトフォルダの共有を行っておく方がよいです。
※ローカルでエミュレーションする場合に必要になります。
蛇足ですが、AWS SAM CLI をインストールしたところ、僕のローカルの Python のバージョンが 3.7 から 3.8 に上がってました。
インストールが終わったらまずはバージョン確認
$ sam --version SAM CLI, version 1.0.0
作業フォルダに移動してテンプレートを作成
$ mkdir samtest $ cd samtest $ sam init
今回は node.js で HelloWorld してみます。
sam init
コマンドにより、 samtest
ディレクトリにいくつかファイルが作られました。
hello-world/app.js
がラムダハンドラのロジックの実態のようです。
また、リソースの定義などは template.yaml
に記載されています。
この sam init
で 生成されたファイルは、こちらのリポジトリから取得してきたようです。
HelloWorld 以外にも、選択肢にあったテンプレートを確認することができます。
次に、これらをビルドします。
$ sam build
これでビルドが完了して、 .aws-sam/build
にファイルが生成されました。
あとはヒントが出ているように、ローカルで実行する場合は sam local invoke
を、AWSにデプロイする場合は sam deploy --guided
を実行します。
※ローカルで実行する(エミュレートする)場合は、先述の Docker の準備が必要になります。
今回はこのままAWSにデプロイしてみます。
初回のデプロイになるので、 --guided
オプションを追加します。これにより、対話的に構成を設定することができ、設定された構成を samconfig.toml
に保存することができます。
最終的に CloudFormation のスタックが終了し、以下のような出力がされればデプロイ成功です。
あとは、作成したAPIにアクセスしてみます。
先ほど出力された HelloWorldApi の Value にある URL を叩いて結果を確認します。
$ curl https://XXXXXXX.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/ {"message":"hello world"}%
とりあえず今日はここまで。