【问题标题】:aws-cdk rename S3 bucket?aws-cdk 重命名 S3 存储桶?
【发布时间】:2021-09-13 01:01:32
【问题描述】:

我是 aws-cdk 的新手,但很好奇是否可以在创建存储桶后重命名它,这样它就没有 ? 的命名格式?

我试过这个逻辑

const core = require(`@aws-cdk/core`);
const s3 = require(`@aws-cdk/aws-s3`);




class s3Build extends core.Construct {
    constructor(scope, id) {
        super(scope, id) 
        const bucketName = process.env.s3Bucket + `-` + process.env.environment
        console.log(bucketName);

            const bucket = new s3.Bucket(this, bucketName);

            const bucketNameOutput = new s3.CfnBucket(this, `NewName`, {

            });

            bucketNameOutput.overrideLogicalId(`myBucketsNewName`)
           
    }
}



module.exports = {s3Build}

当我运行上述逻辑时,它确实在某种意义上重命名了存储桶,但它仍然保留了原始名称。下面是新的输出:

<stack-name>myBucketsNewName<alpha-numeric-number>

唯一改变的是存储桶名称,但它仍然显示堆栈名称和字母数字编号。

查看下面的文档,我似乎有正确的方法overrideLogicalId,但没有得到我想要的输出。我想要的只是将存储桶名称设为 myBucketsNewName 而没有堆栈名称和字母数字。

我错过了什么吗?

【问题讨论】:

  • 我们无法在创建后更改 S3 存储桶名称。如果这样做,请创建一个新存储桶并移动所有内容。 overrideLogicalId 是您提到的更改 cloudformation 中的逻辑 ID 吗?

标签: aws-cdk aws-cdk-context


【解决方案1】:

我找到了一种使用以下道具值解决障碍的方法。

const bucket = new s3.Bucket(this, bucketName, {
                bucketName: `myBucketsNewName`
            })

当我添加该 bucketName 属性值并通过 cdk 进行部署时,该存储桶被重命名为我在 bucketName 字段中输入的内容。

【讨论】:

  • 仅供参考 - S3 存储桶无法重命名。这样做是从堆栈中删除旧存储桶(同时默认保留它)并创建一个具有指定名称的新空存储桶。
【解决方案2】:

'id' - 即 cdk 构造函数中 this/self 变量之后的字符串,指的是资源的 LogicalID。 LogicalID 是 CloudFormation 用于将 at 模板的给定子部分标识为特定资源,并将该子部分链接到该资源以供将来更新到您的堆栈。

CDK 不建议您设置自己的名称,但正如所指出的,bucketName 属性是可用的。不推荐这样做的原因是因为它削弱了 CDK 的一些功能——即在多个帐户、环境中重新部署整个堆栈的能力,甚至只是在同一个帐户中重新部署以尝试一些不同的事情。由于资源名称在账户中的每个服务必须是唯一的(并且 S3 名称是全球唯一的!)然后通过设置名称,如果不先删除旧存储桶或更改名称,您将无法在其他地方重新创建此堆栈。

如果您要设置存储桶名称,我强烈建议您也设置一个removingPolicy 属性,这样CDK 堆栈可以在存储桶从您的堆栈中删除时将其删除。

【讨论】:

    猜你喜欢
    • 2017-05-21
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多