【Golang】AWS が提供しているサンプルコードでSQSに触れてみる
どもども!最近少しずつ暖かくなってきてテンション上がり気味の僕です。ずっとこの気温でええんやで…
さて、本日はAWSが提供してくれているサンプルコードを利用してAmazon SQS に触ってみようの記事です。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-sqs-create-package.html#:~:text=%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82-,Go,-Amazon%20SQS%20%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88
使用言語はGoでAWS LambdaからSQSにキューイングされているメッセージを取得してみたいと思います。
それでは参りましょう。
Lambda作成
まずはメッセージを取得するLambdaを作成、デプロイしていきましょう。
Lambdaに紐づけるIAM Roleを事前に準備しておいてください。下記のポリシーがあれば問題ないでしょう。
・AmazonSQSFullAccess
・AWSLambdaBasicExecutionRole
コードはサンプルのものをそのまま使用します。
package main
import (
"context"
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func handler(ctx context.Context, sqsEvent events.SQSEvent) error {
for _, message := range sqsEvent.Records {
fmt.Printf("The message %s for event source %s = %s \n", message.MessageId, message.EventSource, message.Body)
}
return nil
}
func main() {
lambda.Start(handler)
}
非常にシンプルでSQSとっかかりには非常に便利かと思います。
それではLambrollでデプロイしましょう。最近デプロイでこのツールを使用する頻度が増えたのでinit周りをスクリプト化してみました。一応こちらも載せておきます。
#!/bin/sh -ex
functionname="Lambda関数名"
profile="使用するAWSプロファイル"
handler="main"
role="Lambdaに紐づけるIAM Role名"
runtime="go1.x"
lambroll init --function-name=${functionname} --profile=${profile}
cp function.json function.json.bk
sed -i -e "s/index.handler/${handler}/g" function.json
sed -i -e "s/YOUR_LAMBDA_ROLE_NAME/${role}/g" function.json
sed -i -e "s/nodejs10.x/${runtime}/g" function.json
cat <<EOL >> deploy.txt
コンパイル
GOARCH=amd64 GOOS=linux go build ${handler}.go
デプロイ
lambroll deploy --region "ap-northeast-1" --profile="${profile}"
削除
lambroll delete
EOL
他のRuntimeを使用する場合でも、少し改良すればこちらのスクリプトで対応できると思います!
それでは、上記スクリプトをmain.goと同じディレクトリに作成し、実行しましょう。
$ chmod 700 lambroll.sh
$ ./lambroll.sh
これでinitが完了したのでデプロイしていきましょう。今回はGolangですがコンパイルとデプロイ手順が記載されたdeploy.txtも作成されているはずです!(スクリプトにしてもいいかも)
手順通り上から順に実行すればLambda関数がデプロイされるはずです!
SQSキューを作成
次にSQSキューを作成しましょう。
と言ってもやることは単純で、AWS コンソール画面からSQSのページに移動し、"キューを作成"をクリック、今回はキューの名前のみ入力して作成でOKです!
これでリソースは揃いましたね!
Lambdaからメッセージを取得する
それではSQSにメッセージを送信し、Lambdaから受信してみましょう。
まずはAWSコンソール画面のLambdaのページに移動し、 “+ トリガーを追加"からトリガーを追加します。サービスはSQSを選択し、先ほどのキューを選択しましょう。
続いてSQSのページに戻り、先ほど作成したキューを選択、"メッセージを送受信"をクリックし何か適当なメッセージを送信してください!
次にLambdaのページに戻りテスト実行してみます。下記のようにSQSの情報とメッセージが取得できていれば成功です!(テスト実行結果、CloudWatch logsから確認できます!)
The message メッセージID for event source aws:sqs = メッセージ内容
お疲れ様でした!
まとめ
本日はAWSが提供しているサンプルコードでLambdaに触れてみました。
今回の作業内容ではイマイチユースケースがわかりにくいかもしれません。実際には様々な場面で使用されますが、例えば一度に大量の処理要求がくる場合などに、要求を一旦キューイングしておき、順次メッセージを受信して処理していくことでコンピューティングリソースの負荷を抑えると言った方法でよく使用されます。
他にも非同期的に処理を行いたい場合など様々なユースケースが考えれれる非常に便利なサービスですので、一度触ってみることをお勧めします!
以上、最後まで読んでいただきありがとうございました!
お勧め教材