在 Terraform 配置中引用现有 EC2 节点的 public IP 地址
Reference an existing EC2 node's public IP-address in Terraform configuration
我有一些 Terraform 提供商,具体取决于现有 EC2 节点的 public IP 地址。我在 中看到您可以 导入 现有节点,方法是设置匹配的资源条目,然后 运行 terraform import
导入它:
terraform import aws_instance.test i-12345678
但是,当我 运行 它(当然是使用正确的实例 ID)时,我得到了这个错误:
Error importing: Provider "kov" depends on non-var "aws_instance.test.0/aws_instance.test.N". Providers for import can currently
only depend on variables or must be hardcoded. You can stop import
from loading configurations by specifying `-config=""`.
上述命令的配置是:
provider "aws" {
# ...
}
resource "aws_instance" "test" {
ami = "ami-blablahblah"
instance_type = "t2.large"
# ...
}
provider "kov" {
host = "${aws_instance.test.public_ip}"
port = 8080
# ...
}
其他提供程序使用该主机和端口来配置连接到它的其他服务器。有什么想法可以让它发挥作用吗?
如果您只想以某种方式引用资源,则不必导入资源。
查看aws_instance
数据源:https://www.terraform.io/docs/providers/aws/d/instance.html
data "aws_instance" "test" {
instance_id = "i-12345678"
}
然后您应该能够从数据源访问 public_ip
。
只是想根据@manojlds 的有用回答进行跟进。工作配置如下所示:
provider "aws" {
# ...
}
data "aws_instance" "test" {
instance_type = "t2.large"
}
provider "kov" {
host = "${data.aws_instance.test.public_ip}"
# ...
}
更好的是,我可以根据其他属性过滤数据源,因此我不必预先知道实例 ID。
我有一些 Terraform 提供商,具体取决于现有 EC2 节点的 public IP 地址。我在 terraform import
导入它:
terraform import aws_instance.test i-12345678
但是,当我 运行 它(当然是使用正确的实例 ID)时,我得到了这个错误:
Error importing: Provider "kov" depends on non-var "aws_instance.test.0/aws_instance.test.N". Providers for import can currently
only depend on variables or must be hardcoded. You can stop import
from loading configurations by specifying `-config=""`.
上述命令的配置是:
provider "aws" {
# ...
}
resource "aws_instance" "test" {
ami = "ami-blablahblah"
instance_type = "t2.large"
# ...
}
provider "kov" {
host = "${aws_instance.test.public_ip}"
port = 8080
# ...
}
其他提供程序使用该主机和端口来配置连接到它的其他服务器。有什么想法可以让它发挥作用吗?
如果您只想以某种方式引用资源,则不必导入资源。
查看aws_instance
数据源:https://www.terraform.io/docs/providers/aws/d/instance.html
data "aws_instance" "test" {
instance_id = "i-12345678"
}
然后您应该能够从数据源访问 public_ip
。
只是想根据@manojlds 的有用回答进行跟进。工作配置如下所示:
provider "aws" {
# ...
}
data "aws_instance" "test" {
instance_type = "t2.large"
}
provider "kov" {
host = "${data.aws_instance.test.public_ip}"
# ...
}
更好的是,我可以根据其他属性过滤数据源,因此我不必预先知道实例 ID。