无法使用 Sub 函数指定 x-amazon-apigateway-integration uri
Unable to specify x-amazon-apigateway-integration uri with Sub function
我有一个 swagger.yaml 文件,其中包含以下内容:
paths:
/path/endpoint:
post:
...
x-amazon-apigateway-integration:
uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${MyFunction.Arn}/invocations"
当我尝试使用 sam cli 部署它时,我在 CloudFormation 中收到错误 "AWS ARN for integration must contain path or action"。
但是,如果我对 AWS::Region 值和 MyFunction.Arn 进行硬编码,我不会收到错误。
有谁知道为什么 Sub 函数对 uri 不起作用?
是的,在为 swagger yaml 使用 yaml 格式时,您需要像这样格式化您的集成路径:
x-amazon-apigateway-integration:
uri:
Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${MyFunction.Arn}/invocations"
您使用的缩写形式(对于 sub,“!Sub”)会给您带来问题。您需要使用长格式 Fn::Sub 如果您正在使用 SAM,我还建议您查看有关内部函数的 AWS 文档,尤其是将 Sub 与 Imports 结合使用。希望这有帮助。
Shravan 提到了一半的问题。您需要做的另一件事是使用 "DefinitionBody" 和 "Fn::Transform",如下所示,当将您的 swagger 文件添加到您的模板时,否则您的 swagger 文件中的变量将不会被替换。
Resources:
MyApi:
Type: AWS::Serverless::Api
Properties:
Name: my-api
StageName: dev
DefinitionBody:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
Location: s3://my-api/swagger.yaml
仅使用 "DefinitionUri" 指定您的 swagger 文件是行不通的。
# This will cause the variables in your swagger file to not be substituted. You must use the format above to get variables to work in your swagger file.
Resources:
MyApi:
Type: AWS::Serverless::Api
Properties:
Name: my-api
StageName: dev
DefinitionUri: swagger.yaml
不幸的是,这也意味着您需要在部署 SAM 之前指定 swagger 文件的完整 s3 路径并将其上传到 S3。参见:https://github.com/awslabs/serverless-application-model/issues/305
我有一个 swagger.yaml 文件,其中包含以下内容:
paths:
/path/endpoint:
post:
...
x-amazon-apigateway-integration:
uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${MyFunction.Arn}/invocations"
当我尝试使用 sam cli 部署它时,我在 CloudFormation 中收到错误 "AWS ARN for integration must contain path or action"。
但是,如果我对 AWS::Region 值和 MyFunction.Arn 进行硬编码,我不会收到错误。
有谁知道为什么 Sub 函数对 uri 不起作用?
是的,在为 swagger yaml 使用 yaml 格式时,您需要像这样格式化您的集成路径:
x-amazon-apigateway-integration:
uri:
Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${MyFunction.Arn}/invocations"
您使用的缩写形式(对于 sub,“!Sub”)会给您带来问题。您需要使用长格式 Fn::Sub 如果您正在使用 SAM,我还建议您查看有关内部函数的 AWS 文档,尤其是将 Sub 与 Imports 结合使用。希望这有帮助。
Shravan 提到了一半的问题。您需要做的另一件事是使用 "DefinitionBody" 和 "Fn::Transform",如下所示,当将您的 swagger 文件添加到您的模板时,否则您的 swagger 文件中的变量将不会被替换。
Resources:
MyApi:
Type: AWS::Serverless::Api
Properties:
Name: my-api
StageName: dev
DefinitionBody:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
Location: s3://my-api/swagger.yaml
仅使用 "DefinitionUri" 指定您的 swagger 文件是行不通的。
# This will cause the variables in your swagger file to not be substituted. You must use the format above to get variables to work in your swagger file.
Resources:
MyApi:
Type: AWS::Serverless::Api
Properties:
Name: my-api
StageName: dev
DefinitionUri: swagger.yaml
不幸的是,这也意味着您需要在部署 SAM 之前指定 swagger 文件的完整 s3 路径并将其上传到 S3。参见:https://github.com/awslabs/serverless-application-model/issues/305