amazon-web-services - Terraform 在另一个 AWS 账户中使用 Route 53
问题描述
我有一个 terraform 脚本,它部署了一个包含 route53 记录的微服务(我们在这里称之为myservice )。
该脚本在东京地区运行良好,因为该地区拥有myservice所需的所有 AWS 服务。
现在我要将myservice部署到中国宁夏地区的cn-norhthwest-1。
由于AWS中国不存在route53,目前我的解决方案是在普通AWS账户(即包含东京、俄亥俄、俄勒冈……地区的AWS账户)中手动设置中国的myservice的域名。
例如,指向www.myservice.com.cn
一条 CNAME 记录myservice-ningxia-elb-1234567890.cn-northwest-1.elb.amazonaws.com.cn
,这是一个 ELB 在宁夏地区的域名。
如何使用 terraform 自动化此过程?
这是我的文件夹结构:
.
├── environments
│ ├── ningxia
│ │ ├── main.tf
│ │ └── versions.tf
│ └── tokyo
│ ├── main.tf
│ └── versions.tf
└── modules
├── cloud-init.yaml
├── outputs.tf
├── myservice.tf
└── variables.tf
我可以通过运行在东京地区创建myservice
cd environments && \
terraform init && \
terraform apply
这篇文章表明我们可以使用以下代码aws_route53_zone
在区域中创建cn-northwest-1
# configure AWS provider for China region.
provider "aws" {
region = "cn-northwest-1"
access_key = AK
secret_key = SK
endpoints {
route53 = "https://api.route53.cn"
}
}
# create a route 53 pub zone
resource "aws_route53_zone" "test" {
name = "bobtest3.cn"
comment = "try to create a pub zone with terraform in China region v2!"
}
这怎么可能?
我什至在宁夏地区的 AWS 控制台中都找不到 route53。
解决方案
您可以使用外部数据使用自定义资源,如下所示:
data "external" "dns" {
program = ["${path.module}/dns.sh"]
query = {
region = "${var.region}"
profile = "${lower(var.env)}"
dns = "dnsname"
}
}
只需编写一个连接到 route53 区域的 cli dns.sh 即可创建记录。
推荐阅读
- python-3.x - CodeWar 中许多示例测试的一个测试错误
- python - 给定一个 DatetimeIndex 和一组 datetime-aware 记录,如何创建 Pandas DataFrame?
- r - 如何使用 tidyr::unite 函数删除 NA?
- reactjs - 网格之间的额外(不需要的)空间
- reactjs - ReactJS - 为什么我的嵌套元素没有呈现?
- javascript - POST 使用 php 将附加 javascript 中的值提交到 mysql
- php - php while循环只显示数据库中的最后一行
- amazon-web-services - Cloudflare 使用 S3 后端时如何设置默认对象?
- php - php重定向到外部链接时禁止403
- javascript - 使用 fetch api 发布到服务器