获得了与 AWS Support 合作的最终工作设置,您可能会感兴趣:
当我们在外部 swagger 模板中引用 cloudformation 资源详细信息时,我们没有获取资源详细信息,因此收到上述错误。例如:“Fn::Sub:arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaFunction.Arn}/invocations”在您尝试时将不起作用使用资源:“LambdaFunction.Arn”(即 CloudFormation 资源)在 swagger 定义中创建 API 网关集成端点 uri。
为了解决这些问题,我在 cloudformation 模板中进行了以下更改:
为了引用 cloudformation 模板中的 swagger 文件,我在 s3 存储桶中上传了 swagger 模板,然后使用了以下定义。我用了 :
ZazzoAPI:
Type: AWS::Serverless::Api
Properties:
StageName: Prod
Variables:
LambdaFunctionName: !Ref LambdaFunction
#Configure API settings and options
MethodSettings: [{
LoggingLevel: "INFO",
MetricsEnabled: True ,
HttpMethod: "GET",
ResourcePath: "/"
}]
DefinitionBody:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
Location: "s3://s3.code-deploy/swagger_SAM.yaml"
AWS::Include 转换允许您创建对 Amazon S3 存储桶中转换片段的引用。它允许在外部 swagger 文件中引用 cloudformation 资源详细信息。有关“AWS::Include”转换的更多详细信息,您可以参考 [1] 中的文档。
然后,我检查了 swagger 模板,可以看到您正在使用速记符号来指定集成 uri。但是,“AWS::Include”目前不支持使用文档 [2] 中提到的 YAML 片段的简写符号。因此,我使用了内部函数“Fn::Sub”,并且能够引用所需的 cloudformation 参数招摇模板。
以前的定义:
uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaFunction.Arn}/invocations”
新定义:
uri:
Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaFunction.Arn}/invocations"
参考:
- https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html
- https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html#aws-包含转换备注
- https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html