これは私が以前に尋ねた以下の内容の続きです。terraformの外部データを使ってスクリプトを実行するためにvarable.tfを入れる方法
次のように私のテラフォームのdirecotry構造です。
root/
├ main.tf
├ test.sh
├ modules/aws
│ └ ssh.tf/
│ └ variables.tf/
test.sh
#!/bin/sh -xe
echo {\"ip\":\""`curl ipinfo.io/ip`"\"}
main.tf
module "aws" {
source = "./modules/aws"
}
variables.tf
variable ssh_ip_address {
default = "xxx.xx.xx.xx"
}
ssh.tf
resource "aws_security_group" "ssh" {
name = "${var.name}-ssh"
description = "Allow connection by ssh"
vpc_id = "${aws_vpc.main.id}"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["${var.ssh_ip_address}/32"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "${var.name}",
}
}
私はmain.tf
にモジュールのオプションを使用して、モジュール/ AWSディレクトリの下.tfファイルを読み込むと、私は、私の地元のスクリプトを実行したいとテラフォームを走ったパブリックIPを特定し、その結果を使用しますssh.tfファイル
私はローカルスクリプトを実行するためにdata externalオプションを使用しています。
data "external" "example" {
program = ["sh", "test.sh" ]
}
しかし、自分自身のデータ検証では、 データの外部オプションはmain.tf.除いて適切に実行されていません
main.tfで外部データを実行してssh.tfで使用すると、 という値が存在しないため、エラーが発生します。
output 'commandout': unknown resource 'data.external.example' referenced in variable data.external.example.result
エラーが発生したときの設定ファイルは次のとおりです。テラフォームにtf.file最も急速に実行する方法は
main.tf
data "external" "example" {
program = ["sh", "test.sh" ]
}
module "aws" {
source = "./modules/aws"
}
ssh.tf
output "commandout" {
value = "${data.external.example.result}"
}
resource "aws_security_group" "ssh" {
name = "${var.name}-ssh"
description = "Allow connection by ssh"
vpc_id = "${aws_vpc.main.id}"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["${data.external.external.result}/32"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "${var.name}",
}
}
ありますか?
、このような方法がある場合は、私が最初にそれを実行するために、データの外部オプションを使用するようにしたい、とssh.tf
でそれを使用するか、私は特定のへのデータの外部実行結果を入れたいと思いますvar.tfの値
この問題を解決する他の方法がある場合は教えてください。 私の質問をお読みいただきありがとうございます。
あなたのtest.shの内容を教えてください。 –
@AnshuPrateekコメントしていただきありがとうございます。私はそれを加えた。 – sukho