🍣

S3にcsvアップロードしたらDynamoDBに書き込むLambda関数(Golang, terraform, serverless)

2022/02/06に公開

仕事でTypeScript, JavaScriptばかり使っていて違う言語を学びたくなってきたので、Golangでも使ってみようと思って作りました。
環境構築はterraformとserverlessを使いました。
とりあえず動かすことを優先したので、バグってたり何かおかしいとこもあるかもです。(一括書き込み25件までとか対応してないです)

作ったもの


s3にcsvファイルをアップロードしたら、

members.csv
1,aaa,m,dev
2,bbb,f,dev
3,ccc,m,dev
4,ddd,f,dev
5,eee,m,dev
6,fff,f,dev

Dynamodbに書き込まれるLambda関数

Github

ここにコードをあげています。
https://github.com/dl10yr/aws-practice/tree/main/lambda-s3-dynamo-go

デプロイ

terraformによるAWSリソース構築

dynamodb, IAM, ssmのリソースを構築します。

cd terraform/envs/dev
terraform init
terraform plan

go ビルド -> lambdaデプロイ

make all
sls deploy

感想

Go

  • TypeScriptやってたのは良かった。JavaScriptの経験だけだときつかった。
  • *, &の使い方難しい。ポインタとかをどう考慮すればよいのかはまだ分からない。
  • vscodeの補完が優秀な気がする
  • 配列とかの扱いもまだよく分からん。

terraform, serverless

  • lambdaのトリガーとなるs3バケットとトリガー設定はterraformではなくserverlessで。
  • lambdaはterraformと相性悪そう。
  • serverless.yamlでterraformディレクトリは入れないように指定しないとサイズやばい

References

Makefileはこちらを参考にさせていただきました。
https://future-architect.github.io/articles/20201022/

Discussion