Amazon web services AWS SAM-如何在swagger端点uri上将阶段变量与Fn::Sub组合

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

我们有一个堆栈,它利用另一个堆栈的输出,在一个swagger定义体中使用
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.}
-/调用

感谢您抽出时间给出答案。它有点笨重,但无论如何都能用。我最终修改了您的脚本并使我们的部署工作正常。感谢您花时间给出答案。它有点笨重,但无论如何都能用。我最终修改了您的脚本并使我们的部署工作正常。