본문 바로가기

aws/EC2

ec2 - AMI 이미지 생성 및 사용하기

aws ec2 instance를 사용하다 보면 "현재까지의 instance 상태"와 똑같이 

다른 ec2 instance를 만들어야하는 경우가 있습니다. 

또는 현재 상태를 저장해두어야 하는 백업이 필요한 경우도 있습니다. 

 

aws ec2 instance는 가상 이미지를 기반으로 computing을 제공하기 때문에 

그 가상의 이미지의 상태를 저장하여 이식하고 재사용할 수 있습니다. 

 

저같은 경우에도 같은 세팅으로 test 환경, QC 환경, production 환경을 구성할 때 

test환경의 이미지를 그대로 AMI로 만들어 모든 환경에 배포를 한 적이 있습니다. 

 

또는 autoscaling을 사용할 경우 autoscaling group을 구성할 때 현재 존재하는 AMI를 기반으로 

autoscaling group을 생성하기 때문에 세팅을 갖춰놓은 AMI를 생성하는 것은 필수입니다. 

 

이 밖에도 여러가지 쓰임새가 있을 것이지만 AMI의 용도를 제가 사용해본 기준으로 정리하자면 

다음과 같이 두가지가 있을 것 같습니다. 

 

1. 같은 세팅을 가지고 있는 여러개의 stage를 만들 경우 

2. autoscaling group을 생성하는 경우

 

그럼 이제부터 간단하게 AMI를 생성하는 방법을 알아보겠습니다. 

"test"라는 Tag를 가진 ec2 instance를 하나 생성하겠습니다. 

ec2 instance 생성하고 접속하는 방법을 아직 모르신다면 아래 링크를 참조해주세요.

ec2 - aws ec2 만들기(1)

ec2 - aws ec2 만들기 "putty 접속"(2)

 

ec2 instance를 생성하였다면 instance에 접속하여 

docker를 실행해보겠습니다. 

docker 설치하기

 

docker를 설치했다면 간단하게 docker를 사용해 database를 실행해보겠습니다. 

ubuntu@ip-172-31-40-120:~$ docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mysql:8.0.19
Unable to find image 'mysql:8.0.19' locally
8.0.19: Pulling from library/mysql
c499e6d256d6: Pull complete
22c4cdf4ea75: Pull complete
6ff5091a5a30: Pull complete
2fd3d1af9403: Pull complete
0d9d26127d1d: Pull complete
54a67d4e7579: Pull complete
fe989230d866: Pull complete
3a808704d40c: Pull complete
826517d07519: Pull complete
69cd125db928: Pull complete
b5c43b8c2879: Pull complete
1811572b5ea5: Pull complete
Digest: sha256:b69d0b62d02ee1eba8c7aeb32eba1bb678b6cfa4ccfb211a5d7931c7755dc4a8
Status: Downloaded newer image for mysql:8.0.19
a3f2d3619382188ae7ec4d8b971cddac5a04fb6df439c3b9065db1f840032043
ubuntu@ip-172-31-40-120:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
a3f2d3619382        mysql:8.0.19        "docker-entrypoint.s…"   26 seconds ago      Up 24 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

 

docker를 사용하여 database를 띄워보았습니다. 이제 docker가 실행되고 있는 상태로 

AMI 이미지를 만들어 보겠습니다. 

 

aws ec2 대시보드에서 좌측에 "인스턴스"를 클릭하고 생성한 instance에서 

마우스 우측 클릭을 하면 위와 같이 여러가지 가능한 작업들이 보입니다. 

여기서 "이미지 > 이미지 생성"을 클릭합니다. 

 

그러면 위와같이 팝업창이 뜨게 됩니다. 

팝업창에서 이름과 설명을 적어주고 "재부팅 안함"을 선택한 후

"이미지 생성" 버튼을 클릭합니다. 

 

 

 

생성된 이미지를 확인하려면 좌측에 "이미지 > AMI" 버튼을 클릭하여 확인할 수 있습니다. 

이제 생성된 이미지를 가지고 새로운 ec2 instance를 만들어

위에서 실행해두었던 docker mysql이 동작을 하는지 확인을 해보겠습니다. 

 

새로 만든 이미지를 가지고 ec2를 생성합니다. 

기존의 ec2 instance를 생성하는 방법과 동일하지만 한가지 다른 점이 있습니다.

aws에서 제공하는 이미지를 사용하는 것이 아니라 직접 생성한 이미지를 사용하는 것입니다. 

 

ec2 instance를 생성하는 과정에서 첫번째 "AMI 선택" 화면입니다. 

여기서 처음 ec2 instance를 생성했을 때에는 "ubuntu linux"를 선택 했다면 이번에는 

"나의 AMI"로 들어가면 방금 생성한 AMI를 찾아볼 수 있습니다. 

이 이미지를 선택하여 다른 ec2 instance와 똑같이 생성합니다. 

 

ubuntu@ip-172-31-46-59:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ubuntu@ip-172-31-46-59:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
5222f600b00a        mysql:8.0.19        "docker-entrypoint.s…"   30 minutes ago      Exited (0) 22 minutes ago                       mysql
ubuntu@ip-172-31-46-59:~$ docker start mysql
mysql
ubuntu@ip-172-31-46-59:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
5222f600b00a        mysql:8.0.19        "docker-entrypoint.s…"   33 minutes ago      Up 2 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

 

docker가 실행되고 있지는 않고 stop이 되어있지만 docker가 설치되었고

실행했던 mysql이 있다는 것을 볼 수 있습니다.