Команда Terraform для вывода списка существующих ресурсов AWS как Hello World - PullRequest
2 голосов
/ 10 июня 2019

У меня на компьютере Windows установлен AWS CLI, и выполнение этой команды «работает» точно так, как я хочу.

aws ec2 describe-images

Я получаю следующий вывод, который я и хочу видеть, потому что, хотя у меня есть доступ к AWS через мою корпорацию (например, для проверки кода в CodeCommit), я вижу в веб-консоли AWS для EC2, что я не вижу У вас нет прав для отображения запущенных экземпляров:

An error occurred (UnauthorizedOperation) when calling the DescribeImages operation: You are not authorized to perform this operation.

Я также установил файл terraform.exe на свой компьютер и создал файл "example.tf", который содержит следующее:

provider "aws" {
  region     = "us-east-1"
}

Я бы хотел выполнить какую-то команду Terraform, которая выкрикивала бы на меня, объясняя, что моей учетной записи AWS не разрешено перечислять экземпляры Amazon.

Большинство Hello World примеров включают использование terraform plan против resource для «почти записи» против AWS.

Однако лично мне всегда легче, зная, что все ведет себя так, как ожидалось, с чем-то более «по-настоящему доступным только для чтения». Таким образом, я действительно знаю , что поездка в оба конца сработала, но я не изменил ни одного состояния своей корпорации.

В Интернете есть куча материала об "источниках данных" и их разновидностях "aws_ami" или "aws_instances", но я не могу найти ничего, что подсказывало бы мне, как на самом деле использовать с Команда Terraform для простого взаимодействия print() -типа (очевидно, что, скажем, «ресурсы» идут с командами «terraform plan» и «terraform apply») .

Могу ли я что-то сделать с помощью команд Terraform, чтобы "hello world" попытаться перечислить все серверы EC2 моей организации и, соответственно, посмотреть, как AWS попросит меня отключиться, потому что я не авторизован?

1 Ответ

3 голосов
/ 10 июня 2019

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

data "aws_instances" "test" {
  instance_tags = {
    Role = "HardWorker"
  }

  filter {
    name   = "instance.group-id"
    values = ["sg-12345678"]
  }

  instance_state_names = ["running", "stopped"]
}

Это попытается выполнить действие чтения со списком ваших экземпляров EC2, обозначенных фильтром, который вы установили в конфигурации.При этом также будет использоваться IAM, связанный с пользователем Terraform, с которым вы выполняете terraform plan.Это приведет к ошибке, которую вы описали в связи с отсутствием авторизации, что является вашей заявленной целью.Вам следует изменить filter, чтобы указать на экземпляры EC2 вашей организации.

...