无法在无服务器yml中访问restApiId和restApiRootResourceId以获取交叉堆栈参考

时间:2019-01-31 06:12:51

标签: amazon-cloudformation serverless-framework

由于遇到200资源错误的问题,因此我找到了一种通过将交叉堆栈引用划分为不同的服务来使用交叉引用的方法。我设法通过使用跨堆栈引用来做到这一点。问题是我无法动态给restApiId和restApiRootResourceId。现在,我将id静态地设置到service-2中。

基本上service-1看起来像

provider:
  name: aws
  runtime: nodejs8.10
  apiGateway:
    restApiId: 
      Ref: ApiGatewayRestApi
    restApiResources:
      Fn::GetAtt:
          - ApiGatewayRestApi
          - RootResourceId
custom:
  stage: "${opt:stage, self:provider.stage}"

resources:
  Resources:
    ApiGatewayRestApi:
      Type: AWS::ApiGateway::RestApi
      Properties:
        Name: ${self:service}-${self:custom.stage}-1

  Outputs:
    ApiGatewayRestApiId:
      Value:
        Ref: ApiGatewayRestApi
      Export:
        Name: ApiGatewayRestApi-restApiId

    ApiGatewayRestApiRootResourceId:
      Value:
         Fn::GetAtt:
          - ApiGatewayRestApi
          - RootResourceId 
      Export:
        Name: ApiGatewayRestApi-rootResourceId

service-2如下所示,

provider:
  name: aws
  runtime: nodejs8.10
  apiGateway-shared:
    restApiId:
      'Fn::ImportValue': ApiGatewayRestApi-restApiId
    restApiRootResourceId:
      'Fn::ImportValue': ApiGatewayRestApi-rootResourceId

作为上述service-2配置,我无法引用ID。 仅供参考:两种服务都在不同的文件中。 那么这种方法怎么了?

1 个答案:

答案 0 :(得分:0)

无服务器有special syntax关于如何访问堆栈输出变量:void PlayClicked(object sender, System.EventArgs e) { CrossMediaManager.Current.PlaybackController.Play(); } 。 请注意,在{cf:stackName.outputKey}部分中可以使用Fn::ImportValue