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

node.js - Lambda 事件中的记录是否得到保证?

我正在编写一个 Lambda@Edge 函数并试图找出合适的“防御性”级别是什么。我假设event参数是有保证的,甚至event.Records,但它是否保证是一个非空数组?

从 AWS 文档中的示例:

0 投票
2 回答
1189 浏览

amazon-web-services - Lambda@Edge:无法为指定的 Lambda 函数启用复制

我正在尝试使用 CLI 和 Ansible 来部署带有附加 Lambda / Lambda@Edge 函数的 CloudFront 实例。但我遇到了以下错误:

Lambda@Edge 无法为指定的 Lambda 函数启用复制。更新 IAM 策略以添加权限: lambda:EnableReplication* for resource: arn:aws:lambda:us-east-1:ACCOUNTNUMBER:function:FUNCTIONNAME:1 并重试。

文档确实说我需要lambda:EnableReplication*,但是当我尝试通过此命令将权限添加到 lambda 函数时:

我收到以下错误:

调用 AddPermission 操作时发生错误 (ValidationException):检测到 1 个验证错误:值 'lambda:EnableReplication*' at 'action' failed to meet constraint: Member must meet regular expression pattern: (lambda:[*]|lambda:[ a-zA-Z]+|[*])

我想如何添加这些权限才能成功,我在这里做错了什么?

0 投票
1 回答
213 浏览

aws-lambda - lambda@edge 云端资源创建

我在这里有点迷茫,我正在尝试部署一个使用 Lambda@edge 的简单函数,但是在创建 Cloudfront 资源并将该 CF 附加到 lambda 函数时遇到了一些问题。

这是 serverless.yml 的示例

函数定义:

一件事如果我没有定义它没有创建的 Cloudfront 资源,如果我定义资源并将其附加到无服务器定义,它会创建资源,但是我不知道如何将该 cloudfront 附加到函数。

编辑:

所以我正在部署everithing sls deploy,所以我现在的问题是如何附加LambdaFunctionAssociations要从云端分发中使用的函数名称。

0 投票
2 回答
347 浏览

aws-api-gateway - CloudFront -> S3 用于 ECS 中具有多个动态后端的静态或 API 网关

我需要为站点实施反向代理/重定向服务,该站点将托管在 AWS S3(静态 JS 资产)+ CloudFront 中,多个后端作为不同的任务运行domain.com/api/session_number重定向或反向代理服务中可用的 AWS ECS 应该分析输入参数并重定向到相应的后端。

到目前为止,我已经找到了ECS-nginx-proxy,但它看起来更像是用于开发/阶段环境的工具。如何使用 ALB + API Gateway、Lambda@Edge 等 AWS 服务为生产实施此类服务?

在此处输入图像描述

0 投票
1 回答
705 浏览

redirect - Cloudfront、lambda@edge、S3 重定向对象、

我正在构建一个 S3 URL 重定向,没什么特别的,只是一堆零长度的对象,其中填写了 WebsiteRedirectLocation 元数据。S3 存储桶设置为服务器静态网站,存储桶策略设置为公共等。它工作得很好。

但是 - 我还想锁定存储桶中的某些文件 - 特别是一些用于管理重定向的 HTML 文件(例如添加新的重定向)。使用传统设置,我既可以使用重定向,也可以很好地提供 HTML 页面。但为了锁定它,我需要像在这些帖子中一样使用 Cloudfront 和 Lambda@edge:

https://douglasduhaime.com/posts/s3-lambda-auth.html

http://kynatro.com/blog/2018/01/03/a-step-by-step-guide-to-creating-a-password-protected-s3-bucket/

我已将 lambda@edge 脚本修改为仅在请求管理页面(或其资产,如 CSS/JS)时提示输入密码。如果请求的路径是其他路径(可能是重定向文件),则不会提示用户输入密码。是的,我还可以在 Cloudfront 中设置行为规则来决定何时使用 Lambda 函数来提示输入密码。

它的工作原理。当我按照这些说明通过 Cloudfront URL 访问我的站点时,当我转到站点的根目录(管理页面)时,确实会提示输入密码。但是,重定向将不起作用。如果我尝试加载重定向,浏览器只会下载它。

现在,在另一篇文章中,有人建议我将我的 Cloudfront 分发端点更改为 S3 存储桶 WEBSITE 端点 - 我认为这也意味着将存储桶策略更改回网站模式和公众,这很糟糕,因为现在它可以在我的 Cloudfront 策略之外访问不要。此外 - Cloudfront 不再自动提供指定的索引文件,这不是最糟糕的事情。

所以 - 是否可以锁定我的存储桶,服务器完全通过 Cloudfront 与 Lambda@edge 但也有 Cloudfront 尊重这些重定向,而不是仅仅提示下载?Cloudfront 中是否有尊重标头的设置?我应该为不同的文件(HTML 与重定向)设置不同的行为规则吗?

0 投票
1 回答
408 浏览

aws-lambda - Traefik 具有到 ECS 后端的动态路由,作为一次性任务运行

我正在尝试使用 Traefik v1 (1.7) 和 ECS 一次性任务作为后端来实现反向代理服务的解决方案,如此 SO question 中所述。路由应该是动态的 - 对路径的请求/user/1234/*应该转到 ECS 任务,使用适当的 docker 标签运行:

到目前为止,此设置工作正常,但我需要为每个正在运行的任务创建一个 ECS 任务定义,因为 docker 标签是 ECS TaskDefinition 的属性,而不是 ECS 任务本身。是否可以在任务键/值属性中仅创建一个 TaskDefinition 并在 ECS 任务标签中传递 Traefik 规则?

这将需要对 Traefik 源代码进行一些修改,是否还有其他可用的选项或实现方式,我错过了,比如 API Gateway 或 Lambda@Edge?我对这些技术没有经验,现实世界的例子更受欢迎。

0 投票
0 回答
1287 浏览

aws-lambda - 使用 Terraform 和无服务器框架创建 Lambda@edge 函数

我正在尝试使用 Terraform(iam 角色)和无服务器框架创建 Lambda@edge 函数,管道已完成,但 CloudFront 无法使用此错误消息连接到 Lambda

我对 Lambda@edge 设置(和 Terraform)不太熟悉,从 AWS 控制台,我可以看到 Lambdaarn保存到 CloudFront 的行为部分,但在 Lambda 中看不到任何触发器。

这是 Terraform 设置

无服务器.yml

0 投票
1 回答
33 浏览

amazon-web-services - 当我需要 AWS CloudFront 中的 GET 时,如何处理来自第三方身份验证的 POST?

我正在使用 AWS Cloudfront 提供来自私有 s3 存储桶的静态 html 和图像。我需要一个身份验证层并且需要使用 Microsoft SSO。为了触发身份验证检查,我有一个连接到 Cloudfront 查看器请求的 Lambda 函数。

据我了解,当我想通过查看器请求(身份验证后)时,我需要在回调方法中返回请求。我的问题是 Microsoft SSO 使用 HTTP POST 重定向到 Cloudfront URL。如果我返回请求,Cloudfront 会尝试 POST 到 S3(或在我禁用 POST 时发送 MethodNotAllowed)。我需要这是一个 GET 请求,但不知道如何更改它。根据文档,请求对象的 HTTP 是只读的。

我在发布或提供链接到我想要的 html 的简单 HTML 时尝试重定向到 Cloudfront URL,但这都会导致再次调用查看器请求。

有没有人处理过类似的情况?

0 投票
2 回答
1186 浏览

aws-lambda - 使用 AWS Lambda@Edge 删除 Content-Length

我通过 AWS CloudFormation 模板进行了以下 CloudFront 设置:

因此,每次 API 网关源响应时,都会触发 Lambda@Edge,目前我将其设置为:

当我向端点发送请求时,我仍然可以Content-Length在响应中看到:

我已遵循https://aws.amazon.com/blogs/networking-and-content-delivery/adding-http-security-headers-using-lambdaedge-and-amazon-cloudfront/指南,但我仍然无法看看如何Content-Length从响应中删除 - 这可能吗?

非常感谢任何建议

0 投票
3 回答
4984 浏览

amazon-web-services - 为什么 Lambda@Edge 必须位于 us-east-1 区域?

我正在尝试在 us-east-2(俄亥俄州)区域创建 CloudFormation 堆栈。但是,收到以下错误

我浏览了以下资源并了解这是 lambda 必须满足的要求。我的问题是为什么?为什么会设置这样的限制?我查看了文档,但他们只提到了 us-east-1 的用法,但没有提供任何理由!

https://github.com/awslabs/serverless-application-model/issues/635

https://medium.com/@mnylen/lambda-edge-gotchas-and-tips-93083f8b4152