Terraform: источник данных aws_instance не работает - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь работать с источником данных aws_instance. Я создал простую конфигурацию, которая должна создавать экземпляр ec2 и возвращать ip в качестве вывода

variable "default_port" {
  type = string
  default = 8080
}

provider "aws" {
  region = "us-west-2"
  shared_credentials_file = "/Users/kharandziuk/.aws/creds"
  profile                 = "prototyper"
}

resource "aws_instance" "example" {
  ami           = "ami-0994c095691a46fb5"
  instance_type = "t2.small"

  tags = {
    name = "example"
  }
}

data "aws_instances" "test" {
  instance_tags = {
    name = "example"
  }
  instance_state_names = ["pending", "running", "shutting-down", "terminated", "stopping", "stopped"]
}

output "ip" {
  value = data.aws_instances.test.public_ips
}

, но по некоторым причинам я не могу правильно настроить источник данных. Результат:

> terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

data.aws_instances.test: Refreshing state...

Error: Your query returned no results. Please change your search criteria and try again.

  on main.tf line 21, in data "aws_instances" "test":
  21: data "aws_instances" "test" {

как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Вы должны использовать опцию depends_on в data.aws_instances.test.

, например:

data "aws_instances" "test" {
  instance_tags = {
    name = "example"
  }
  instance_state_names = ["pending", "running", "shutting-down", "terminated", "stopping", "stopped"]

  depends_on = [
    "aws_instance.example"
  ]
}

Это означает, что сборка data.aws_instances.test после сборки resource.aws_instance.example.

Иногда нам нужно использовать эту опцию. Из-за зависимостей ресурсов aws.

См .:

Вот документ о depends_on опция.

0 голосов
/ 16 октября 2019

Вам не нужен источник данных здесь. Вы можете получить публичный IP-адрес экземпляра обратно из самого ресурса, упрощая все.

Это должно сделать то же самое:

resource "aws_instance" "example" {
  ami           = "ami-0994c095691a46fb5"
  instance_type = "t2.small"

  tags = {
    name = "example"
  }
}

output "ip" {
  value = aws_instance.example.public_ip
}
...