我使用AWS SAM定义我的API网关API
ApiGatewayApi:
Type: AWS::Serverless::Api
Properties:
DefinitionUri: swagger.yml
StageName: prod
Variables:
Region: !Ref AWS::Region
AccountId: !Ref AWS::AccountId
Ec2Index: !Ref Ec2Index
AuthLogin: !Ref AuthLogin
Ec2Patch: !Ref Ec2Patch
AutoScalingIndex: !Ref AutoScalingIndex
AutoScalingPatch: !Ref AutoScalingPatch
AutoScalingScale: !Ref AutoScalingScale
在我的招摇文件中:
路径: /认证/会话: 职位: 生产: - application / json X-亚马逊apigateway集成: uri:arn:aws:apigateway:ap-southeast-1:lambda:path / 2015-03-31 / functions / arn:aws:lambda:ap-southeast-1:598545985414:function:$ {stageVariables.AuthLogin} / invocations passthroughBehavior:when_no_match httpMethod:POST 类型:aws_proxy 对策: 200: 描述:App令牌 401: 描述:401 403: 描述:403
AWS CloudFormation错误说
导入过程中发现的错误:无法在路径'/ auth / session'上对资源的'POST'进行集成:Lambda函数ARN必须位于同一帐户中无法在路径'/ autoscaling上为资源'GET'进行集成':Lambda函数ARN必须在同一帐户中无法在路径'/ autoscaling / {groupName}'上为资源'PATCH'集成:Lambda函数ARN必须在同一帐户中无法将集成放在'POST'上以获取资源path'/ autoscaling / {groupName} / scale':Lambda函数ARN必须在同一个帐户中无法在路径'/ ec2'上为资源'GET'进行集成:Lambda函数ARN必须在同一个帐户中无法放置集成路径'/ ec2 / {id}'的资源'PATCH':Lambda函数ARN必须在同一帐户中
好像我的ARN无效。一旦删除变量,这就解决了。这里有什么不对?
答案 0 :(得分:0)
截至目前,swagger不允许在阶段变量中使用AccountId。这是API网关的限制。
你可以通过仅为函数名称使用一个阶段变量来解决这个问题,并将其余部分组合在一起,如下所示:
//does not get passed in. This is just a placeholder for the stage variable
Parameters:
ApiFunctionName:
Type: String
Description: Function name of the api lambda function
Default: ${stageVariables.yourFunctionNameVar}
//in your gateway path
x-amazon-apigateway-integration:
httpMethod: POST
type: aws_proxy
uri:
!Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${ApiFunctionName}/invocations"
答案 1 :(得分:0)
DefinitionBody
,并以与提供的方式相同的方式引用变量招摇定义不是很大。
SAM模板目前限制为51.2 KB