Packer로 이미지 빌드하기 - Tomcat

empty·2020년 10월 18일
0

Packer

목록 보기
1/1

Packer?

Hashicorp에서 제공하는 Image Builder이다.
해당 툴로 AMI, GCP Image, Docker Image 등의 다양한 이미지를 생성할 수 있다.

현업에서는 Packer와 Ansible을 함께 사용한다고 한다.
파일 형식은 json 형식을 사용하고
packer build 명령어로 빌드를 할 수 있다.

아래의 코드는 Centos7 기반으로 Tomcat과 Java만 설치되어있는 AMI를 생성한다.

Tomcat을 수동으로 설치하였기 때문에(패키지로 설치를 안함) tomcat을 system 서비스에 추가적으로 등록하는 작업을 해주었다.

🔨Create Tomcat Image

tomcat.json

{
    "builders" : [{
        "type": "amazon-ebs",
        "access_key": "XXXXXXXXXXXX",
        "secret_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 
        "ami_name": "Centos7-Tomcat_Installed-v2",
        "instance_type": "t3.small",
        "region": "ap-northeast-2",
        "ssh_username": "centos",
        "source_ami": "ami-00014daafdc4239f4",
        "vpc_id": "vpc-02d8529712a2e1177",
        "subnet_id": "subnet-0d5a8257ba024b683"
    }],
    "provisioners": [{
        "type": "shell",
        "inline": [
            "sudo yum install -y wget",
            "mkdir -p /tmp/lib && cd /tmp/lib",
            "cd /tmp/lib",
            "sudo wget https://download.java.net/java/GA/jdk15/779bf45e88a44cbd9ea6621d33e33db1/36/GPL/openjdk-15_linux-x64_bin.tar.gz",
            "sudo tar xfz openjdk-15_linux-x64_bin.tar.gz -C /usr/local",
            "sudo wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.59/bin/apache-tomcat-8.5.59.tar.gz",
            "sudo tar xfz apache-tomcat-8.5.59.tar.gz -C /usr/local",
            "cd /usr/local",
            "sudo ln -s apache-tomcat-8.5.59/ tomcat",
            "sudo bash -c 'echo \"JAVA_HOME=/usr/local/jdk-15\" >> /etc/profile'",
            "sudo bash -c 'echo \"JRE_HOME=/usr/local/jdk-15\" >> /etc/profile'",
            "sudo bash -c 'echo \"CATALINA_HOME=/usr/local/tomcat\" >> /etc/profile'",
            "sudo bash -c 'echo \"CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar\" >> /etc/profile'",
            "sudo bash -c 'echo \"PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin\" >> /etc/profile'",
            "sudo bash -c 'echo \"export JAVA_HOME CLASSPATH PATH CATALINA_HOME JRE_HOME\" >> /etc/profile'",
            "sudo chown -R centos:centos /usr/local/tomcat/",
            "source /etc/profile"
        ]
    },
    {
        "type": "file",
        "source": "tomcat.service",
        "destination": "~/tomcat.service"
    },
    {
        "type": "shell",
        "inline": [
            "sudo mv /home/centos/tomcat.service /etc/systemd/system/",
            "sudo systemctl enable tomcat.service",
            "sudo systemctl start tomcat.service"
        ]
    }]
}

간략하게 설명하자면
wget으로 java와 tomcat의 압축파일을 다운받고 자바 환경변수 설정을 해준다.
그 후에 tomcat 서비스가 자동으로 실행 되도록 서비스 등록을 해준다.

file에서는 tomcat 서비스 등록에 필요한 파일을 보내는데 /etc/systemd에 direct로 보낼 수 없으므로 (ssh_username 사용자의 권한으로 실행됨) 권한이 있는 디렉터리에 보낸 후 sudo로 다시 보낸다.

tomcat.service

[Unit]
Description=tomcat 9
After=network.target syslog.target

[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/jdk-15"
Environment="CATALINA_HOME=/usr/local/tomcat"
User=root
Group=root
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

tomcat을 서비스로 등록하기 위한 파일이다.

Result

  • packer build로 빌드하게 되면 json에 정의되어 있는 vpc와 subnet을 이용하여 Packer EC2를 생성하게 되고 코드에 오류가 없게되면 이 를 AMI에 저장하고 인스턴스를 종료한다.

  • 성공적으로 생성된 AMI

0개의 댓글