michimani.net

CloudFormation で Lambda Function URLs を管理する

2022-04-22

CloudFormation で Lambda の Function URLs が管理できるようになっていたので試してみます。

対応するリソース

Function URLs に対応するリソースは AWS::Lambda::UrlAWS::Lambda::FunctionUrl になるのでは?と勝手に予想していましたが、違いました。

プロパティは下記のとおりです。

!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

まとめ


  1. Lambda 関数に個別の URL を設定できる AWS Lambda Function URLs を試す - michimani.net  ↩︎


comments powered by Disqus