当前位置: 首页 > 知识库问答 >
问题:

如何使用cli更新cloudfront发行版中的Lambda@Edge arn

商冠玉
2023-03-14

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

我看到了以下文档https://docs.aws.amazon.com/cli/latest/reference/cloudfront/update-distribution.html

共有1个答案

魏英勋
2023-03-14

这是脚本,就是这样做的。它是基于@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"
 类似资料:
  • 我有一个XPage应用程序,在其中一个托管bean中使用JavaMail。目前,我已经将jar文件添加到了管理bean的构建路径中。这个效果不错。但现在我想使用一个较新版本的JavaMail,因为Domino服务器使用的是1.3版本,而我需要的是1.4.x版本。 我已经从Oracle下载了新的JavaMail JAR文件。在Domino Designer(第9版)中,我将这个jar文件添加到新的设

  • 我尝试在Intellijidea中打开Maven项目。这个项目使用了spark和Scala。当我跑的时候: 则会给出错误: [错误]无法执行目标org.scalastyle:scalastyle-maven-plugin:0.7.0:项目spark-mllib_2.10:scalastyle执行期间失败:您有50个scalastyle冲突 我认为问题出在Maven的版本上。实际上,在Intelli

  • 我已经从cPanel更改了PHP版本7.2,但是它已成功更改。但是当转到 Putty(命令行界面)并键入时 它显示php版本是7.2,但Php-cli版本是5.6 PHP 5.6.40 (cli)(构建时间:2019年4月8日15:39:30)版权所有(c) 1997-2016 PHP 组 Zend Engine v2.6.0, 版权所有 (c) 1998-2016 Zend 技术

  • 我正在尝试使用CloudFormation创建Lambda函数的新版本。 我想拥有同一个Lambda函数的多个版本,这样我就可以(a)在不同的版本中指向别名——比如DEV和PROD——并且(b)能够回滚到更早的版本 这是我的Lambda版本的定义: 运行“aws cloudformation创建堆栈”时会创建一个版本,但后续的“aws cloudformation更新堆栈”命令不会执行任何操作。没

  • 我正在使用最新的iOS SDK for AWS,并且使用TransferManager类从S3获取文件可以很好地工作 然后我想添加Cloudfront以更好地提供边缘服务,但将Cloudfront发行版设置为S3 bucket不起作用。 在这个问题上,这是一个公认的答案 谢谢你

  • 我试图为cloudfront重定向根默认对象创建一个lambda@edge。我遵循了以下指示:https://aws.amazon.com/blogs/compute/implementing-default-directory-indexes-in-amazon-s3-backed-amazon-cloudfront-origins-using-lambdaedge/ 但是CloudFront没