问题标签 [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.
amazon-s3 - Lambda 边缘源请求 502
我在 Cloudfront 的原始请求中调用 lambda edge,这个错误,我试图将单页应用程序的元标记更改为 React:
验证错误:Lambda 函数在 headers 对象中返回了一个无效条目,header 必须有一个 value 字段,header: cache-control 有一个或多个没有 value 字段的条目。
这是我的 lambda 边缘函数
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 中使用以下函数:
此方法正在返回预期的响应,但我的网站没有加载任何内容,我不明白为什么!这是我收到的响应标头:
我已经使用了以下内容并且工作正常,但我不知道它是否正确的方法:
amazon-cloudfront - 缓存与无缓存是否会影响 CloudFront 定价?
我需要从 S3 存储桶中以低容量提供大文件 (10-50GB)。我正在使用 CloudFront,因为我需要 Lambda@Edge 在请求到达 s3 存储桶之前对其进行检查。
从此处的 AWS 文档中,我了解到我支付了将数据传出到 Internet 的费用。我还了解 CloudFront 缓存的最大对象大小为 20GB。
我的问题是:对于小于 20GB 的文件,缓存这些文件是否对 CloudFront 的成本/定价有任何影响?设置Cache-control
标头是否no-cache
意味着响应绕过 CloudFront?我认为在边缘服务器上缓存/存储文件必须有一些成本。
这里有一个类似的问题,但答案没有具体讨论缓存的成本/定价。
javascript - 如何检查小写 URL 并重定向它们是否对 Lambda@Edge 有效
我有一些旧的 URL 过去使用大写字母来表示人名等,但现在我已经将我的网站更新为每个页面的 URL 中的小写字符。所以,如果人们碰巧点击了旧链接,或者不小心输入了大写字母,我想重定向他们。
我还检查删除尾部斜杠。这是我目前在前端使用的代码。我希望切换到使用 Lambda@Edge(我的网站在 S3 上并通过 CloudFront 分发)进行检查和重定向。
这是我在前端使用的 JS 函数:
我如何在 Lambda@Edge 函数中编写它?
也许是这样的:
Lambda@Edge 函数甚至可以进行 I/O 吗?
而且,重要的是,这个 Lambda@Edge 函数只能在 404 上运行吗?
javascript - 无服务器:通过调用方法触发并忘记不能按预期工作
我有一个无服务器 lambda函数,我想在其中触发(调用)一个方法并忘记它
我正在这样做
我注意到,除非我做 a Promise
return
in myFunction1
,否则它不会触发myFunction2
,但不应该设置 lambdaInvocationType = "Event"
意味着我们希望它被触发并忘记而不关心回调响应?
我在这里错过了什么吗?
非常感谢任何帮助。
node.js - AWS Lambda 仅在满足条件时触发函数
我刚刚开始使用 AWS Lambda 和 CloudFront 进行学习。我发现操作请求和响应非常容易,但是我无法完成一个简单的任务。
鉴于下面的代码,我只想在用户没有 /it/ 或 /en/ 的情况下触发操作request.uri
我在解析 uri 字符串时没有问题,但我不确定如何实现这个非常简单的逻辑:
下面用 node.js 编写的函数部分完成了这项工作,它Viewer Request
在我的 CloudFront 分配中触发:
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 函数的完整代码(简化):
aws-lambda - 有什么方法可以从 AWS lambda(Node JS)禁用 *Alexa 卡*?
我没有启用显示界面,没有使用渲染器模板,也没有使用 Alexa 演示语言,但每当我在自定义技能中调用任何意图时,我仍然会在 FireTV 立方体中获得 Alexa 卡。响应生成器中是否有任何 API 可用于禁用此 Alexa 卡?
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.
amazon-cloudfront - Lambda@edge 不是由源请求事件触发的
我正在尝试使用 CloudFormation 配置 Lambda@edge 函数。部署模板后,一切看起来都可以在控制台中找到,但是监听origin-request
事件的 lambda 函数没有被触发。奇怪的是,一个viewer-request
事件确实设法触发了一个函数。
我究竟做错了什么?我怎样才能使origin-request
活动正常进行?
这是我的模板: