우선 프로비저너는 EC2와 같은 머신을 올리고 나서, 그 위에 머신 운영체제에다가 패키지를 설정하고 설치하고, 앱을 배포하고,... 이러한 일련의 과정을 프로비저닝이라고 합니다.
패커와 같은 경우에는, 머신 이미지를 만들기 위한 임시 인스턴스 위에서 프로비저닝 과정이 진행이 됩니다. 그리고 이 프로비저닝 과정에 마치게 되면, 이미지가 완성되는 것이라고 보시면 됩니다.
/versions.pkr.hcl
packer {
required_version = "~> 1.7"
required_plugins {
amazon = {
version = "~> 1.0"
source = "github.com/hashicorp/amazon"
}
}
}
/sources.pkr.hcl
source "amazon-ebs" "ubuntu" {
instance_type = "t2.micro"
region = "ap-northeast-2"
source_ami_filter {
filters = {
name = "ubuntu/images/*ubuntu-focal-20.04-amd64-server-*"
root-device-type = "ebs"
virtualization-type = "hvm"
}
most_recent = true
owners = ["099720109477"]
}
ssh_username = "ubuntu"
}
다음과 같이 이번에는 aws-ebs소스를 통해서 ubuntu라는 이름으로 설정을 해보도록 하겠습니다. 그리고 EC2를 만들기 위한 Ubuntu 20.4버전의 이미지를 사용할겁니다.
/main.pkr.hcl
build {
name = "fastcampus-packer"
source "amazon-ebs.ubuntu" {
name = "nginx"
ami_name = "fastcampus-packer-nginx"
}
provisioner "shell" {
inline = [
"sudo apt-get update",
"whoami",
]
}
provisioner "file" {
source = "${path.root}/files/index.html"
destination = "/tmp/index.html"
}
provisioner "shell" {
inline = [
"echo ${source.name} and ${source.type}",
"whoami",
"sudo apt-get install -y nginx",
"sudo cp /tmp/index.html /var/www/html/index.html"
]
}
provisioner "breakpoint" {
disable = false
note = "디버깅용"
}
}
여기서는 provisioner를통해서 local의 index.html을 nginx위에 올렸습니다.
https://www.packer.io/docs/provisioners/shell
Packer by HashiCorp
The shell Packer provisioner provisions machines built by Packer using shell scripts. Shell provisioning is the easiest way to get software installed and configured on a machine.
www.packer.io
provisioner의 종류는 많으므로 한번 보시면 좋을것 같습니다. 그리고 맨 마지막에 breakpoint를 통해서 EC2인스턴스를 중지하기 이전에 한번 공인 IP로 nginx이 잘 provisioning되어 있는지 확인해 볼겁니다.
빌드하면
SSH에 잘 접속했고
ㄷ다음과 같이 source.name, source.type과 whoami에 대한 결과와 ./files/index.html을 /tmp/index.html로 이동하라는 file provisioner가 잘 동작하는 것을 보실 수 있습니다.
/files/index.html
<h1>
Hello fastcampus!!
</h1>
이제 새로 만들어진 EC2의 인바운드 규칙을 HTTP에 대해서 열어주고
접속하면 정상 작동하는 것을 보실 수 있습니다. 이제 아무키를 눌러서 이미지를 다시 굽기 시작하면 AMI이미지가 잘 만들어질겁니다.
'DevOps > AWS Architecture' 카테고리의 다른 글
[ DevOps ] - (패커를 이용한 머신 이미지 관리) - 후 처리기 (Post-processor) (0) | 2022.08.02 |
---|---|
[ DevOps ] - (패커를 이용한 머신 이미지 관리) - 데이터 소스 활용 ( Data-source ) (0) | 2022.08.02 |
[ DevOps ] - (패커를 이용한 머신 이미지 관리) - 기초 && 빌더 (0) | 2022.08.02 |
[ DevOps ] - (패커를 이용한 머신 이미지 관리) - 패커 소개 (0) | 2022.08.02 |
[ DevOps ] - (테라폼을 이용한 인프라 관리) 테라폼 terraform_remote_state 데이터소스 활용 (0) | 2022.08.02 |