我正试图将OpenApi规范包含到我的AWS::Serverless::Api
DefinitionBody
中,如下所示:
MyApi:
Type: "AWS::Serverless::Api"
Properties:
StageName: 'dev'
Domain:
DomainName: 'mydomain.com'
CertificateArn: 'my-arn'
EndpointConfiguration: REGIONAL
Route53:
HostedZoneId: 'HOSTEDZONEID'
BasePath:
- /api
DefinitionBody:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
Location: !Sub 'open-api.yml'
我使用Fn:Transform
来确保我的速记符号得到评估。我在open-api.yml
中使用了一些AWS API网关扩展,如下所示:
...
x-amazon-apigateway-integration:
uri: !Sub 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${FunctionName}/invocations'
responses:
default:
statusCode: "200"
passthroughBehavior: "when_no_templates"
httpMethod: "GET"
type: "aws_proxy"
当我运行sam deploy --debug
时,我得到以下错误:
转换AWS::Include失败,原因是:指定的S3对象的内容应该是有效的Yaml/JSON
您之所以出现此错误,是因为您在YAML代码段中使用了简写符号。在撰写本文时,不支持通过AWS::Include
转换包含的YAML片段的速记符号。
这意味着:
uri: !Sub 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${FunctionName}/invocations'
你必须这样做:
uri:
Fn::Sub:
- 'arn:aws:apigateway:${AWSRegion}:lambda:path/2015-03-31/functions/${FunctionArn}/invocations'
- AWSRegion:
Ref: AWS::Region
AWSAccountId:
Ref: AWS::AccountId
FunctionArn:
Fn::GetAtt: [UserServicesFunction, Arn]
有关更多信息,请参阅AWS::Include transform。