概述
靠手工或冗长的启动脚本配置服务器,难以复现相同实例且会累积漂移。Packer 把镜像内容完全代码化,配合 CI 中的校验、构建与启动冒烟测试,产出可版本化、可复现的镜像。
关键步骤
- 编写含源镜像与加固及安装步骤的模板。
- 在每次变更时于 CI 校验并构建。
- 启动镜像并对关键服务做冒烟测试。
- 版本化并发布镜像,由 IaC 引用具体版本。
验证
- 镜像内容完全由代码指定。
- 构建可复现且源镜像已固定。
- 启动后关键服务正常。
- 镜像中不含任何密钥。
注意事项
- 烘焙镜像以构建时间换启动速度,需要流水线让镜像持续跟上补丁。
- 不可变镜像仍需补丁节奏;不重建则会随时间积累漏洞。
适用范围
本条目围绕「用 Packer 构建不可变镜像」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
source "amazon-ebs" "base" {
ami_name = "app-base-{{timestamp}}"
source_ami = var.base_ami
instance_type = "t3.micro"
}
build {
sources = ["source.amazon-ebs.base"]
provisioner "ansible" { playbook_file = "hardening.yml" }
}