はじめに
この記事はGoでLambda Function URLsをハンズオンしてみる内容となっています。
筆者がLambdaでGoを扱うこと自体が初めてだったため備忘録として簡単に環境構築からデプロイまでの手順も載せています。
環境
MacBook Air M1
ハンズオン
ランタイム Go1.xを選択後、
Lambdaの関数の作成画面で詳細設定を開き “関数URLを有効化”をチェックします。
(認証はパブリックな利用を想定してNONEを設定しました。)
ランタイム設定のハンドラがhello
となっているので適当な名前に変更します。
環境構築
必要なパッケージのインストール
go get github.com/aws/aws-lambda-go
ソースコード
URLがAmazonのURLか判定して真偽値を返すだけのAPIです。
main.go
package main import ( "context" "encoding/json" "fmt" "regexp" "strings" "github.com/aws/aws-lambda-go/lambda" ) type Payload struct { Body string `json:"body"` } type Request struct { URL string `json:"url"` } func HandleRequest(ctx context.Context, payload Payload) (bool, error) { var req Request err := json.NewDecoder(strings.NewReader(payload.Body)).Decode(&req) if err != nil { return false, fmt.Errorf("cannot decode payload: %v: %v", err, payload.Body) } isAmazonURL, err := regexp.MatchString(`^https://(www.)?amazon.(co.)?jp[\w!\?/\+\-_~=;\.,\*&@#\$%\(\)'\[\]]*`, req.URL) if err != nil { return false, fmt.Errorf("cannot decode payload: %v: %v", err, payload.Body) } return isAmazonURL, nil } func main() { lambda.Start(HandleRequest) }
*POSTのパラメータの取得方法がわからずハマりました。
参考: https://zenn.dev/mattn/articles/25aee329a54b38
*URLの正規表現
参考: https://qiita.com/str32/items/a692073af32757618042
デプロイ手順
ソースコードの用意ができたらビルドします。
GOARCH=amd64 GOOS=linux go build main.go
⚠警告
M1 Macを使っている場合、GOARCH=amd64
の指定が必要な点に注意してください。
参考:https://zenn.dev/mogamin/articles/lambda-go-with-apple-silicon
実行ファイルの圧縮をzipに圧縮します。
zip function.zip main.go
AWS Lambdaの画面に戻ってzipファイルのアップロードを行います。
実行
2つのパターンで動作確認
curl -X POST \ -H 'Content-Type: application/json' \ -d '{"url": "https://www.amazon.co.jp"}' \ 'https://{id}.lambda-url.{region}.on.aws'
結果: true
curl -X POST \ -H 'Content-Type: application/json' \ -d '{"url": "https://example.com"}' \ 'https://{id}.lambda-url.{region}.on.aws'
結果: false
最後に
次回はDynamoDBと連携させたい。
元記事はこちら
https://qiita.com/tkhs1121/items/b1e332acdbc50fad8c45
著者:
@tkhs1121
アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。
AWS 運用・保守サービスページ:
https://cloudpack.jp/service/aws/maintenance.html
その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://cloudpack.jp/contact/form/