我正在尝试使用 AWS Transfer 设置具有自定义主机名的 SFTP 服务器。我正在使用 Terraform 管理资源。我目前已启动并运行资源,并且已使用 Terraform 创建 Route53 记录以指向 SFTP 服务器,但 SFTP 仪表板上的自定义主机名条目显示为空白。
当然,当我通过 AWS 控制台手动创建服务器并将 Route53 记录与其关联时,它看起来就像我所期望的那样:
我浏览了 terraform 资源文档,并尝试了解如何通过 aws cli 或 cloudformation 完成它,但我没有任何运气。
我的服务器资源如下所示:
resource "aws_transfer_server" "sftp" {
identity_provider_type = "SERVICE_MANAGED"
logging_role = "${aws_iam_role.logging.arn}"
force_destroy = "false"
tags {
Name = ${local.product}-${terraform.workspace}"
}
}
我的 Route53 记录如下:
resource "aws_route53_record" "dns_record_cname" {
zone_id = "${data.aws_route53_zone.sftp.zone_id}"
name = "${local.product}-${terraform.workspace}"
type = "CNAME"
records = ["${aws_transfer_server.sftp.endpoint}"]
ttl = "300"
}
从功能上来说,我可以继续使用我所拥有的,我可以使用我的 DNS 连接到服务器,但我正在尝试了解完整的情况。
在 AWS,
当您使用 AWS 云开发工具包 (AWS CDK) 或通过 CLI 创建服务器时,如果您希望该服务器具有自定义主机名,则必须添加标签。当您使用控制台创建 Transfer Family 服务器时,标记会自动完成。
因此,您需要能够使用 Terraform 添加这些标签。在 v4.35.0 中,他们添加了对新资源的支持:aws_transfer_tag。
resource "aws_transfer_server" "with_custom_domain" {
# config here
}
resource "aws_transfer_tag" "with_custom_domain_route53_zone_id" {
resource_arn = aws_transfer_server.with_custom_domain.arn
key = "aws:transfer:route53HostedZoneId"
value = "/hostedzone/ABCDE1111222233334444"
}
resource "aws_transfer_tag" "with_custom_domain_name" {
resource_arn = aws_transfer_server.with_custom_domain.arn
key = "aws:transfer:customHostname"
value = "abc.example.com"
}