繁体   English   中英

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

[英]Deploy AWS-CDK stack on other Regions

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

  1. S3 存储桶(有数据)
  2. Glue_Table
  3. 胶水作业

现在,我想在eu-central-1Europe地区部署相同的堆栈。

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

Bucket_Name already exists Exception

部署堆栈的命令类似于cdk deploy <stack-name>

目标

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

任何人都可以为此提出解决方案吗?

基于文档

Amazon S3 存储桶名称是全球唯一的,并且命名空间由所有 AWS 账户共享。 这意味着创建存储桶后,该存储桶的名称不能被任何 AWS 区域中的另一个 AWS 账户使用,直到该存储桶被删除

创建 S3 存储桶时, bucketName是可选的。 如果您遗漏了bucketName ,将为您生成一个唯一的存储桶名称。

cdk 项目中的其他资源可以通过引用获取存储桶名称。

例子:

import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';
import * as glue from '@aws-cdk/aws-glue';


export class MyStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Generate a random bucket name that starts with your cdk stack name
    const bucket = new s3.Bucket(this, 'MyBucket');

    const database = new glue.Database(this, 'MyDatabase', {
      databaseName: 'my_database'
    });

    new glue.Table(this, 'MyTable', {
      database: database,
      bucket: bucket,  // Takes details from the bucket created
      s3Prefix: 'my-table/'
      // other table details...
    });
  }
}

我会将 append 区域名称放在存储桶的末尾,这可以很容易地完成,因为 AWS 已经为此提供了一个环境变量。 因此,在您的堆栈中,当命名存储桶时,请在其末尾添加类似Stack.of(this).region的内容,然后存储桶名称将是唯一的。

这是一个 typescript CDK 示例

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM