Terraform命令将现有的AWS资源列出为Hello World

时间:2019-06-10 16:30:09

标签: amazon-web-services amazon-ec2 terraform terraform-provider-aws

我在Windows计算机上安装了AWS CLI,并且完全按照我的意愿运行此命令。“

aws ec2 describe-images

我得到以下输出,正是我想要看到的,因为尽管我可以通过公司访问AWS(例如,将代码检入CodeCommit),但可以在AWS Web控制台中看到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的往返路程有效,但是我没有修改公司的任何状态。

互联网上有很多关于“数据源”及其“ aws_ami”或“ aws_instances”风格的信息,但是我找不到任何能真正告诉我如何使用的方法。。。。。用于简单print()型交互的Terraform命令(显然,“资源”与“ terraform plan”和“ terraform apply”命令一起使用)。。 >

我可以使用Terraform命令来做一些事情来“列出世界”,以尝试列出我组织的所有EC2服务器,并因此看着AWS告诉我,因为我未经授权而蜂拥而至吗?

1 个答案:

答案 0 :(得分:3)

您可以使用data source for AWS instances。您创建类似于以下内容的data源:

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

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

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

这将尝试执行读取操作,列出由您放入配置中的过滤器指定的EC2实例。这还将利用与执行terraform plan的Terraform用户关联的IAM。这将导致您描述的关于缺少授权的错误,这是您声明的目标。您应该修改filter以定位组织的EC2实例。