AWS SAMとは
Github : AWS Serverless Application Model (AWS SAM)
The goal of AWS SAM is to define a standard application model for serverless applications.
This GitHub project is the starting point for AWS SAM, and contains general information, information about the model, and examples of common applications.
日本語訳
AWS SAMの目標は、サーバレスアプリケーション用の標準アプリケーションモデルを定義することです。このGitHubプロジェクトは、AWS SAMの出発点であり、一般的な情報、モデルに関する情報、一般的なアプリケーションの例を含んでいます。
AWS::Serverless 変換
ここを見る限りだと、
AWS SAMはCloudformationの拡張で、最終的にはCloudformationのテンプレートに展開されるイメージ。
やること
基本的には、待望のAWS LambdaのGolang対応!
ここでやったことの、コンソールでの作業をコマンドベースでやろう!ということです。
サンプル
Githubにサンプルがあるので、一番シンプルなhello_world
を参考にしてみる。
テンプレート
1
2
3
4
5
6
7
8
9
10
| AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: lambda go sample application.
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
Handler: main
Runtime: go1.x
CodeUri: "./../../lambda-go-sample/main.zip"
|
package & deploy
Reference : cloudformation package
ここでは、
S3のバケットはAWS CloudformationをAWS CLIから使ってみる
でサンプルで作成済のバケットを使用します。※基本的になんでも良いと思います。
1
2
3
4
5
| $ aws cloudformation package \
--template-file ./lambda-go.yaml \
--s3-bucket techteco.sample.bucket \
--s3-prefix lambda-go-sample \
--output-template-file packaged-template.yaml
|
ここまでで、S3にpackageがアップロードされています。
出力されたpackaged-template.yamlをつかってdeploy
ちなみに、出力内容はこちら
1
2
3
4
5
6
7
8
9
10
| AWSTemplateFormatVersion: '2010-09-09'
Description: lambda go sample application.
Resources:
HelloWorldFunction:
Properties:
CodeUri: s3://techteco.sample.bucket/lambda-go-sample/737fd29b764003ecb0a9c10ee290bfd9
Handler: main
Runtime: go1.x
Type: AWS::Serverless::Function
Transform: AWS::Serverless-2016-10-31
|
Reference : cloudformation deploy
1
2
3
4
| $ aws cloudformation deploy \
--template-file packaged-template.yaml \
--stack-name sampleSamLambdaGo \
--capabilities CAPABILITY_IAM
|
動作確認
まずは、Cloudformationのstackの中身
1
2
3
| $ aws cloudformation describe-stack-resources \
--stack-name sampleSamLambdaGo \
| jq .
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| {
"StackResources": [
{
"StackName": "sampleSamLambdaGo",
"StackId": "arn:aws:cloudformation:ap-northeast-1:123456789012:stack/sampleSamLambdaGo/28efadc0-088c-11e8-b769-50a68a175a82",
"LogicalResourceId": "HelloWorldFunction",
"PhysicalResourceId": "sampleSamLambdaGo-HelloWorldFunction-YAWCC305TVCA",
"ResourceType": "AWS::Lambda::Function",
"Timestamp": "2018-02-03T02:46:15.113Z",
"ResourceStatus": "CREATE_COMPLETE"
},
{
"StackName": "sampleSamLambdaGo",
"StackId": "arn:aws:cloudformation:ap-northeast-1:123456789012:stack/sampleSamLambdaGo/28efadc0-088c-11e8-b769-50a68a175a82",
"LogicalResourceId": "HelloWorldFunctionRole",
"PhysicalResourceId": "sampleSamLambdaGo-HelloWorldFunctionRole-1HGTSQ58UEK91",
"ResourceType": "AWS::IAM::Role",
"Timestamp": "2018-02-03T02:46:09.876Z",
"ResourceStatus": "CREATE_COMPLETE"
}
]
}
|
正しく実行されればOK!
1
2
3
4
5
| $ aws lambda invoke \
--invocation-type Event \
--function-name sampleSamLambdaGo-HelloWorldFunction-YAWCC305TVCA \
--payload '{"name": "テスト太郎"}' \
outputfile.txt
|