问题标签 [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 回答
597 浏览

amazon-web-services - lambda@edge aws 在哪里执行

我们在云端部署了一个 lambda@edge。我们看到默认限制是每个 AWS 区域 1000 个 lambda 并发。

据我了解, lambda@edge 在边缘位置执行,并且该边缘位置附加到一个区域(例如伦敦或法兰克福)。第一次调用 cloudfront 时,lambda@edge 从区域拉到边缘位置并在此处执行。

那么限制 1000 lambda 并发仅在区域中,而不是在边缘位置?

0 投票
1 回答
818 浏览

amazon-web-services - 从 Lambda@Edge 触发另一个 Lambda 函数

我想从我的 Lambda@Edge 卸载一些功能以加快响应时间。这意味着在我的 Lambda@Edge 中触发另一个 Lambda 函数。

Lambda@Edge 将应用程序分布在所有区域,因此当发出请求时,它将在离请求者最近的区域执行应用程序。

我目前的解决方案是在所有区域创建一个具有相同主题名称的 SNS,在 us-east-1 中有一个 SQS 来监听所有这些 SNS 主题,并使用 Lambda 函数来监听 SQS。

然而,在每个区域创建一个 SNS 维护起来相当麻烦。

关于如何在我的 Lambda@Edge 中触发另一个 Lambda 函数的任何其他建议?

谢谢!

0 投票
1 回答
780 浏览

amazon-web-services - Cloudfront 在重定向时抛出 403

我有一个 Lambda Edge 附加到应该处理重定向的 Origin Request 事件。代码非常简单,它检查请求的 URL 是否在 DynamoDB 表中,如果是,则返回带有重定向 URL 的 301 响应。这是我拥有的 Lambda Edge 代码

如果我使用测试事件测试 Lambda 函数,我会收到重定向响应。但是,当我尝试使用 CloudFront 进行重定向时,出现 403 错误。所以,假设 URL/a应该重定向到/b. 如果我打电话cloudfront.url/a,我应该会收到一条消息,说明该对象已被移动到/b(或者甚至更好地被自动重定向)。相反,我得到了 403 错误。Lambda 是否有问题,或者我需要向 CloudFront 附加一些权限才能使重定向正常工作?

0 投票
3 回答
1142 浏览

amazon-cloudfront - 将现有 lambda 边缘迁移到无服务器框架

我有一个附加到 CloudFront 分配的 Lambda Edge。我想要做的是使用无服务器框架发布 lambda(而不是手动上传文件并单击“部署到 Lambda@Edge”)。我尝试做的是查看无服务器文档,将此 yml 文件添加到项目中并运行部署脚本

这部署了 Lambda,但并未将其附加到 CloudFront(尚未发布,也没有相关的版本或触发器)。那么如何使用现有的 CloudFront 分配来做到这一点呢?

0 投票
2 回答
575 浏览

amazon-web-services - 为 AWS Lambda@Edge 选择边缘站点

我在 AWS S3 中有想要使用 AWS Lambda 函数处理的数据。但是,这些数据不能出境。这不是 AWS S3 的问题,因为我可以选择我所在国家/地区的区域。是否可以选择我想使用 Lambda@Edge 运行我的 lambda 函数的特定边缘位置?

0 投票
1 回答
576 浏览

serverless-framework - 在 lambda@edge 上使用Sharp

我正在尝试在几个 AWS lambda@edge 上使用Sharp。这个想法是在请求时调整图像大小和缓存(请参阅this)。

我还使用serverlessserverless-webpack来部署 lambda。

如果我在 AWS 控制台中测试它们,我可以部署 lambda 并且一切顺利。

但是,这些是 lamda@edge,它们将用作 cloudwatch 请求/响应触发器。因此,最大 lambda 大小为 1Mb。

我的问题是我似乎无法接近那个大小,我能达到的最佳值是 11.6Mb。而且,从第一个链接中可以看出,这似乎是可能的。

这是导致 34.7Mb lambda 的无服务器配置:

有了这个,我得到了 11.6Mb:

我也玩过 package.exclude,但没有运气:

这是我的 webpack 配置:

在本地运行时,我可以看到它的包装...... node_modules 文件夹似乎很清晰及其依赖关系。但最大的文件夹是锋利的。

我怀疑我正在将不需要的东西包装在尖锐的文件夹中……但我似乎无法理解是什么。

有什么帮助吗?

谢谢

更新: 仔细阅读,似乎我需要尖锐(原始响应)大小限制的功能是 5Mb。我只需要找到一种方法来为该功能打包尖锐。Webpack 似乎将它放在两者中,即使我在其他功能(查看器请求)上不需要它。对此有什么帮助吗?

0 投票
1 回答
1396 浏览

amazon-cloudfront - 谷歌索引 Cloudfront 分布

我通过 Cloudfront 有一个静态站点,通过 Route 53 有一个 S3 源和自定义域。一切正常,除了 Google 还索引了 Cloudfront 分发 url (d123etc.cloudfront.net) 以及我的自定义域,导致重复的内容问题。

我已经尝试过规范的 url,但分布仍然被索引。建议根据使用的域提供不同的 robots.txt,这听起来不错,但没有 .htaccess 或 Web 服务器,将其留给 Lambda Edge 函数尝试发送不同的 robots.txt .

问题是我无法在函数中找到如何确定请求是来自我的自定义域还是来自直接分发 url。我已尝试将 Origin 列入白名单,但在使用 S3 源时未发送。我也尝试将Referer标头列入白名单,但在访问robots.txt文件时没有发送referrer,因为它是直接请求。

暂时,我在页面加载时使用 js 添加一个 meta noindex 客户端(我意识到为时已晚),并将客户端重定向到我的实际域,以防有人关注谷歌索引的 cloudfront.net领域。

有谁知道如何在 Lambda Edge 中检测用于发出请求的域?或者阻止谷歌索引 Cloudfront url 的其他方式,只是让它索引自定义域。

0 投票
2 回答
1563 浏览

amazon-web-services - Lambda@Edge 中的 DynamoDB 访问

需要您帮助理解一些概念。我有一个在 CloudFront 上使用 Lambda@Edge 的 Web 应用程序。此 lambda 函数访问 DynamoDB - 进行大约 10 个独立查询。这偶尔会产生错误,尽管当我单独测试 lambda 函数时它可以完美运行。我无法从云端日志中理解,Lambda@Edge 也没有出现在 CloudWatch 中。

我感觉 DynamoDB 查询是罪魁祸首。(因为这就是我在 Lambda 函数中所做的一切)为了确保,我将数据复制到所有区域。但这并没有解决问题。我增加了分配给 lambda 函数的超时和内存。但这并没有任何帮助。但是,减少数据库查询的数量似乎有所帮助。

你能帮我理解这个吗?在 Lambda@Edge 中进行数据库查询有错吗?有没有办法获取 Lambda@Edge 的详细日志?

0 投票
0 回答
1533 浏览

amazon-web-services - 如何使用 AWS Lambda 和 Cloudfront 删除 .html 扩展名

  1. 我将网站的源代码存储在 AWS S3 中,并且我正在使用 AWS Cloudfront 来交付我的内容。
  2. 我想使用 AWS Lamda@Edge 从通过 Cloudfront 提供的所有 Web 链接中删除 .html 扩展名。
  3. 我需要的输出应该是 www.example.com/foo 而不是 www.example.com/foo.html 或 example.com/foo1 而不是 example.com/foo1.html。

请帮助我实现这一点,因为我找不到明确的解决方案。我已经提到了这篇文章中提到的第 3 点:https ://forums.aws.amazon.com/thread.jspa?messageID=796961&tstart=0 。但目前尚不清楚我需要做什么。

PFB lambda 代码,我该如何修改它-

请帮助我从我的网站中删除 .html 扩展名,以及我需要将哪些更新的代码粘贴到我的 AWS Lambda 中提前谢谢!

0 投票
1 回答
172 浏览

amazon-web-services - 使用 Lambda 边缘将机器人流量路由到不同的服务器

我正在尝试将来自机器人(谷歌、Facebook 等)的流量路由到在 AWS 上使用弹性 beanstalk 托管的完全不同的服务器。

在寻找示例时,我只遇到将流量路由到另一个 S3 存储桶的人,如下所示:

我似乎还没有真正理解这个request.origin对象。我不明白为什么它会有一个专用于 s3 的属性?而且我也不明白如何使用此代码将流量路由到api.<domainname>.com.

以前有人解决过这个问题吗?