我正在尝试构建AWS CloudFormation模板以创建API网关。
当我手动创建API网关时,我使用阶段变量为不同阶段使用不同的AWS函数。
eg.我有一个名为adminLogin
的阶段变量,当API网关的阶段是dev
stage_adminLogin
时,adminLogin的值将是-dev_adminLogin
云信息模板片段-
test:
Type: 'AWS::ApiGateway::RestApi'
Properties:
Name: 'test'
Body:
swagger: "2.0"
info:
version: "2019-04-11T02:29:18Z"
title: "Test"
basePath: !Ref "testEnv"
schemes:
- "https"
paths:
/admin/login:
post:
consumes:
- "application/json"
produces:
- "application/json"
responses:
'200':
description: "200 response"
schema:
$ref: "#/definitions/Empty"
x-amazon-apigateway-integration:
#uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${stageVariables.adminLogin}/invocations"
uri: !Join [
'', [
'arn:',
'aws:',
'apigateway:',
!Ref "AWS::Region",
':lambda:',
'path/2015-03-31/functions/',
'${stageVariables.adminLogin}',
'/invocations'
]
]
responses:
default:
statusCode: "200"
passthroughBehavior: "when_no_templates"
httpMethod: "POST"
contentHandling: "CONVERT_TO_TEXT"
type: "aws_proxy"
当我运行cloudformation模板时,出现以下错误-
Errors found during import: Unable to put integration on 'POST' for resource at path '/admin/login': Invalid lambda function
(Service: AmazonApiGateway;
Status Code: 400;
Error Code: BadRequestException;
问题完全在于uri
属性,
我两个都试过了-
uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${stageVariables.adminLogin}/invocations"
和
uri: !Join ['', ['arn:','aws:','apigateway:',!Ref "AWS::Region",':lambda:','path/2015-03-31/functions/','${!stageVariables.adminLogin}','/invocations']]
参考-
应该使用Lambda ARN(而不仅仅是Lambda函数名)提到Lambda函数
前任:
uri: "arn:aws:apigateway:REGION:lambda:path/2015-03-31/functions/arn:aws:lambda:REGION:ACCOUNTID:function:dev_adminLogin/invocations"
把它放在云层中,如下所示应该可以工作
uri: !Join
- ''
- - 'arn:aws:apigateway:'
- !Ref "AWS::Region"
- ':lambda:path/2015-03-31/functions/arn:aws:lambda:'
- !Ref "AWS::Region"
- ':'
- !Ref "AWS::AccountId"
- ':function:${stageVariables.adminLogin}/invocations'
还要记住添加lambda权限(对于dev_adminLogin和stage_adminLogin),否则apigateway将无法调用lambda,并将收到5XX错误
使用CLI:
aws lambda add-permission --function-name "arn:aws:lambda:REGION:ACCOUNTID:function:dev_adminLogin" --source-arn "arn:aws:execute-api:REGION:ACCOUNTID:API_ID/*/POST/admin/login" --principal apigateway.amazonaws.com --statement-id stmt1 --action lambda:InvokeFunction
aws lambda add-permission --function-name "arn:aws:lambda:REGION:ACCOUNTID:function:stage_adminLogin" --source-arn "arn:aws:execute-api:REGION:ACCOUNTID:API_ID/*/POST/admin/login" --principal apigateway.amazonaws.com --statement-id stmt2 --action lambda:InvokeFunction
参考:https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html
我们正在尝试从C#Windows服务调用AWS API网关来执行后台作业。哪个应该触发API网关定期初始化请求? 我们使用RestSharp调用APIendpoint,该类称为AwsAuthenticator,它继承自RestSharp.Authenticators.IAAuthenticator。但当我们调用API Gateway时,收到的错误是“我们计算的请求签名与您提供的签名不匹配。请检查您
当我使用spring cloud gateway集成spring cloud sleuth时,我发现性能比单独使用spring cloud gateway慢得多。是否有优化方案? 机器配置:6芯,16g Spring云网关:5331.9 tps Spring云网关Spring云侦探:4119.47 tps “Spring云网关”比“Spring云网关Spring云侦探”慢约1000-2000tps
一般来说,对于CDK实现来说,属性“目前不支持AWS云形成”是什么意思,具体来说: Cognito Userpool Lambda配置的CloudFormation属性中显示:CustomEmailSender-AWS CloudFormation当前不支持。https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-pro
我计划将Razorpay支付网关集成到我的客户网站中,该网站已在WordPress中开发,其中的场景如下。 用户将填写他的需求查询表。 然后根据客户的要求,业主将回复成本和一些代码给客户(通过移动/电子邮件通信)。 客户将在网站的支付页面提交表单(姓名,金额,代码为备注和电子邮件ID),该表单将重定向到支付网关页面。 在WordPress网站上,该插件(Razorpay Quick Payment
我有以下的云形成模板片段。整个模板创建了ECS法门集群以及所有资源。但是现在,我面临着法门服务和任务定义的问题。 模板的服务部分如下所示: 服务: 任务定义如下: 任务定义: 我知道,fargate服务和任务定义在集群中是相互关联的。但问题是,如何使用模板建立这种关系。 我收到以下失败事件: 任务定义中不存在容器abc服务开发人员。(服务:AmazonECS;状态代码:400;错误代码:Inval
文档在控制台中的操作非常清楚,https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html,但在CDK中复制真的很痛苦。 我的问题是如何在CDK中创建一个以s3(中间没有lambda)为支持的RESTAPI,或者至少如何创建apigateway。AWS整合