问题描述
我正在编写一个 Cloudformation 模板来为 Cloudfront 请求 ACM 证书以通过 DNS 获得 SSL
我的模板:
ACMCertificate:
Type: "AWS::CertificateManager::Certificate"
Properties:
DomainName: mywebsite.com
SubjectAlternativeNames:
- www.mywebsite.com
DomainValidationoptions:
- DomainName: mywebsite.com
HostedZoneId: !Ref MyHostedZoneId
- DomainName: www.mywebsite.com
HostedZoneId: !Ref MyHostedZoneId
ValidationMethod: DNS
Outputs:
ACMCertificateArn:
Value: !Ref ACMCertificate
问题:证书是在 AWS 账户所在的区域创建的,在我的例子中是 eu-west-1
。你知道这个证书不能用于SSL,需要在us-east-1
如何在 Cloudformation 模板中指定验证 ACM 证书的区域?
感谢任何建议。
解决方法
您可以指定一个 AWS 区域来创建证书, 特定区域独立于 Cloudformation 堆栈区域,例如可以在 区域 us-east-1(与 cloudfront 一起使用),同时在区域 eu-west-1 中部署堆栈。 通过在 cloudformaion 中使用自定义资源
CreateCertificateCustomResource:
Type: Custom::CreateCertificates
Properties:
ServiceToken: CreateCertificateFunction.Arn
DomainName: yourdomain
ValidationDomain: DomainName
HostedZoneId: yourzoneid
CertificateRegion: yourRegion
IdempotencyToken: CreateCertificateCustomReource
CertificateTafs:
- Key: Name
Value: DomainName
,
遗憾的是,您无法在模板中执行此操作。您必须在 us-east-1
中“手动”创建您的堆栈。这意味着,如果您为此使用 AWS 控制台,则必须在控制台中更改区域,并使用 CloudFormation 控制台在该区域中创建堆栈。
如果您使用 AWS CLI 的 create-stack 命令,您可以添加 --region us-east-1
作为其参数之一。对于 AWS SDK,例如 boto3
,您可以进行类比操作。
您还可以查看 StackSets,它允许您从一个中心位置跨多个帐户和区域部署模板。