メモ。
デプロイ
デプロイ自体はlambroll deploy --region us-east-1を実行すればOK。
CloudFrontの更新
Lambda@Edgeでは$LATESTやAliasを使えないので、current Aliasからバージョンを探してCloudFrontを明示的に更新する。
export AWS_REGION=us-east-1 FUNC_NAME=myfunc ARN=$(aws lambda get-function --function-name $FUNC_NAME --query 'Configuration.FunctionArn' --output text) VER=$(aws lambda get-alias --function-name $FUNC_NAME --name current --query 'FunctionVersion' --output text) DIST_ID=xxx aws cloudfront get-distribution-config --id $DIST_ID > config.json ETAG=$(jq -r '.ETag' config.json) sed -E "s/${ARN}:[0-9]+/${ARN}:${VER}/" config.json > full-config.json.new jq .DistributionConfig full-config.json.new > config.json.new aws cloudfront update-distribution --id $DIST_ID --distribution-config file://config.json.new --if-match $ETAG
参考:
TerraformのCloudFrontの定義
Terraformではqualifier = "current"を指定してLambdaを参照する。
data "aws_lambda_function" "myfunc" { function_name = "myfunc" qualifier = "current" region = "us-east-1" } resource "aws_cloudfront_distribution" "mydist" { # ... lambda_function_association { lambda_arn = "${data.aws_lambda_function.myfunc.arn}:${data.aws_lambda_function.myfunc.version}" # ... } # ... }