CloudFormation で Lambda Function URLs を管理する
2022-04-22CloudFormation で Lambda の Function URLs が管理できるようになっていたので試してみます。
対応するリソース
Function URLs に対応するリソースは AWS::Lambda::Url
。 AWS::Lambda::FunctionUrl
になるのでは?と勝手に予想していましたが、違いました。
プロパティは下記のとおりです。
- AuthType:
String
- Cors:
Cors
- AllowCredentials:
Boolean
- AllowHeaders:
List of String
- AllowMethods:
List of String
- AllowOrigins:
List of String
- ExposeHeaders:
List of String
- MaxAge:
Integer
- AllowCredentials:
- Qualifier:
String
- TargetFunctionArn:
String
!Ref
が返す値は、Function URLs の設定対象となる Lambda 関数の ARN です。
!GetAtt
では FunctionArn
および FunctionUrl
を指定できます。
公式ドキュメント
AWS::Lambda::Url - AWS CloudFormation
CFn テンプレート作成
前回1と同様に、 うみほたるの風速・風向を返す Lambda 関数 umiwind
に対して Functions URLs を設定してみます。
AWSTemplateFormatVersion: "2010-09-09"
Description: "Example of Function URL Config"
Resources:
UmiwindURL:
Type: AWS::Lambda::Url
Properties:
TargetFunctionArn: arn:aws:lambda:ap-northeast-1:000000000000:function:umiwind
AuthType: NONE
Cors:
AllowCredentials: false
AllowMethods:
- GET
AllowOrigins:
- "*"
Outputs:
UmiwindPublicURL:
Description: Public endpoint for invoking umiwind
Value: !GetAtt UmiwindURL.FunctionUrl
生成された URL をスタックの出力としてしています。
デプロイと確認
デプロイは使い古された下記のシェルスクリプト (function_url.sh
) を使って実施します。
#!/bin/bash
CHANGESET_OPTION="--no-execute-changeset"
if [ $# = 1 ] && [ $1 = "deploy" ]; then
echo "deploy mode"
CHANGESET_OPTION=""
fi
readonly CFN_TEMPLATE="$(dirname $0)/function_url.yml"
readonly CFN_STACK_NAME=UmiwindURL
echo "CFN_TEMPLATE = ${CFN_TEMPLATE}"
echo "CFN_STACK_NAME = ${CFN_STACK_NAME}"
aws cloudformation deploy \
--stack-name "${CFN_STACK_NAME}" \
--template-file "${CFN_TEMPLATE}" ${CHANGESET_OPTION}
sh ./function_url.sh 'deploy'
生成された URL は下記コマンドで確認します。
aws cloudformation describe-stacks \
--stack-name UmiwindURL \
--query "Stacks[0].Outputs[?contains(to_string(OutputKey),\`UmiwindPublicURL\`)].OutputValue" \
--output text
まとめ
- Lambda の Function URLs が CloudFormation で構築できるようになっていたので試した
- それ以上でもそれ以下でもない
comments powered by Disqus