首页 > 解决方案 > 如何存储 Terraform 提供的新 IP 地址?

问题描述

我在 ec2 实例中使用 terraform 执行云配置,配置是自动化的,而一旦前端向后端发送请求,该过程就会开始。

在后端,我使用的是节点 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 ?

标签: javascriptnode.jsterraform

解决方案


如果我正确理解您的问题,您需要在 nodejs 根据您的 shell 脚本完成最后一步后配置的新 EC2 实例的 IP 地址。您的架构中缺少一些必需的位,基于这些位解决方案可能会发生变化,具有 ASG、附加公共 IP、集群设置等将需要对解决方案进行一些更改。

我可以建议 2 个选项供您探索。使用输出块

选项 1:使用 tf 输出

可能的解决方案是使用 terraform 输出 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 apply”步骤后使用

shell.exec('terraform output private_ip');

选项 2:

使用数据源“aws_instance”

https://www.terraform.io/docs/providers/aws/d/instance.html

您可以稍后随时使用它来使用标签/ID 过滤可用的 aws ec2 实例

这可能不是正确的答案,但会帮助您探索其他可能的选择。


推荐阅读