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

使用AWS CloudFormation创建EC2密钥对失败,求助原因与解决方案

问题原因与解决方法

错误原因

你的问题核心在于CloudFormation创建AWS::EC2::KeyPair资源时,依赖AWS自动生成密钥对的场景下,资源处理程序无法正确完成私钥的返回/校验流程:EC2实际已经成功生成了密钥对,但CloudFormation的资源处理逻辑在后续步骤中出现内部异常,导致标记资源为CREATE_FAILED。后续堆栈回滚尝试删除已存在的密钥对时,同样触发了相同的内部错误,最终导致DELETE_FAILED。

这种情况通常关联以下场景:

  • CloudFormation执行角色缺少获取私钥或执行删除操作的必要权限
  • 当前AWS区域服务临时出现内部故障
  • 未通过PublicKeyMaterial导入公钥,依赖自动生成密钥对的流程存在兼容性问题

解决步骤

1. 手动清理残留密钥对

先登录EC2控制台,找到名称为myKey的密钥对,手动删除它,解决当前堆栈回滚失败的状态。

2. 改用导入公钥的方式创建(推荐)

相比让AWS自动生成密钥对,导入本地生成的公钥更稳定,能避免私钥返回环节的异常。操作流程:

  • 本地生成ed25519密钥对:
    ssh-keygen -t ed25519 -f myKey -N ""
    
  • 打开生成的myKey.pub文件,复制全部公钥内容
  • 修改CloudFormation模板,添加PublicKeyMaterial属性,示例如下:
    AWSTemplateFormatVersion: "2010-09-09"
    Description: A sample template
    Resources:
      MyEC2KeyPair:
        Type: "AWS::EC2::KeyPair"
        Properties:
          KeyName: myKey
          KeyType: ed25519
          PublicKeyMaterial: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI[...] 替换为你的公钥内容"
    

3. 检查CloudFormation执行权限

确保CloudFormation使用的执行角色拥有以下IAM权限:

  • ec2:CreateKeyPair
  • ec2:DeleteKeyPair
  • ec2:DescribeKeyPairs

4. 处理区域临时故障

如果上述操作后仍出现InternalFailure,大概率是当前AWS区域的服务临时故障,可以尝试切换到其他区域重新部署模板,或等待一段时间后重试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:57:52