从“Permission Denied”到生产:我的 AWS 与 Terraform 之旅

发布: (2025年12月30日 GMT+8 22:58)
4 min read
原文: Dev.to

Source: Dev.to

《Permission Denied》到生产:我的 AWS 与 Terraform 之旅封面图

Zakariyau Mukhtar

从 DigitalOcean 转向 AWS

我在跟随一个课程,该课程使用 DigitalOcean 部署 Java 应用。由于我在尼日利亚,DigitalOcean 不断拒绝我的卡片,导致我陷入僵局。

我没有放弃,而是想起了我的 #30ofAWSTerraform 挑战。AWS 更加复杂,但它是行业领袖。我决定把 DigitalOcean 的 “防火墙” 转换为 AWS 安全组,以获得真实的实践经验。

Source:

1. 使用 Terraform 进行基础设施供应

我的目标是使用基础设施即代码(IaC)来创建一个 EC2 实例。我使用了 aws_instanceaws_key_pair 资源。

挑战:SSH 密钥管理

将公钥作为原始字符串变量传递会导致格式错误。

解决方案

使用 Terraform 的 file() 函数直接从磁盘读取公钥,确保将 Windows 机器上的精确字节发送到 AWS。

resource "aws_key_pair" "my_ssh_key" {
  key_name   = "zacks-key"
  public_key = file("C:/Users/Public/id_aws.pub")
}

Terraform 代码示例

Main.tf – Terraform code block

Main.tf – Additional code block

2. AMI ID 与用户名之争

即使实例已经“running”,我仍然无法 SSH 登录。我一直看到 InvalidAMIID.NotFoundPermission denied (publickey)

经验教训

问题我学到的内容
区域特定性AMI ID 是区域特定的。伦敦地区的 Ubuntu AMI 在北弗吉尼亚 (us-east-1) 是不可用的。
架构重要性t2.micro 需要 x86_64 镜像。使用基于 ARM 的 AMI 会导致 “Not Found” 错误。
默认用户每个操作系统都有自己的默认 SSH 用户:Amazon Linux 为 ec2-user,Ubuntu 为 ubuntu,等等。

3. 部署应用程序(JAR 文件)

一旦我能够通过 SSH 连接到服务器,就需要把 build/libs 目录下的 Java 构件复制到 EC2 实例上。

工具:SCP(安全复制)

scp -i C:\Users\Public\id_aws "C:\Users\...\java-app-1.0-SNAPSHOT.jar" ubuntu@:/home/ubuntu/

构建成功

将防火墙规则转换为安全组

当讲师在 DigitalOcean 添加防火墙规则时,我在 AWS 中通过在 Terraform 中更新 安全组,打开 8080 端口,从而允许流量访问我的 Spring Boot 应用。

4. Linux 用户管理与安全

为提升安全性,我创建了个人用户 zacks

已采取的步骤

  1. 创建用户

    sudo adduser zacks
  2. 授予 sudo 权限

    sudo usermod -aG sudo zacks
  3. 修复 SSH 授权密钥
    我误将密钥文件命名为 Authentication_keys,Linux 需要 authorized_keys。我还纠正了所有权和权限:

    sudo mv /home/zacks/.ssh/Authentication_keys /home/zacks/.ssh/authorized_keys
    sudo chown -R zacks:zacks /home/zacks/.ssh
    sudo chmod 600 /home/zacks/.ssh/authorized_keys

结论

今天是一次故障排除的高级课程。我了解到 DevOps 不仅仅是写代码;更是要具备适应能力。当一个云门关闭时,我使用 Terraform 在 AWS 上打开了一个更好的门。

Java Application started on server (图片占位符 – 用实际 URL 替换)

Infrastructure Diagram

基础设施已上线,JAR 正在运行,“白标错误页”从未如此美观!

Application Page

Back to Blog

相关文章

阅读更多 »