问题标签 [aws-lambda-edge]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
16402 浏览

amazon-web-services - 无法删除 AWS Lambda@Edge 副本

这个问题在这里已经存在,但我认为它会对 SO 产生更大的影响。

我创建了一个AWS Lambda@Edge 函数,以便在 Cloudfront URL 到达源之前重写它们。
AWS Lambda@Edge 函数在发布时会自动复制到所有区域,因此在每个区域中看到这一点我并不感到惊讶:

在此处输入图像描述

问题从这里开始
我删除了 Lambda@Edge,因为它是一个测试,我想开始一个新的,但是副本没有同时被删除。
当时这没什么大不了的,我认为我可以简单地创建一个新的 Lambda@Edge 函数。
但是你不能,因为Cloudfront 触发器一次只能使用一个函数(因为副本使用它,你不能创建一个新函数)。
而且,触发器也不能删除

所以现在我到处都使用 Lambda@Edge 副本,我无法删除,也无法创建类似的副本。


TL;博士

  • 我使用 CloudFront 触发器创建了 Lambda@Edge
  • 我删除它以创建一个新的(类似的)
  • 现在有一个副本仍然存在
  • 我无法删除副本
  • 我无法创建新的 Lambda@Edge,因为触发器已被副本“使用”(我无法删除)

我很感激能在这个
François 上得到一些帮助


编辑:

我绝对认为这是一个错误,因为在我的副本页面中,指向主 ARN的链接以404 响应。

0 投票
1 回答
2120 浏览

aws-lambda - 使用 Lambda@Edge 的单页应用程序

所以我有一个由 AWS Cloudfront 从 AWS S3 提供的 SPA。我已经配置了以下错误页面行为:

404: Not Found->/index.html使用 HTTP 代码200

这需要能够在客户端处理路由。

现在我有一个 Lambda@Edge 函数,它由viewer-responseCloudfront 中的事件触发并设置一些自定义标头,例如 HSTS 和 X-Frame。除了实际的/index.html. 我倾向于认为这是因为它是由 Cloudfront 中的上述错误页面行为处理的,因为对 html 的实际 GET 请求是由 Cloudfront 中的错误页面配置处理的。

解决这个问题的实用方法是什么?

我不确定为什么重定向不会触发 lambda 函数。有没有办法实现与 lambda@edge 中的错误页面配置相同的逻辑?

0 投票
4 回答
10767 浏览

amazon-web-services - Lambda@Edge 未登录云端请求

正如文档中所解释的,我为Viewer Response.

lambda函数代码:

Viewer Response我已经为事件适当地设置了触发器。

现在当我通过cloudfront发出请求时,它必须登录cloudwatch,但它没有。
如果我做一个简单的Test Lambda Function(使用按钮),它会被正确记录。

这里可能是什么问题?

0 投票
2 回答
3216 浏览

amazon-web-services - AWS Lambda@Edge 调试

我目前正在研究 lambda@edge 函数。我在 CloudWatch 或其他调试选项上找不到任何日志。

使用“测试”按钮运行 lambda 时,日志将写入 CloudWatch。

当 CloudFront 事件触发 lambda 函数时,不会写入日志。

我 100% 肯定事件触发器有效,因为我可以看到它的结果。

知道如何进行吗?

提前谢谢,
约西

0 投票
2 回答
4439 浏览

javascript - 从 AWS lambda@edge 访问原始 URL

我正在尝试在 AWS Cloudfront 上使用 lambda@edge 为多个网站实施“代理”。

我的设置大致是:

DNS:*.domain.com -> some_uuid.cloudfront.net(Cloudfront 分布)

Cloudfront:some_uuid.cloudfront.net -> s3 存储桶来源

s3 存储桶:网站/(包含多个网站的文件夹)

lambda@edge 函数:定义为 origin-request

我的 lambda@edge 函数非常简单:

  1. 检查网站资源是否存在于 s3 存储桶中。

  2. 如果是这样,请将请求 uri 更改为资源 s3 url。

  3. 如果没有,则向后端服务器发送请求以呈现资源,存储在 s3 上并返回它。

我无法获取网站的原始域。例如,如果我尝试访问“my_website.domain.com” - 在我的 lambda 函数中,我没有来自请求的域信息。

我想我可以实现另一个 lambda@edge 函数作为查看器请求以将域作为标头传递,但如果可以的话,我宁愿避免这种情况。

还有其他解决方案吗?

谢谢

0 投票
1 回答
1622 浏览

node.js - aws lambda@edge + Cloudfront 错误 ()

错误

我正在使用 lambda@edge + cloudfront 来调整图像大小等。我的来源是 S3 存储桶。

问题:当我尝试通过浏览器通过云端调用 s3 内的对象时,出现上述错误(图片)。当我只使用一个测试函数(如下)时,它甚至会发生。

我如何调用/查询它:我的 s3 设置为原点,所以我只使用我的云端域名 d5hbjkkm17mxgop.cloudfront.net 并添加 s3 路径 /my_folder/myimage.jpg

使用的浏览器网址:d5hbjkkm17mxgop.cloudfront.net/my_folder/myimage.jpg

我很确定 request 是一个对象 - 不知道为什么会这样。如果在 aws 控制台中测试一切正常 - 所以它必须是 cloudfront/lambda 接口错误 - 因为甚至没有调用 lambda(没有生成新的日志条目)。

我也有来自云端的访问错误:

有任何想法吗?

编辑:分号

0 投票
1 回答
1432 浏览

amazon-web-services - 阻止 CloudFormation 从 CloudFront 中删除 Lambda 边缘关联

我正在使用CloudFormation来管理CloudFront 分配

在这个CloudFront 分配上,我关联了一个Lambda Edge 函数(不使用 CloudFormation)。

后来的问题是,当我使用相同的 CloudFormation 堆栈更新 CloudFront 分配时,它会删除所有 Lambda Edge associations

如何预防?

真是可惜了。。

PS:有时 CloudFormation 会删除 Lambda 关联(例如在更新证书 ARN 时),有时不会。

编辑:我可以尝试使用https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html,但有没有更简单的方法?没有..

编辑:AWS论坛上的相同问题https://forums.aws.amazon.com/thread.jspa?threadID=274111(需要登录)

0 投票
2 回答
280 浏览

aws-lambda - 我可以在我的数据中心运行 AWS Lambda 函数吗

AWS 声称它允许通过 AWS GreenGrass 在设备中执行 Lambda 函数。我试图了解我们是否也可以在我的数据中心的其他虚拟机中执行 Lambda 函数。但是找不到任何关于它的信息。请注意,这不是在本地测试 Lambda 函数。这是关于在本地进行计算。

0 投票
3 回答
8775 浏览

amazon-web-services - 绕过云端 S3 身份验证中包含 x-amz-cf-id 标头的需要

我有一个不完全正统的 CF->S3 设置。这里的相关组件是:

  1. Cloudfront 分发与origin s3.ap-southeast-2.amazonaws.com

  2. 添加 S3 授权(版本 2)查询字符串(使用函数使用的 S3 策略签名)的 Lambda@Edge 函数(原始请求)。

Lambda 返回的请求是完全正确的。如果我记录 uri、主机和查询字符串,我会得到我请求的文件。但是,如果我直接通过 Cloudfront 链接访问它,请求将失败,因为它不再使用AWSAccessKeyID,而是选择使用x-amz-cf-id(但使用相同的签名、Amz-Security-Token 等)。更正:它可能不会替代,但需要补充。

我知道是这种情况,因为我已经退回了 StringToSignSignatureProvided。这些都与 Lambda 响应匹配,除了AWSAccessKeyID已替换为x-amz-cf-id.

这显然是一个非常具体的问题。我可能不得不考虑改造这个架构,但我不希望这样做。有几个要求导致我放弃了这种不完全常规的设置。

0 投票
1 回答
677 浏览

amazon-web-services - boto3 在获取 AWS Lambda 提供的区域时无法访问给定的区域名称

我有这样的博托客户

我正在使用此客户端检测图像中的文本,并在其中 Rekognition api 不可用但提供了客户端可用的区域名称的 AWS 区域中部署代码。在执行/测试 lambda 函数时,它给出

为什么它像我在 client-"us-east-1" 中提供的那样选择 ap-south-1

client = boto3.client('rekognition', region_name="us-east-1")

但是当我在本地使用 region-name:- ap-south-1 和客户端运行代码时

它运行得很好

但不在 AWS lambda 上运行

当两个区域相同时成功运行(us-east-1)

如果有人可以提供任何建议,那就太好了,很快就需要帮助!!!!!!!