【问题标题】:How to disable the Cross Stack creation of outputs and imports when sharing tokens accross stacks跨堆栈共享令牌时如何禁用输出和导入的跨堆栈创建
【发布时间】:2021-01-19 17:27:02
【问题描述】:

我正在同一个 CDK 项目中处理两个独立的堆栈(称为 A 和 B)。我在堆栈 B 中生成了一个策略,其中包含对堆栈 A 中资源的 ARN 的资源引用。CDK 做了这个聪明的魔术,为每个共享的 arn 创建 CfnOutputs,然后在堆栈 B 中使用 Fn::ImportValue。

堆栈 B 中的示例 TypeScript 代码:

const role = stackA.role;
stackB.permissionsBoundary.addStatements(
        new iam.PolicyStatement({
          resources: [ role.roleArn ],
          actions: [
            'sts:AssumeRole'
          ]
        })
      );

我不希望它这样做。当您事后需要处理堆栈时,它会引起各种悲伤。我只想在堆栈 B 中使用从堆栈 A 中生成的标记中提取的文字字符串。

请告诉我有一种方法可以关闭此功能。这是一个非常非常容易泄漏的抽象,应该是可选的。

堆栈 A 中生成的示例模板:

"ExportsOutputFnGetAttfoo": {
      "Value": {
        "Fn::GetAtt": [
          "bar",
          "Arn"
        ]
      },
      "Export": {
        "Name": "stackA:ExportsOutputFnGetAttfoo"
      }
    }

在堆栈 B 中生成的示例模板:

"Resource": [
  {
    "Fn::ImportValue": "stackA:ExportsOutputFnGetAttfoo"
  }

【问题讨论】:

    标签: amazon-web-services aws-cdk


    【解决方案1】:

    我不相信可以使用

    堆栈 B 中从堆栈 A 中生成的标记中提取的文字字符串。

    因为 ARN 在 CloudFormation 模板生成时是未知的,因为您同时生成了两个堆栈。

    通过 CF 输出进行跨栈资源共享是常用的方法 - https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-crossstackref.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多