Amazon web services AWS SAM-如何在swagger端点uri上将阶段变量与Fn::Sub组合
我们有一个堆栈,它利用另一个堆栈的输出,在一个swagger定义体中使用Amazon web services AWS SAM-如何在swagger端点uri上将阶段变量与Fn::Sub组合,amazon-web-services,amazon-cloudformation,sam,Amazon Web Services,Amazon Cloudformation,Sam,我们有一个堆栈,它利用另一个堆栈的输出,在一个swagger定义体中使用Fn::ImportValue进行交叉堆栈引用 注:其他部分用于缩短代码 其中,${OtherStackName}-SampleFunctionName是从其他堆栈导入的函数的名称 现在,我们的问题是我们不能将它放在端点的uri中。Cloudformation在sam部署期间对此表示不满,称${stageVariables.SampleFunctionName}是Fn::Sub中的非法属性 我尝试了几种方法,包括将整个uri
Fn::ImportValue
进行交叉堆栈引用
注:其他部分用于缩短代码
其中,${OtherStackName}-SampleFunctionName
是从其他堆栈导入的函数的名称
现在,我们的问题是我们不能将它放在端点的uri
中。Cloudformation在sam部署期间对此表示不满,称${stageVariables.SampleFunctionName}
是Fn::Sub中的非法属性
我尝试了几种方法,包括将整个uri
放在stage变量本身上,但它仍然没有出现
非常感谢您的想法 SAM CLI的v0.21.0版本支持Fn::Sub。0.21.0以下的版本不支持大多数Cloudformation内部函数 有关详细信息,请查看以下链接: 如果您使用下面提到的版本,您可以尝试使用Fn::Join而不是Fn::Sub作为解决方案
uri: !Join
- ''
- - 'arn:aws:apigateway:'
- !Ref "AWS::Region"
- ':lambda:path/2015-03-31/functions/arn:aws:lambda:'
- !Ref "AWS::Region"
- ':'
- !Ref "AWS::AccountId"
- ':function:${stageVariables.SampleFunctionName}/invocations'
SAM CLI的v0.21.0版本支持Fn::Sub。0.21.0以下的版本不支持大多数Cloudformation内部函数 有关详细信息,请查看以下链接: 如果您使用下面提到的版本,您可以尝试使用Fn::Join而不是Fn::Sub作为解决方案
uri: !Join
- ''
- - 'arn:aws:apigateway:'
- !Ref "AWS::Region"
- ':lambda:path/2015-03-31/functions/arn:aws:lambda:'
- !Ref "AWS::Region"
- ':'
- !Ref "AWS::AccountId"
- ':function:${stageVariables.SampleFunctionName}/invocations'
我是这样做的
x-amazon-apigateway-integration:
uri:
Fn::Join:
- ''
- - Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/
- Fn::ImportValue:
Fn::Sub: ${StackName}-FunctionArn
- /invocations
出于某种原因,速记函数在uri
和${stageVariables.}
中不起作用,在Fn::Sub函数中不起作用
请注意,这仅发生在招摇定义主体内部
我是这样做的
x-amazon-apigateway-integration:
uri:
Fn::Join:
- ''
- - Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/
- Fn::ImportValue:
Fn::Sub: ${StackName}-FunctionArn
- /invocations
出于某种原因,速记函数在uri
和${stageVariables.}
中不起作用,在Fn::Sub函数中不起作用
请注意,这仅发生在招摇定义主体内部
正如Jeff提到的,阶段变量在Fn::子函数中不起作用。但是,如果有人希望在uri字符串中使用Stage变量,下面的代码对我很有用
uri:
Fn::Join:
- ''
- - arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/
- Fn::Sub: ${LambaFunctionResource.Arn}
- :${stageVariables.<stageVariableName>}
- /invocations
uri:
Fn::加入:
- ''
--arn:aws:apigateway:${aws::Region}:lambda:path/2015-03-31/functions/
-Fn::Sub:${LambaFunctionResource.Arn}
-:${stageVariables.}
-/调用
正如Jeff所提到的,阶段变量在Fn::子函数中不起作用。但是,如果有人希望在uri字符串中使用Stage变量,下面的代码对我很有用
uri:
Fn::Join:
- ''
- - arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/
- Fn::Sub: ${LambaFunctionResource.Arn}
- :${stageVariables.<stageVariableName>}
- /invocations
uri:
Fn::加入:
- ''
--arn:aws:apigateway:${aws::Region}:lambda:path/2015-03-31/functions/
-Fn::Sub:${LambaFunctionResource.Arn}
-:${stageVariables.}
-/调用
感谢您抽出时间给出答案。它有点笨重,但无论如何都能用。我最终修改了您的脚本并使我们的部署工作正常。感谢您花时间给出答案。它有点笨重,但无论如何都能用。我最终修改了您的脚本并使我们的部署工作正常。