【问题标题】:provisioning an EC2 instance with terraform InvalidKeyPair.NotFound使用 terraform InvalidKeyPair.NotFound 配置 EC2 实例
【发布时间】:2021-04-04 13:44:54
【问题描述】:

我为 EC2 创建了一个名为 terraform 的密钥对,将 pem 文件下载到我的 terraform 文件所在的同一目录,我发出 terraform apply 并得到:

aws_instance.windows: Creating...

Error: Error launching source instance: InvalidKeyPair.NotFound: The key pair 'terraform' does not exist
        status code: 400, request id: 1ac563d4-244a-4371-bde7-ee9bcf048830

我通过环境变量指定键值对的名称。这是我用来创建 Windows 虚拟机的块的开始:

resource "aws_instance" "windows" {
  ami                         = data.aws_ami.Windows_2019.image_id
  instance_type               = var.windows_instance_types
  key_name                    = var.key_name
  vpc_security_group_ids      = [aws_security_group.allow_rdp_winrm.id]
  associate_public_ip_address = true
  subnet_id                   = aws_subnet.subnet1.id
  get_password_data           = "true"

  user_data = file("scripts/user_data.txt")

显然我做错了什么,我是否需要告诉 terraform 然后密钥对驻留在哪个 aws 区域?

【问题讨论】:

  • 您是否在 AWS 控制台上创建了密钥,下载 .pem 文件?
  • 你的密钥对其实叫terraform?

标签: amazon-ec2 terraform


【解决方案1】:

密钥对是区域性的,因此如果您在一个区域创建它们,它们在另一个区域不可用。

Terraform 将始终尝试在您告诉它运行的区域中查找和使用密钥,如果该密钥不存在,AWS 将报告此错误。

Terraform 也不喜欢在带外创建事物并且您可能会遇到复杂情况。使用 terraform 创建密钥对也更加简洁,您可以将其引用为 Atul has posted in his answer

您也可以将密钥导入 Terraform 或使用 Terraform 的数据源来搜索和查找密钥作为替代方案,但这些有点高级,尤其是在您开始使用 Terraform 时。

【讨论】:

  • 我是否需要告诉 terraform 密钥所在的区域?
  • 我认为确实如此,我认为这是我的问题。
  • 你需要告诉 terraform 它需要在哪个区域运行,因此它会从该区域获取密钥。
  • 这是对我有用的修复程序,今天早上测试了这个问题,您能否将其作为答案进行回复,以便您获得声誉积分。
  • 是的,添加了更多细节@ChrisAdkin
【解决方案2】:

您需要先创建一个密钥对才能使用它。

resource "aws_key_pair" "my_key_pair" {
  key_name   = var.key_name
  public_key = file("${abspath(path.cwd)}/my-key.pub")
}

现在使用密钥作为

resource "aws_instance" "windows" {
  ami                         = data.aws_ami.Windows_2019.image_id
  instance_type               = var.windows_instance_types
  key_name                    = aws_key_pair.my_key_pair.key_name

【讨论】:

  • 在 OP 的情况下,已经创建了密钥。虽然在 terraform 中创建整个东西很不错 - 但不是必须使用 Terraform 本身来创建它
【解决方案3】:

我只会直接提供与您的错误消息相关的答案,因为这个问题首先出现在 Bing 搜索中。

数据源文档没有提到密钥对。它可能来自实例可用区。

data "aws_key_pair" "example" {
  key_name = "terraform"
  filter {
    name   = "tag:Component"
    values = ["web"]
  }
}

resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  key_name      = data.aws_key_pair.example.key_name
  instance_type = "t3.micro"

  tags = {
    Name = "HelloWorld"
  }
}

实例资源声明:https://registry.terraform.io/providers/hashicorp%20%20/aws/latest/docs/resources/instance

AWS 密钥对数据源:https://registry.terraform.io/providers/hashicorp%20%20/aws/latest/docs/data-sources/key_pair

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2021-04-19
    • 2020-03-10
    • 2019-05-07
    • 2015-05-03
    • 2018-11-17
    • 2023-04-02
    相关资源
    最近更新 更多