AWS CDK在另一个AWS账户中创建Route 53别名

时间:2020-11-04 00:44:25

标签: typescript amazon-cloudfront amazon-route53 aws-cdk

有许多使用部署到同一AWS账户的CDK创建静态站点的示例: https://github.com/aws-samples/aws-cdk-examples/blob/master/typescript/static-site/static-site.ts https://github.com/awslabs/aws-solutions-constructs/blob/master/source/use_cases/aws-s3-static-website/lib/s3-static-site-stack.ts

但是我需要将S3存储桶/ CloudFront分发部署到第一个帐户,并在第二个帐户中部署Route53别名。

尝试的选项:

  1. 嵌套堆栈-不支持多个AWS帐户
  2. 跨堆栈引用-不支持多个AWS帐户
  3. 单独的堆栈-需要一种使用硬编码的CloudFront网址创建Route 53别名的方法。下面的例子

Website.ts

const staticStack = new StaticStack(app, 'StaticStack', {
  env: {
    account: '0123456789',
    region: 'us-east-1',
  }
});

const domainStack = new DomainStack(app, 'DomainStack', {
  env: {
    account: '987654321',
    region: 'us-east-1',
  },
  domainName: 'mydomain.com',
  recordName: 'dev.mydomain.com',
  dnsName: 'https://abcdefghijklmn.cloudfront.net',
});

StaticStack.ts

export class StaticStack extends cdk.Stack {
  public readonly target: RecordTarget;

  constructor(scope: cdk.Construct, id: string, props: WebsiteStackProps) {
    super(scope, id, props);

    const construct = new CloudFrontToS3(this, 'CloudFrontToS3');
  }
}

DomainStack.ts

export class DomainStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props: DomainStackProps) {
    super(scope, id, props);

    const zone = HostedZone.fromLookup(this, 'HostedZone', {
      domainName: props.domainName,
      privateZone: false
    });

    new AaaaRecord(this, 'AaaaRecord', {
      recordName: props.recordName,
      target: RecordTarget.fromAlias({
        bind: (): AliasRecordTargetConfig => ({
          dnsName: props.dnsName,
          hostedZoneId: zone.hostedZoneId,
        }),
      }),
      zone: zone,
    });
  }
}

无法使其正常工作,最好的方法是什么?

0 个答案:

没有答案