Home AWS를 사용해 무중단 배포 자동화 환경 구축하기 - 5. AWS 리소스 세팅
Post
Cancel

AWS를 사용해 무중단 배포 자동화 환경 구축하기 - 5. AWS 리소스 세팅

AWS를 사용해 무중단 배포 자동화 환경 구축하기 시리즈

  1. 개요
  2. VPC와 기본 리소스
  3. VPC와 기본 리소스 생성하기
  4. 어플리케이션 구축 및 로드밸런서 적용
  5. AWS 리소스 세팅
  6. CodeDeploy 연동 / 마무리

AWS 리소스 세팅

Auto Scaling 그룹 생성

AWS 리소스 세팅 첫번째 단계로 Auto Scaling 그룹을 생성해 보도록 하겠습니다.

템플릿 만들기

그룹을 생성하기 전에 템플릿을 먼저 만들어야 합니다. 기존의 인스턴스를 종료하고 새롭게 인스턴스를 띄우는 방식을 사용할 것이기 때문에 새롭게 인스턴스가 시작될때 사용될 템플릿입니다.

EC2 콘솔 -> 인스턴스 -> 시작템플릿 -> 시작 템플릿 생성으로 이동하여 생성 화면으로 이동합니다. 이름은 임의로 지정합니다.

auto-deploy-infra-3
auto-deploy-infra-4
auto-deploy-infra-5
auto-deploy-infra-6
auto-deploy-infra-6-2

위와 같이 세팅후에 시작 템플릿을 생성합니다. 가장 중요한것은 마지막 고급 세부정보 부분의 IAM 인스턴스 프로파일사용자 데이터 입니다.

IAM 인스턴스 프로파일AmazonS3FullAccess, AWSCodeDeployRoleAWSCodeDeployFullAccess 정책을 필요로 합니다. 사용자 데이터는 인스턴스가 시작된 후에 codedeploy-agent 를 실행해야 하기 때문에 codedeploy-agent 실행에 필요한 파이썬, 루비등을 스크립트로 설치하고 codedeploy-agent를 실행합니다.

auto-deploy-infra-6-3

1
2
3
4
5
6
7
8
9
10
#!/bin/bash -xe
sudo yum install -y python3
sudo python3 -m pip install --upgrade pip
sudo python3 -m pip install awscli
sudo yum -y install ruby
sudo yum -y install wget
sudo wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
sudo chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent start

위 스크립트에 문제가 발생하시면 #!/bin/bash -xe 에서 -xe를 빼고 진행해 보세요.

Auto Scaling 그룹 생성

다음은 오토 스케일링 그룹을 생성해야 합니다. EC2 콘솔 -> Auto Scaling -> Auto Scaling 그룹 -> 생성 으로 이동하여 그룹을 생성하겠습니다.

auto-deploy-infra-7

방금 만든 템플릿을 시작 템플릿으로 지정합니다.

auto-deploy-infra-8

다음 단계에서는 VPC를 지정하고 가용 영역을 세팅합니다. 물론 가용 영역을 추가할 수 있습니다.

3단계 에서는 로드밸런서를 지정합니다. 만들어둔 로드밸런서와 타겟 그룹이 있기 때문에 그것을 사용하겠습니다. 상태 확인의 경우 기본이 300초로 되어있는데요, 테스트에서는 너무 길기 때문에 30초로 줄여주도록 하겠습니다.

4단계는 그룹 크기 입니다. 원하는 용량, 최소 용량, 최대 용량을 지정할수 있습니다. 테스트기 때문에 모두 한개로 설정하겠습니다. 아래 설정 박스에서는 스케일 in - out할 정책을 지정할 수 있습니다.
auto-deploy-infra-9
auto-deploy-infra-10

5단계, 6단계는 각각 알림, 태그로 필요하신 분들은 설정하시면 됩니다.

결과 확인하기

오토 스케일링 그룹이 잘 생성되었다면 인스턴스가 하나 생성되었을 것입니다. 인스턴스 콘솔로 이동하여 인스턴스가 생성되었는지 확인해 보도록 합시다.

로드밸런서의 대상 그룹에도 생성된 인스턴스가 타겟으로 등록되어있는지 확인해 봅니다.
auto-deploy-infra-11

Health status가 unhealthy로 되어있습니다. 현재 단계에서는 정상적인 흐름입니다. 앞 포스팅에서 설명했다시피 로드밸런서가 대상 그룹의 health status를 검사하기 위해선 미리 지정해둔 경로의 response status code가 200이 떨어져야 합니다. 하지만 우리가 방금 만든 템플릿은 nginx나 다른 웹서버등 로드밸런서의 80포트 요청에 응답할만한 무언가를 설치하지 않았기 때문입니다. 일단 정상이니 다음 단계로 넘어가도록 하겠습니다.

CodeDeploy

무중단 배포는 AWS CodeDeploy를 사용하여 진행합니다. CodeDeploy에 대한 자세한 설명은 이곳 에서 확인하실 수 있습니다.

CodeDeploy 애플리케이션 생성

다음은 CodeDeploy 애플리케이션을 생성해야 합니다. AWS 콘솔에서 CodeDeploy를 검색하여 진입한 후에 좌측 메뉴의 배포 -> 애플리케이션으로 이동후 우측 상단의 애플리케이션 생성 버튼을 눌러 애플리케이션을 생성합니다.

컴퓨팅 플랫폼의 경우 EC2를 사용합니다. 람다나 ECS 컨테이너도 사용하실 수 있습니다.
auto-deploy-infra-1

IAM 역할 생성

다음은 배포 그룹을 생성해야 합니다. 배포 그룹을 생성하기 전에 선행되어야할 작업이 몇가지 있는데요, 먼저 IAM 역할을 생성하도록 하겠습니다.

AWS 콘솔에서 IAM을 검색해 IAM 관리 콘솔로 이동합니다. 그 후 CodeDeploy 서비스를 사용할 수 있도록 권한을 부여하고 역할을 생성합니다.
auto-deploy-infra-2

AutoScalingFullAccessAWSCodeDeployRole 는 미리 정해진 정책을 연결하면 됩니다. 마지막 AmazonAutoScalingPolicy의 경우 개발자가 생성해야 하는 인라인 정책이며, 아래 json을 정책에 붙여넣고 생성하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole",
                "ec2:CreateTags",
                "ec2:RunInstances"
            ],
            "Resource": "*"
        }
    ]
}

배포 그룹 생성

생성한 애플리케이션의 상세화면으로 이동한 후 배포 그룹 생성 페이지로 이동합니다.
auto-deploy-infra-12

위에서 생성한 역할을 서비스 역할로 지정하고 배포 유형은 블루/그린을 선택합니다.
auto-deploy-infra-13

위에서 생성한 Auto Scaling 그룹을 선택합니다.
auto-deploy-infra-14

배포 설정의 경우 트래픽은 즉시 다시 라우팅하고 원본 인스턴스의 즉시종료 여부는 각각의 정책에 맞게 설정하시면 될것 같습니다.
auto-deploy-infra-15

로드밸런서 역시 기존의 로드밸런서를 지정합니다.
auto-deploy-infra-16

무중단 배포에 필요한 1차 AWS 세팅이 완료되었습니다. 추가로 필요한 세팅이나 결과 확인은 이후 Github - CodeDeploy 연동시 진행하겠습니다.

This post is licensed under CC BY 4.0 by the author.

Hibernate @Where

AWS를 사용해 무중단 배포 자동화 환경 구축하기 - 6. CodeDeploy 연동 / 마무리