AWSのLambda使ってますか? 便利ですよね。
ちょっとした機能をサーバーレスで実装できるLambdaですが、AWSの外部からWebhook的に関数をコールしようとすると、従来はAPI Gatewayを用意してあげる必要がありました。ところが最近では、Lambdaに関数URLという機能が実装され、Lambda単体でHTTPSのエンドポイントを生やすことができます。
とはいえ、関数を第三者に対し、無制限に公開するのも嫌ですよね。API GatewayはAPIキーによるアクセス制限をかけることができたのですが、Lambdaの関数URLは、パブリック公開 or IAM認証となっています。そしてIAMでアクセスを制御する場合、HTTPリクエストに対してSigV4で署名する必要があります。
サンプルを見るとわかるのですが、手動で署名するのは結構面倒ですよね。さてどうしたものかな……と思ったら、なんとcurlコマンドには--aws-sigv4オプションが存在した……という話です。どうやらcurlのバージョン7.75.0リリースに含まれていたみたいですね。Oh……2021年からあったのか。
というわけで、シェルスクリプトからLambdaをコールする場合は、↓のような感じでできそうですね。
curl "関数URL" \ --aws-sigv4 "aws:amz:ap-northeast-1:lambda" \ --user "$(aws configure get aws_access_key_id):$(aws configure get aws_secret_access_key)"