API网关(APIG),虽然它使用CloudFront(CF),但它不支持CDN边缘缓存.当我配置CF分发以使用APIG作为自定义源时,我收到权限被拒绝错误.
如何配置CF来解决这个问题?
好吧,我现在已经进入了这个阶段并取得了重大进展,但仍然完全被基本面所困扰.
我的应用程序使用Cognito用户池来创建和管理用户 - 这些在S3上通过IdentityId标识.我的每个用户都有自己的S3文件夹,AWS会自动为他们提供一个等于用户IdentityId的文件夹名称.
我需要将IdentityId与其他Cognito用户信息相关联,但无法确定如何使用.
我需要的关键是能够识别用户名以及给定IdentityId的其他cognito用户属性 - 而且这非常困难.
因此,第一场战斗是在Cognito用户通过AWS API Gateway发出请求时,弄清楚如何获取IdentityId.最后我得到了解决方案,现在我有一个Cognito用户,他向API网关发出请求,而我后面的Lambda函数现在有了IdentityId.那一点有效.
但我完全不知道如何访问存储在用户池中的Cognito用户信息.我找不到任何明确的信息,当然也没有代码,它显示了如何使用IdentityId来获取Cognito用户的属性,用户名等.
看来,如果我使用"Cognito用户池"在API网关中授权我的方法,那么可以使用正文映射模板将Cognito用户信息(例如sub,用户名和电子邮件地址)放入上下文中,但我可以没有得到IdentityId.
但是如果我AWS_IAM在API网关中使用授权我的方法,那么身体映射模板会反过来 - 它为我提供了IdentityId而不是Cognito用户字段,例如sub和username以及email.
这让我发疯了 - 如何将IdentityId和所有Cognito用户字段和属性合并为一个数据结构?事实上,我似乎只能得到一个或另一个是没有意义的.
您认为在AWS API Gateway中使用和不使用代理功能的Lambda集成的优点和缺点是什么(更具体地说,在使用无服务器框架时)?这是我现在的想法:
Lambda与代理集成
没有代理的Lambda集成
你的想法是什么?您通常使用Lambda Proxy还是普通的Lambda集成?你喜欢什么,为什么?
编辑:到目前为止,我倾向于总是选择不使用代理功能,因为提到的原因(解耦和说明依赖关系 - 标题,状态代码等 - 预先).
当我deploy使用带有API网关资源的模板运行CloudFormation时,第一次运行它时,它会创建并部署到阶段.随后我运行它,它会更新资源但不会部署到阶段.
这种行为是否符合预期?如果是的话,我是如何在更新时将其部署到阶段的?
(Terraform提到了类似的问题:https://github.com/hashicorp/terraform/issues/6613)
我们正在开发一个移动/网络应用程序,我们使用aws lambda和dynamo db作为我们的后端.独立的lambda功能正在完美运行.呼叫通过api网关路由.我们使用api密钥来利用它提供的安全功能.出于某些测试目的,我们试图通过第三方休息客户端POSTMAN调用api端点.
请求属于POST类型,但无论我们尝试什么,我们都会得到
403 ("message": "Missing authentication token.")
附上快照以供参考.(出于安全原因,少数部分用阴影表示)
当前架构:
问题:
我们在前端和后端层之间有两步流程.
微服务2(MS2)需要验证来自前端的I1的完整性.如何避免对MS1的新查询?什么是最好的方法?
流程我正在尝试优化删除步骤1.3和2.3
流程1:
流程2:
途径
一种可能的方法是在MS2和MS1之间使用B2B HTTP请求,但我们将在第一步中复制验证.另一种方法是将数据从MS1复制到MS2.然而,由于数据量和它的波动性,这是令人望而却步的.复制似乎不是一个可行的选择.
我认为更合适的解决方案是前端有责任获取微服务2上的微服务1所需的所有信息并将其传递给微服务2.这将避免所有这些B2B HTTP请求.
问题是微服务1如何信任前端发送的信息.也许使用JWT以某种方式对来自微服务1的数据进行签名,并且微服务2将能够验证该消息.
注意 每次微服务2需要来自微服务1的信息时,执行B2B http请求.(HTTP请求使用ETAG和缓存控制:max-age).怎么避免这个?
建筑目标
微服务1需要来自微服务2的数据,以便能够在MS1数据库上保持MS1_Data和MS2_Data,因此使用代理的ASYNC方法不适用于此.
我的问题是,是否存在设计模式,最佳实践或框架,以实现这种推力沟通.
当前体系结构的缺点是在每个微服务之间执行的B2B HTTP请求的数量.即使我使用缓存控制机制,每个微服务的响应时间也会受到影响.每个微服务的响应时间至关重要.这里的目标是存档更好的性能,以及如何使用前端作为网关在多个微服务之间分配数据,但使用推力通信.
MS2_Data只是MS1必须用于维护数据完整性的产品SID或供应商SID的实体SID.
可能解决方案
这个想法是使用网关作为api网关请求处理,它将缓存来自MS1和MS2的一些HTTP响应,并将它们用作对MS2 SDK和MS1 SDK的响应.这样,在MS1和MS2之间不直接进行通信(SYNC或ASYNC),也避免了数据复制.
当然,上述解决方案仅适用于跨微服务的共享UUID/GUID.对于完整数据,事件总线用于以异步方式(事件源模式)跨微服务分发事件和数据.
灵感:https://aws.amazon.com/api-gateway/和https://getkong.org/
相关问题和文档:
architecture design-patterns data-sharing microservices aws-api-gateway
我有一个通过API网关配置的lambda函数,该函数应该通过Node(例如:Twilio)访问外部API.我不想在lambda函数中存储函数的凭据.有没有更好的地方设置它们?
我正在通过 Visual Studio 使用 AWS Lambda 和 API Gateway 构建无服务器应用程序。我正在使用 C#,并使用无服务器应用程序模型 (SAM) 来部署我的 API。我在 Visual Studio 中构建代码,然后通过发布到 Lambda 进行部署。这是有效的,除了每次我进行新构建并尝试执行 API 调用时,我都会收到此错误:
由于配置错误,执行失败:Lambda 函数的权限无效
做了一些研究,我发现其他地方提到了这个修复(通过 AWS 控制台完成):
修复:转到 API 网关 > API 名称 > 资源 > 资源名称 > 方法 > 集成请求 > Lambda 函数并重新选择我现有的函数,然后用小复选标记“保存”它。
现在这对我有用,但它破坏了使用 serverless.template (JSON) 构建我的 API 的自动化。有谁知道如何在 serverless.template 文件中解决这个问题?这样我就不需要在控制台中采取行动来解决?这是 serverless.template 文件中我的一种方法的示例
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Transform" : "AWS::Serverless-2016-10-31",
"Description" : "An AWS Serverless Application.",
"Resources" : {
"Get" : {
"Type" : "AWS::Serverless::Function",
"Properties": {
"VpcConfig":{
"SecurityGroupIds" : …Run Code Online (Sandbox Code Playgroud) aws-api-gateway ×10
aws-lambda ×5
architecture ×1
cdn ×1
data-sharing ×1