问题标签 [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 投票
1 回答
1135 浏览

amazon-s3 - Lambda 边缘源请求 502

我在 Cloudfront 的原始请求中调用 lambda edge,这个错误,我试图将单页应用程序的元标记更改为 React:

验证错误:Lambda 函数在 headers 对象中返回了一个无效条目,header 必须有一个 value 字段,header: cache-control 有一个或多个没有 value 字段的条目。

这是我的 lambda 边缘函数

0 投票
0 回答
1531 浏览

request - 使用 lambda@Edge 更改 CloudFront 响应

我一直在尝试使用 lambda@edge 将 CloudFront-viewer-country 标头添加到我的响应中,我设法触发了该功能及其工作,但我在 cloudWatch 中看不到任何日志,cloudWatch 仅记录测试是在功能页面上完成的,不是通过访问网站触发的真正测试,我用谷歌搜索了如何找到日志,发现它在接收请求的最近区域的 cloudWatch 中,但我找不到。

我尝试了两种方法来更改我的响应,其中一种是堆栈溢出答案:https://stackoverflow.com/questions/48633610/how-do-i-get-cloudfront-viewer-country-to-appear-in-response-headers

此方法在从 lambda 页面进行测试时有效,但是当我通过访问网站进行测试时出现 503 服务器错误:与 CloudFront 分配关联的 Lambda 函数无效或没有所需的权限。

所以有人可以帮助获得这些权限,请注意我的 s3 存储桶上有以下策略,它静态托管我的网站:

我尝试过的另一种方法是在我的 lambda 中使用以下函数:

此方法正在返回预期的响应,但我的网站没有加载任何内容,我不明白为什么!这是我收到的响应标头:

我已经使用了以下内容并且工作正常,但我不知道它是否正确的方法:

0 投票
1 回答
963 浏览

amazon-cloudfront - 缓存与无缓存是否会影响 CloudFront 定价?

我需要从 S3 存储桶中以低容量提供大文件 (10-50GB)。我正在使用 CloudFront,因为我需要 Lambda@Edge 在请求到达 s3 存储桶之前对其进行检查。

此处的 AWS 文档中,我了解到我支付了将数据传出到 Internet 的费用。我还了解 CloudFront 缓存的最大对象大小为 20GB。

我的问题是:对于小于 20GB 的文件,缓存这些文件是否对 CloudFront 的成本/定价有任何影响?设置Cache-control标头是否no-cache意味着响应绕过 CloudFront?我认为在边缘服务器上缓存/存储文件必须有一些成本。

这里有一个类似的问题,但答案没有具体讨论缓存的成本/定价。

0 投票
1 回答
679 浏览

javascript - 如何检查小写 URL 并重定向它们是否对 Lambda@Edge 有效

我有一些旧的 URL 过去使用大写字母来表示人名等,但现在我已经将我的网站更新为每个页面的 URL 中的小写字符。所以,如果人们碰巧点击了旧链接,或者不小心输入了大写字母,我想重定向他们。

我还检查删除尾部斜杠。这是我目前在前端使用的代码。我希望切换到使用 Lambda@Edge(我的网站在 S3 上并通过 CloudFront 分发)进行检查和重定向。

这是我在前端使用的 JS 函数:

我如何在 Lambda@Edge 函数中编写它?

也许是这样的:

Lambda@Edge 函数甚至可以进行 I/O 吗?

而且,重要的是,这个 Lambda@Edge 函数只能在 404 上运行吗?

0 投票
1 回答
1221 浏览

javascript - 无服务器:通过调用方法触发并忘记不能按预期工作

我有一个无服务器 lambda函数,我想在其中触发(调用)一个方法并忘记它

我正在这样做

我注意到,除非我做 a Promise returnin myFunction1,否则它不会触发myFunction2,但不应该设置 lambdaInvocationType = "Event"意味着我们希望它被触发并忘记而不关心回调响应?

我在这里错过了什么吗?

非常感谢任何帮助。

0 投票
1 回答
644 浏览

node.js - AWS Lambda 仅在满足条件时触发函数

我刚刚开始使用 AWS Lambda 和 CloudFront 进行学习。我发现操作请求和响应非常容易,但是我无法完成一个简单的任务。

鉴于下面的代码,我只想在用户没有 /it/ 或 /en/ 的情况下触发操作request.uri

我在解析 uri 字符串时没有问题,但我不确定如何实现这个非常简单的逻辑:

下面用 node.js 编写的函数部分完成了这项工作,它Viewer Request在我的 CloudFront 分配中触发:

0 投票
1 回答
979 浏览

amazon-web-services - lambda@edge 超时和 s3 图像处理

我使用 lambda@edge 函数动态调整图像大小。这工作得很好 - 除了同时调用这个函数 fe 5x 时。然后在 s3 上查找图像大约需要 4 秒。因为 lambda@edge 函数只有一个最大值。超时 5 秒,我只剩下 1 秒,这对于处理图像来说太少了。

所以我问自己,为什么 5s 的限制这么低?

也许我可以优化图像的 s3-lookup,它在多次调用该函数时需要 4 秒(当只为 1 个图像调用它时,它在 200 毫秒时非常快)。

s3 查找:

lambda@edge 函数的完整代码(简化):

0 投票
1 回答
84 浏览

aws-lambda - 有什么方法可以从 AWS lambda(Node JS)禁用 *Alexa 卡*?

我没有启用显示界面,没有使用渲染器模板,也没有使用 Alexa 演示语言,但每当我在自定义技能中调用任何意图时,我仍然会在 FireTV 立方体中获得 Alexa 卡。响应生成器中是否有任何 API 可用于禁用此 Alexa 卡?

0 投票
1 回答
408 浏览

amazon-web-services - Cloudfront Origin Group detect failver using Lambda@Edge

My setup:

I have a Cloudfront Origin Group where Bucket A is a primary bucket and Bucket B is a secondary bucket. Lambda@Edge is added on origin-request to do a certain process.

Whenever a request comes to Cloudfront, my Lambda@Edge modifies it to match the folder structure of my bucket and returns file accordingly.

If Bucket A doesn't have a certain file it throws an error and Cloudfront failover requests the file from Bucket B. Bucket B doesn't have the same structure as Bucket it, it should return the file from unmodified file path in the bucket.

Example:

My Original Request: /somefile.html Lambda@Edge modifies this request to get the file from Bucket A to: /en/somefile.html

If Bucket A doesn't have this somefile.html then this request goes to Bucket B. It should return file from the originally requested path: /somefile.html and not /en/somefile.html

The above scenario is very simple, my original scenario is much complex. Basically Bucket A file path is processed path while Bucket B should return file from an originally requested path.

What I want:

Using Lambda@Edge how can I detect if the request is on Bucket A or bucket B?

What I have tried:

  • I tried adding certain header in request headers and check if the header exists then its request to Bucket B. But this doesn't seem to be working.
0 投票
2 回答
1333 浏览

amazon-cloudfront - Lambda@edge 不是由源请求事件触发的

我正在尝试使用 CloudFormation 配置 Lambda@edge 函数。部署模板后,一切看起来都可以在控制台中找到,但是监听origin-request事件的 lambda 函数没有被触发。奇怪的是,一个viewer-request事件确实设法触发了一个函数。

我究竟做错了什么?我怎样才能使origin-request活动正常进行?

这是我的模板: