将AWS区域和帐户ID传递给swagger

时间:2017-09-18 15:08:43

标签: amazon-web-services amazon-cloudformation

我使用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无效。一旦删除变量,这就解决了。这里有什么不对?

2 个答案:

答案 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)

此时无法从SAM模板 Passing variables swagger,但您可以将模板文件中的整个swagger文件复制为DefinitionBody,并以与提供的方式相同的方式引用变量招摇定义不是很大

  

SAM模板目前限制为51.2 KB