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

Terraform command to list existing AWS resources as a Hello World

我的 Windows 计算机上安装了 AWS CLI,运行 这个命令 "works" 完全符合我的要求。

aws ec2 describe-images

我得到以下输出,这正是我想要看到的,因为虽然我可以通过我的公司访问 AWS(例如,将代码签入 CodeCommit),但我可以在 EC2 的 AWS Web 控制台中看到我无权列出 运行 个实例:

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 执行 "almost-write"。

然而,就个人而言,我总是觉得知道事情按预期表现得更舒服一些 "truly read-only." 这样,我真的 知道 轮- AWS 之旅成功了,但我没有修改我公司的任何状态。

互联网上有很多关于 "data sources" 及其 "aws_ami" 或 "aws_instances" 口味的内容,但我找不到任何告诉我如何真正 与Terraform命令一起使用,以进行简单的print()类型的交互(很明显,比方说,"resources"与"terraform plan" 和 "terraform apply" 命令).

我可以使用 Terraform 命令做些什么来 "hello world" 尝试列出我组织的所有 EC2 服务器,并相应地看到 AWS 告诉我因为我未获得授权而停止工作?

您可以使用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 实例。