首页 > 解决方案 > 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。

标签: amazon-web-servicesterraformamazon-route53

解决方案


您可以使用外部数据使用自定义资源,如下所示:

data "external" "dns" {
  program = ["${path.module}/dns.sh"]
  query   = {
    region  = "${var.region}"
    profile = "${lower(var.env)}"
    dns  = "dnsname"
  }
}

只需编写一个连接到 route53 区域的 cli dns.sh 即可创建记录。


推荐阅读