メモです。
メモなので、ほぼ字です。
事前準備
- 先にGo1.xのランタイムのLambdaを作っておく
- CLIでもManagement Consoleでもどちらでも可
- AWS Cloud9の「Create serverless application」では、Go言語のランタイムは選択不可なので
- ソースは[File]->[New From Template]->[Go File]で雛形を作成可能
- 2018/08/14(JST)現在のCloud9上のGoのバージョンは以下
$ go version
go version go1.9.1 linux/amd64
Lambda向け実装
こちらは、AWS Lambda で Go が使えるようになったので試してみたを参考している
- 以下ターミナル上で、コマンドでパッケージをインストール
- ターミナルは[Window]->[New Terminal]で開く
go get -u github.com/aws/aws-lambda-go/lambda
- パッケージをインポート
import "github.com/aws/aws-lambda-go/lambda"
- main()内で処理を行う関数ハンドラを呼び出す
lambda.Start(helloLambda)
ビルド&アップロード
- LambdaのコンテナはLinux(AmazonLinux?)と思われるので、Linux向けにビルド
- 以下全てターミナル上での作業
GOOS=linux GOARCH=amd64 go build -o Lambdaのハンドラ名
- Zip圧縮
zip zipファイル名 ビルド済み実行ファイル(Lambdaのハンドラ名)
- アップロード
aws lambda update-function-code --function-name [Lambda関数名] --zip-file fileb://[作ったファイル名] [--region ap-northeast-1]
--region オプションは東京リージョンなど、AWS Cloud9が展開されていないリージョンのLambdaにアップロードする場合は必須
- 以下のようなレスポンスが返ってくればOK
{
"TracingConfig": {
"Mode": "PassThrough"
},
"CodeSha256": xxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
"FunctionName": [Lambda関数名],
"VpcConfig": {
"SubnetIds": [],
"VpcId": "",
"SecurityGroupIds": []
},
"MemorySize": 128,
"FunctionArn": [Lambda関数のロール],
"Version": "$LATEST",
"Role": [Lambda関数のロール],
"Timeout": 4,
"LastModified": "2018-08-13T11:05:43.413+0000",
"Handler": [ハンドラ名],
"Runtime": "go1.x",
"CodeSize": xxxxxxx,
"Description": ""
}
あとは、テスト実行するなり、API越しに叩くなり。。。