使用Ruby AWS SDK为Cloudfront分配创建Route53别名

问题描述:

我试图自动创建由Route53管理的DNS服务的S3支持的CloudFront缓存网站。使用Ruby AWS SDK为Cloudfront分配创建Route53别名

我可以使用静态网站托管创建S3存储桶,并且我知道如何创建CloudFront分配和Route53记录,但创建作为CloudFront分配的别名的Route53记录时,需要提供“托管区域ID“ - Route53接口没有发现问题,但我无法弄清楚如何使用AWS SDK来获取这些信息。

这是我有:

def create_cf(domain) 
    AWS::CloudFront.new.client.create_distribution distribution_config: createOptions(domain) 
end 

def create_r53(cfdistro, domain) 
    target = { 
    hosted_zone_id: cfdistro.id, 
    dns_name: cfdistro.domain_name, 
    evaluate_target_health: false 
    } 
    AWS::Route53.new.hosted_zones[myzone].rrsets.create "#{domain}.", 'A', 
    alias_target: target 
end 

不幸的是,本场idcreate_distribution(或get_distribution)返回是什么CloudFront的控制台显示为分布的ID,而不是什么Route53的控制台显示,当我选择CloudFront分配作为别名目标。我实际上找不到在CloudFront控制台中找到托管区域ID的位置!

好的,这很愚蠢 - 如AWS Route53 documentation中所记录,所有CloudFront分布托管在ID为Z2FDTNDATAQYW2的区域中。

“托管区域ID”(我在进一步阅读后发现)是Route53区域的加密标识符。亚马逊公司在其文档中发布了公有AWS域(例如cloudfront.net)的Route53区域ID,完全是为了这个目的。

做我上面的代码应该是:

def create_r53(cfdistro, domain) 
    target = { 
    hosted_zone_id: 'Z2FDTNDATAQYW2', 
    dns_name: cfdistro.domain_name, 
    evaluate_target_health: false 
    } 
    AWS::Route53.new.hosted_zones[myzone].rrsets.create "#{domain}.", 'A', 
    alias_target: target 
end