我在ec2实例中使用terraform执行云供应,供应是自动化的,而一旦前端向后端发送请求,流程就会启动。
在后端,我使用的是node js,我使用shell脚本并调用terraform 的命令
shell.exec('terraform init');
shell.exec('terraform plan -auto-approve');
shell.exec('terraform apply -auto-approve');
在这之后,云供应发生了,但如何将新实例IP存储在我的后端某处?比方说在MySQL中?
项目文件夹结构如下:
Backend
|...
|
|-src
| |_-index.js
|
|-terraform
| |_main.tf
|
所以,我只是在寻找一种方法,可以将新实例Ip从terraform返回到节点js?
如果我正确理解你的问题,你需要在nodejs根据shell脚本完成最后一步后提供新EC2实例的IP地址。您的体系结构中缺少一些必需的部分,解决方案可能会根据这些部分进行更改,连接ASG、公共IP、集群设置等都需要对解决方案进行一些更改。
我可以建议你探索两个选项。使用输出块到
选项1:使用tf输出
可能的解决方案是使用地形输出https://www.terraform.io/docs/commands/output.html
resource "aws_instance" "web" {
ami = "${data.aws_ami.ubuntu.id}"
instance_type = "t2.micro"
tags = {
Name = "HelloWorld"
}
}
output "private_ip" { value = "${aws_instance.web.private_ip}" }
这将导出EC2实例的ip地址,并且可以在完成";tf应用";使用的步骤
shell.exec('terraform output private_ip');
选项2:
使用数据源";aws_instance">
https://www.terraform.io/docs/providers/aws/d/instance.html
您可以在以后的任何时候使用它来使用标签/ids 过滤可用的aws ec2实例
这可能不是正确的答案,但会帮助你探索其他可能的选择。