访问 CDK 堆栈资源

Accessing CDK Stack Resources

使用以下代码创建基本s3资源时

export class Test1Stack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    new s3.Bucket(this, 'sampleBucket', {
      versioned: true,
      removalPolicy: cdk.RemovalPolicy.DESTROY,
      autoDeleteObjects: true
    });
  }
}

Cdk 创建以下资源:

我可以使用 AWS::S3::Bucket AWS::S3::Bucket策略属性

const s3 = new s3.Bucket(.......)

什么对象可以让我访问其余资源,例如,如果我想覆盖 AWS::IAM::Role 的逻辑 ID。

我想我可以创建自己的 AWS::IAM::Role、AWS::Lambda::Function、AWS::CDK::Metadata,这样我就可以使用与 s3 相同的机制来操作和覆盖属性,但这不是我要找的。

我只想在 运行 时间访问其他资源。

我尝试了构造函数中的属性,但没有成功。

我也明白 CDK 不建议覆盖资源。

您可以访问存储桶策略,假设它是自动创建的,并像这样更改其逻辑 ID:

const policy = bucket.policy!;
(policy.node.defaultChild as CfnBucketPolicy).overrideLogicalId("MyBucketPolicy")

至于autoDeleteObjects相关的IAM Role,也是可以的,但是比较脆弱。使用了自定义资源提供程序迷你框架。这意味着 labmda 在使用 autoDeleteObjects.

的给定堆栈中的所有 Buckets 之间共享

不过,仍然可以像这样获取 lambda 本身:

const provider = this.node.findChild('Custom::S3AutoDeleteObjectsCustomResourceProvider') as CustomResourceProvider
const lambda = provider.node.findChild('Handler') as CfnResource