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
相关产品推荐
相关产品推荐

