3 个版本 (破坏性更改)
使用旧的 Rust 2015
0.7.1 | 2019 年 6 月 5 日 |
---|---|
0.6.22 | 2019 年 7 月 5 日 |
0.1.0 | 2019 年 6 月 2 日 |
#2009 in 解析器实现
5 星 & 1 关注者
76KB
2K SLoC
Macrotis
通过 TinyDNS 实现状态化批量 Route53 DNS 管理
用法
macrotis--输入<FILE/DIR> --配置<FILE> [SUBCOMMAND]
子命令
execute
- 计算要进行的更改并发送它们到 Route53noop
- 计算更改并打印出来,但不发送到 R53lint
- 仅验证输入文件并退出
关于
Macrotis 旨在提供 Terraform AWS 模块所缺少的功能——使用简单紧凑的平面文件格式快速和状态化地管理大量 Route53 DNS 记录。未来的更新旨在针对其他云 DNS 提供商,包括 Azure。
状态化?
是的!Macrotis 允许将状态文件存储在本地或 AWS S3 存储桶中(以及未来可能的其他远程存储选项)。这意味着您可以以自动化的方式管理您想要的任意数量的记录,同时还可以有单独的自动化作业来管理特定的记录集。
什么是 TinyDNS?
TinyDNS,也称为 DJBDNS,是一个非常小的 DNS 解析器守护进程,具有简单直接配置风格:每个记录都有一个表示其类型的前缀,以及一些附加数据点,所有这些数据点都由冒号很好地分隔。它非常紧凑,易于使用,并且有很好的文档。
为什么不使用 Terraform?
请不要误会,Terraform 很棒。不幸的是,Route53 模块实际上只适合处理最多几十条 DNS 记录,这些记录通常与由特定 TF 配置管理的任何其他 AWS 资源相关联。如果您试图用它进行批量区域管理,那只会让您感到无尽的挫败,terraform plan
运行可能需要数小时才能完成,而您只能默默地流泪,看着每一条记录一个接一个地下载和比较。真是太糟糕了。
为什么不制作一个替代的 TF 插件呢?
因为 Go 很糟糕。别@我。
配置
默认情况下,Macrotis 会查找工作目录中名为 macrotis.conf
的文件。它是 JSON 格式,看起来像这样
{
"provider": {
"name": (String) A name for the Route53 Provider,
"region": (String) Region for Route53 Zones,
"assume_role": (bool) Whether or not to assume a role,
"role_arn": (String) An IAM ARN for the role to assume
"session_name": (String) An optional session name
},
"statefile": {
"backend": (String) "s3" or "local",
"filename": (String) A filename for local statefile storage,
"bucket": (String) A bucket to store the state in,
"key": (String) The key within the bucket the file will be stored as,
"region": (String) Region for S3 bucket
"tags": {
(String): (String),
optional: tags for tagging the S3 bucket/key
},
"role_arn": (String) An IAM ARN if a role will be assumed for S3
"session_name": (String) An optional session name
},
"zones": [
{
"name": (String) Friendly name for the zone for logging,
"domain": (String) The domain name for the zone (ie 'domain.com')
"id": (String) AWS R53 Zone_ID for the zone
}
]
}
身份验证
Macrotis 期望您已经设置了环境变量 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
。或者 Rusoto 支持的其他默认凭证,我不知道,我没有阅读文档,我是个忙碌的人。
输入文件格式
如前所述,Macrotis 使用 TinyDNS 格式作为其输入文件。以下是一个示例
+foo.domain.com:1.2.3.4:900
=bar.domain.com:1.2.3.5:900
^6.3.2.1.in-addr.arpa:baz.domain.com:300
- 为
foo.domain.com
创建一个指向1.2.3.4
的 'A' 记录,TTL 为900
- 为
bar.domain.com
创建一个指向1.2.3.5
的 'A' 记录,TTL 为900
,并且为5.3.2.1.in-addr.arpa
创建一个指向bar.domain.com
的 'PTR' 记录,TTL 为900
- 为
6.3.2.1.in-addr.arpa
创建一个指向baz.domain.com
的 'PTR' 记录,TTL 为300
Macrotis 目前支持所有 IPv4 TinyDNS 记录格式。没有人使用 IPv6。不,你没有,别撒谎。
要求
- Rust 1.33
- 已安装 LibSSL 开发库
- 具有以下权限的 AWS 用户或角色
- route53:ChangeResourceRecordSets 在
arn:aws:route53:::hostedzone/<zone id>
- route53:ListResourceRecordSets 在
arn:aws:route53:::hostedzone/<zone id>
- s3:GetObject 在
arn:aws:s3:::<bucket>
- 3:在
arn:aws:s3:::<bucket>
上进行 PutObject 操作
- route53:ChangeResourceRecordSets 在
最后更新
2019年7月4日
依赖项
约22MB
约397K SLoC