You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform创建带自动生成密钥对的AWS实例报错咨询

问题解答

1. 当前报错的原因

  • aws_instance的key_name参数要求传入AWS密钥对的名称(比如你定义的myKey),而非完整的公钥内容。你直接把tls_private_key.key1.public_key_openssh这串超长的SSH公钥字符串赋值给它,超出了AWS对key_name参数255字符的长度限制,因此触发InvalidParameterValue错误。

2. 实现需求的正确方式

修正后的完整代码

resource "tls_private_key" "key1" {
  algorithm = "RSA"
  rsa_bits  = 4096
}

resource "aws_key_pair" "key_pair1" {
  key_name   = "myKey"
  public_key = tls_private_key.key1.public_key_openssh
}

resource "aws_instance" "ec2" {
  # 关联AWS密钥对的名称,而非公钥内容
  key_name = aws_key_pair.key_pair1.key_name
  
  # 补充EC2实例必需参数(根据你的环境替换)
  ami           = "ami-xxxxxx" # 替换为你所在区域的合法AMI ID
  instance_type = "t2.micro"
  # 按需添加VPC、子网、安全组等关联配置
}

# 可选:将私钥导出到本地文件(方便后续SSH连接)
resource "local_file" "private_key" {
  content         = tls_private_key.key1.private_key_openssh
  filename        = "./myKey.pem"
  file_permission = "0600" # SSH密钥必须设置严格权限,否则会被拒绝使用
}

核心说明

  • aws_instance的key_name必须指向aws_key_pair的key_name属性,这样AWS才能识别到对应的密钥对。
  • tls_private_key生成的公私钥会自动存储在Terraform状态文件中(再次提醒:此做法仅适合学习场景,生产环境绝对禁止,明文状态文件会暴露私钥)。
  • 可选的local_file资源可以将私钥导出到本地,方便后续SSH连接EC2实例,必须设置0600权限否则SSH会报错。

内容的提问来源于stack exchange,提问作者Gilad Tayeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:26:01