Amazon web services 在其他区域部署AWS-CDK堆栈

Amazon web services 在其他区域部署AWS-CDK堆栈,amazon-web-services,amazon-s3,amazon-cloudformation,aws-cdk,aws-regions,Amazon Web Services,Amazon S3,Amazon Cloudformation,Aws Cdk,Aws Regions,基本上,我有一个简单的堆栈(Virginia),其中包含如下资源 S3桶(数据在那里) 胶粘桌 胶水作业 现在,我想在欧洲地区部署相同的堆栈,如eu-central-1 当我尝试在eu-central-1上部署aws cdk堆栈时,收到此错误 Bucket_Name already exists Exception 部署堆栈的命令类似于cdk deploy 目标 我想在不删除现有s3存储桶的情况下将现有堆栈部署到另一个区域。 有人能提出解决方案吗?基于: AmazonS3 bucket名称是全

基本上,我有一个简单的堆栈(
Virginia
),其中包含如下资源

  • S3桶(数据在那里)
  • 胶粘桌
  • 胶水作业
  • 现在,我想在
    欧洲
    地区部署相同的堆栈,如
    eu-central-1

    当我尝试在
    eu-central-1
    上部署aws cdk堆栈时,收到此错误

    Bucket_Name already exists Exception
    
    部署堆栈的命令类似于
    cdk deploy

    目标

    我想在不删除现有s3存储桶的情况下将现有堆栈部署到另一个区域。

    有人能提出解决方案吗?

    基于:

    AmazonS3 bucket名称是全局唯一的,并且名称空间由所有AWS帐户共享。这意味着在创建bucket之后,任何AWS区域中的其他AWS帐户都不能使用该bucket的名称,除非删除该bucket

    创建S3 bucket时,
    bucketName
    是可选的。如果省略
    bucketName
    ,将为您生成一个唯一的bucket名称

    cdk项目中的其他资源可以通过引用使用bucket名称

    例如:

    从'@aws cdk/core'导入*作为cdk;
    从“@aws cdk/aws-s3”导入*作为s3;
    从“@aws cdk/aws glue”导入*作为胶水;
    导出类MyStack扩展了cdk.Stack{
    构造函数(作用域:cdk.Construct,id:string,props?:cdk.StackProps){
    超级(范围、id、道具);
    //生成以cdk堆栈名称开头的随机bucket名称
    const bucket=new s3.bucket(这个“MyBucket”);
    const database=new glue.database(这是“MyDatabase”{
    数据库名称:“我的_数据库”
    });
    新的glue.Table(这是“MyTable”{
    数据库:数据库,
    bucket:bucket,//从创建的bucket中获取详细信息
    S3前缀:“我的桌子/”
    //其他表格详细信息。。。
    });
    }
    }
    
    基于:

    AmazonS3 bucket名称是全局唯一的,并且名称空间由所有AWS帐户共享。这意味着在创建bucket之后,任何AWS区域中的其他AWS帐户都不能使用该bucket的名称,除非删除该bucket

    创建S3 bucket时,
    bucketName
    是可选的。如果省略
    bucketName
    ,将为您生成一个唯一的bucket名称

    cdk项目中的其他资源可以通过引用使用bucket名称

    例如:

    从'@aws cdk/core'导入*作为cdk;
    从“@aws cdk/aws-s3”导入*作为s3;
    从“@aws cdk/aws glue”导入*作为胶水;
    导出类MyStack扩展了cdk.Stack{
    构造函数(作用域:cdk.Construct,id:string,props?:cdk.StackProps){
    超级(范围、id、道具);
    //生成以cdk堆栈名称开头的随机bucket名称
    const bucket=new s3.bucket(这个“MyBucket”);
    const database=new glue.database(这是“MyDatabase”{
    数据库名称:“我的_数据库”
    });
    新的glue.Table(这是“MyTable”{
    数据库:数据库,
    bucket:bucket,//从创建的bucket中获取详细信息
    S3前缀:“我的桌子/”
    //其他表格详细信息。。。
    });
    }
    }
    
    我会将区域名称附加到bucket的末尾,这很容易做到,因为AWS已经为此提供了一个环境变量。因此,当命名bucket apppend时,在堆栈中,类似于堆栈末尾的
    stack.of(this.region)
    ,那么bucket名称将是唯一的

    下面是一个typescript CDK示例

    const bucket: Bucket = new Bucket(this, "S3_bucket_name", {
          bucketName: "S3_bucket_name_" + Stack.of(this).region,
        });
        
    

    我会将区域名称附加到bucket的末尾,这很容易做到,因为AWS已经为此提供了一个env var。因此,当命名bucket apppend时,在堆栈中,类似于堆栈末尾的
    stack.of(this.region)
    ,那么bucket名称将是唯一的

    下面是一个typescript CDK示例

    const bucket: Bucket = new Bucket(this, "S3_bucket_name", {
          bucketName: "S3_bucket_name_" + Stack.of(this).region,
        });
        
    

    我认为对于另一个地区,您应该更改cdk代码以将现有bucket_名称导入到您可以在创建S3 bucket的地方共享您的cdk代码吗?我认为对于另一个地区,您应该更改cdk代码以将现有bucket_名称导入到您可以在创建S3 bucket的地方共享您的cdk代码吗?