Amazon ec2 使用Terraform进行配置时,代码如何获取对机器ID的引用(例如数据库机器地址)

Amazon ec2 使用Terraform进行配置时,代码如何获取对机器ID的引用(例如数据库机器地址),amazon-ec2,terraform,Amazon Ec2,Terraform,假设我使用Terraform在AWS内提供两台机器: 运行NodeJS的EC2机器 RDS实例 NodeJS代码如何获取RDS实例的地址?这里有几个选项。最简单的方法是在Route53中为数据库创建一个CNAME记录,然后在应用程序中始终指向该CNAME 基本示例如下所示: resource "aws_db_instance" "mydb" { allocated_storage = 10 engine = "mysql" engine_vers

假设我使用Terraform在AWS内提供两台机器:

  • 运行NodeJS的EC2机器
  • RDS实例

NodeJS代码如何获取RDS实例的地址?

这里有几个选项。最简单的方法是在Route53中为数据库创建一个CNAME记录,然后在应用程序中始终指向该CNAME

基本示例如下所示:

resource "aws_db_instance" "mydb" {
  allocated_storage    = 10
  engine               = "mysql"
  engine_version       = "5.6.17"
  instance_class       = "db.t2.micro"
  name                 = "mydb"
  username             = "foo"
  password             = "bar"
  db_subnet_group_name = "my_database_subnet_group"
  parameter_group_name = "default.mysql5.6"
}

resource "aws_route53_record" "database" {
   zone_id = "${aws_route53_zone.primary.zone_id}"
   name = "database.example.com"
   type = "CNAME"
   ttl = "300"
   records = ["${aws_db_instance.default.endpoint}"]
}
可选选项包括从
aws_db_实例
获取
端点
输出,并在创建实例时将其传递到用户数据脚本中,或将其传递到并使用consu模板控制应用程序使用的配置。

您可以尝试-一种基于地形的轻量级资源调配工具实例中,它能够对地形资源和资源调配相关主机进行清点,并传递所有必要的数据:

$ terrafrom apply # bootstrap infrastructure

$ cat sparrowfile # this scenario
                  # fetches DB address from terraform cache 
                  # and populate configuration file 
                  # at server with node js code:

#!/usr/bin/env perl6

use Sparrowform;

$ sparrowfrom --ssh_private_key=~/.ssh/aws.pem --ssh_user=ec2 # run provision tool

my $rdb-adress; 

for tf-resources() -> $r {
  my $r-id = $r[0]; # resource id
  if ( $r-id 'aws_db_instance.mydb') {
    my $r-data = $r[1];                
    $rdb-address = $r-data<address>;
    last;
  }
}

# For instance, we can 
# Install configuration file
# Next chunk of code will be applied to  
# The server with node-js code: 

template-create '/path/to/config/app.conf', %(
  source => ( slurp 'app.conf.tmpl' ),
  variables => %(
    rdb-address => $rdb-address
  ),
);

# sparrowform --ssh_private_key=~/.ssh/aws.pem --ssh_user=ec2 # run provisioning 
$terrafrom apply#引导基础设施
$cat sparrowfile#此场景
#从terraform缓存获取数据库地址
#并填充配置文件
#在具有节点js代码的服务器上:
#!/usr/bin/env perl6
使用麻雀形;
$sparrowfrom--ssh_private_key=~/.ssh/aws.pem--ssh_user=ec2#运行资源调配工具
我的$rdb地址;
对于tf-resources()->$r{
我的$r-id=$r[0]#资源id
if($r-id'aws\u db\u instance.mydb'){
my$r-data=$r[1];
$rdb地址=$r-data;
最后;
}
}
#例如,我们可以
#安装配置文件
#下一段代码将应用于
#具有节点js代码的服务器:
模板创建'/path/to/config/app.conf',%(
source=>(slurp'app.conf.tmpl'),
变量=>%(
rdb地址=>$rdb地址
),
);
#sparrowform--ssh_private_key=~/.ssh/aws.pem--ssh_user=ec2#运行资源调配

PS.披露-我是工具作者

这是一个新开始用户的好例子,但在这个例子中使用关键字
default
是误导性的。我只是从Terraform的文档中摘取了这些例子,但这是公平的。更新名称您需要花时间阅读terraform中的文档,我是指
一个接一个
。以下是你问题的开始: