如何使用 CLI 更新 cloudfront 分发中的 lambda@edge ARN

son*_*rma 4 amazon-web-services amazon-cloudfront aws-lambda-edge

我想使用 CLI 使用最新的 lambda@edge 函数更新 cloudfront 发行版。

我看到了此文档,但无法弄清楚如何仅更新 lambda ARN。

有人可以帮忙吗?

Rax*_*Rax 10

这是脚本,正是这样做的。它是基于@cloudbud答案实现的。没有参数检查。它将像这样执行:./script QF234ASD342FG my-lambda-at-edge-function us-east-1。就我而言,执行时间不到 10 秒。有关详细信息,请参阅更新分发。

#!/bin/bash

set -xeuo pipefail
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin

distribution_id="$1"
function_name="$2"
region="$3"

readonly lambda_arn=$(
  aws lambda list-versions-by-function \
    --function-name "$function_name" \
    --region "$region" \
    --query "max_by(Versions, &to_number(to_number(Version) || '0'))" \
  | jq -r '.FunctionArn'
)

readonly tmp1=$(mktemp)
readonly tmp2=$(mktemp)

aws cloudfront get-distribution-config \
  --id "$distribution_id" \
> "$tmp1"

readonly etag=$(jq -r '.ETag' < "$tmp1")

cat "$tmp1" \
| jq '(.DistributionConfig.CacheBehaviors.Items[] | select(.PathPattern=="dist/sxf/*") | .LambdaFunctionAssociations.Items[] | select(.EventType=="origin-request") | .LambdaFunctionARN ) |= "'"$lambda_arn"'"' \
| jq '.DistributionConfig' \
> "$tmp2"

# the dist config has to be in the file
# and be referred in specific way.
aws cloudfront update-distribution \
  --id "$distribution_id" \
  --distribution-config "file://$tmp2" \
  --if-match "$etag"

rm -f "$tmp1" "$tmp2"
Run Code Online (Sandbox Code Playgroud)

  • 非常好,只需要为自己调整路径(从 .DistributionConfig.CacheBehaviors.Items[] 到 DistributionConfig.DefaultCacheBehavior),一切都很顺利。太感谢了 (3认同)