问题描述
由于 Cloudfront 的 https 证书只能在 us-east-1
中创建,而我的整个堆栈都是在 eu-west-1
中创建的,因此我想在 us-east-1
中创建一个包含 ACM 证书的堆栈,然后在 eu-west-1
的堆栈中使用该证书。
唯一的问题是,我如何在不对其进行硬编码的情况下引用该证书,因为我无法ImportValue
在其他地区输出。
例如
distribution:
Type: AWS::CloudFront::distribution
Properties:
distributionConfig:
Origins:
- DomainName: !GetAtt S3Bucket.RegionalDomainName
Id: ****
CustomOriginConfig:
HTTPPort: '80'
HTTPSPort: '443'
OriginProtocolPolicy: https-only
DefaultRootObject: 'index.html'
Enabled: true
Aliases:
- 'bla.bla.com'
DefaultCacheBehavior:
TargetoriginId: '*-origin'
AllowedMethods:
- GET
- HEAD
ViewerProtocolPolicy: redirect-to-https
CachePolicyId: '658327ea-f89d-4fab-a63d-7e88639e58f6'
ViewerCertificate:
AcmCertificateArn: !ImportValue ****
SslSupportMethod: sni-only
当我在 AcmCertificateArn
中部署它时,我需要在 eu-west-1
行上放什么?
解决方法
正如您所指出的,您不能在不同区域的堆栈之间进行跨区域导出/导入引用。在这种情况下,您通常会将证书 ARN 作为输入参数提供给 eu-west-1
中的堆栈。
其他选项将涉及使用 SSM parameters 动态引用来传递证书的 ARN 值。对于全自动解决方案,您需要在 eu-west-1
中以 lambda 函数的形式开发 custom resource。该函数将在 us-east-1
中的堆栈中查询其输出中的 arn,并将 arn 返回到 eu-west-1
中的堆栈。