Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 从没有internet访问的专用子网管理路由器53专用DNS条目_Amazon Web Services_Amazon Route53_Amazon Vpc - Fatal编程技术网

Amazon web services 从没有internet访问的专用子网管理路由器53专用DNS条目

Amazon web services 从没有internet访问的专用子网管理路由器53专用DNS条目,amazon-web-services,amazon-route53,amazon-vpc,Amazon Web Services,Amazon Route53,Amazon Vpc,我目前正在使用Terraform来支撑AWS中的基础设施,作为每个计算实例实例化的一部分,它调用AWS元服务和EC2 API来设置其主机名 在我配置squid代理实例(可能由Ansible处理)之前,任何放置在我的VPC私有子网中的实例都无法访问internet 为了允许VPC中的所有实例与EC2 API对话,我配置了一个VPC端点。不幸的是,没有这样的端点可以与路由53对话。这意味着我无法在创建每个实例时为其设置私有DNS记录 我不确定如何管理每个主机的DNS条目设置。私有子网最终将通过反向代

我目前正在使用Terraform来支撑AWS中的基础设施,作为每个计算实例实例化的一部分,它调用AWS元服务和EC2 API来设置其主机名

在我配置squid代理实例(可能由Ansible处理)之前,任何放置在我的VPC私有子网中的实例都无法访问internet

为了允许VPC中的所有实例与EC2 API对话,我配置了一个VPC端点。不幸的是,没有这样的端点可以与路由53对话。这意味着我无法在创建每个实例时为其设置私有DNS记录

我不确定如何管理每个主机的DNS条目设置。私有子网最终将通过反向代理(squid代理)与internet通信,但我希望避免使反向代理成为初始设置的依赖项

我唯一的想法是使用公共子网中的“配置”实例,私有子网中的每个实例都可以向“配置”实例报告其主机名,然后该实例可以调用Route53 API


值得注意的是,其中一些实例的主机名是动态的,因此不能由Terraform设置

如果我正确理解了您的问题,您想让您使用Terraform创建的EC2实例在R53中注册吗

根据您运行TF的位置,您不能在创建实例的同时创建Route53记录吗?我没有想到您需要互联网访问才能调用AWSAPI来实现这一点,但这可能是错误的


如果您在公共子网的堡垒中运行TF,这会解决问题吗

你可能会用一种更复杂的方法来解决这个问题。Terraform(TF)可以使用您在其他资源中使用的任何资源的数据

resource "aws_instance" "foo" {}
resource "aws_route53_zone" "example_private" {}
可由路由调用引用

resource "aws_route53_record" "foo" {
  zone_id = "${aws_route53_zone.example_private.zone_id}"
  name    = "foo"
  type    = "A"
  ttl     = 300
  record  = [ "${aws_instance.foo.private_ip}" ]
}

这将使用实例foo的私有IP地址在示例_私有域中创建一条记录。此外,您的私有实例将在内部与AWS对话。它不需要访问公共互联网。

最好的办法是通过实例角色或API密钥和用户数据来实现。 使用这个过程,你可以做任何你想做的事情——比如trigger Jenkins,更新任何AWS信息。由于它将是terraform的模板,您可以使用它的变量自定义更多内容

请告诉我进展如何

 #!/bin/bash
export http_proxy=X.X.X.X:3128
export https_proxy=X.X.X.X:3128

# Configure API Keys here if you don't have instance role.

# Gathering information about the instance
AZ=`curl http://169.254.169.254/latest/meta-data/placement/availability-zone`
REGION="`echo \"$AZ\" | sed 's/[a-z]$//'`"
INSTANCEID=`curl http://169.254.169.254/latest/meta-data/instance-id`

# NAME=`curl http://169.254.169.254/latest/meta-data/local-hostname`
NAME = test.example.com

# Setting the hostname of the instance
aws ec2 create-tags --region $REGION --resources $INSTANCEID --tags Key=Name,Value=$NAME

您从哪里运行TF脚本(控制主机)?如果控制主机可以访问R53端点,并且您知道zoneid,请从控制主机创建内部DNS。控制主机必须能够访问EC2端点,否则无法启动实例。它当前正在从我的本地计算机运行