본문 바로가기

AWS - KOR

# 024) AWS CodeDeploy 사용하기

https://aws.amazon.com/ko/codedeploy/

 

AWS CodeDeploy | 소프트웨어 배포 자동화

AWS CodeDeploy는 플랫폼과 언어에 구애를 받지 않고, 모든 애플리케이션과 연동되며, Amazon EC2, AWS Fargate 또는 AWS Lambda에 배포하든 동일한 환경을 제공합니다. 또한, 기존 설정 코드를 쉽게 재사용할

aws.amazon.com

 

CodeDeploy 란?

AWS EC2, Lambda, 온프레미스 인스턴스 등과 같은 컴퓨팅 서비스로

어플리케이션 / 소프트웨어 배포를 자동화하는 완전관리형 배포 서비스 입니다.

Codedeploy.txt
0.00MB

 

1. 역할/정책 생성하기

CodeDeploy 를 위한 역할을 생성 해 줍니다.

 

 

역할의 이름도 설정 해 줍니다.

 

역할 생성 후 정책을 변경해 줍니다.

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "codedeploy.us-east-2.amazonaws.com",
                    "codedeploy.us-east-1.amazonaws.com",
                    "codedeploy.us-west-1.amazonaws.com",
                    "codedeploy.us-west-2.amazonaws.com",
                    "codedeploy.eu-west-3.amazonaws.com",
                    "codedeploy.ca-central-1.amazonaws.com",
                    "codedeploy.eu-west-1.amazonaws.com",
                    "codedeploy.eu-west-2.amazonaws.com",
                    "codedeploy.eu-central-1.amazonaws.com",
                    "codedeploy.ap-east-1.amazonaws.com",
                    "codedeploy.ap-northeast-1.amazonaws.com",
                    "codedeploy.ap-northeast-2.amazonaws.com",
                    "codedeploy.ap-southeast-1.amazonaws.com",
                    "codedeploy.ap-southeast-2.amazonaws.com",
                    "codedeploy.ap-south-1.amazonaws.com",
                    "codedeploy.sa-east-1.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

 

 

정책-정책 생성으로 들어 가 줍니다.

 

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": [
        "arn:aws:s3:::replace-with-your-s3-bucket-name/*",
        "arn:aws:s3:::aws-codedeploy-us-east-2/*",
        "arn:aws:s3:::aws-codedeploy-us-east-1/*",
        "arn:aws:s3:::aws-codedeploy-us-west-1/*",
        "arn:aws:s3:::aws-codedeploy-us-west-2/*",
        "arn:aws:s3:::aws-codedeploy-ca-central-1/*",
        "arn:aws:s3:::aws-codedeploy-eu-west-1/*",
        "arn:aws:s3:::aws-codedeploy-eu-west-2/*",
        "arn:aws:s3:::aws-codedeploy-eu-west-3/*",
        "arn:aws:s3:::aws-codedeploy-eu-central-1/*",
        "arn:aws:s3:::aws-codedeploy-ap-east-1/*",
        "arn:aws:s3:::aws-codedeploy-ap-northeast-1/*",
        "arn:aws:s3:::aws-codedeploy-ap-northeast-2/*",
        "arn:aws:s3:::aws-codedeploy-ap-southeast-1/*",        
        "arn:aws:s3:::aws-codedeploy-ap-southeast-2/*",
        "arn:aws:s3:::aws-codedeploy-ap-south-1/*",
        "arn:aws:s3:::aws-codedeploy-sa-east-1/*"
      ]
    }
  ]
}

 

정책을 다음과 같이 JSON 코드에 설정 해 줍니다.

 

 

정책의 이름을 설정 해 줍니다.

 

 

EC2 에 부여할 역할도 하나 더 생성하러 가 줍니다. 이 역할에 금방 생성한 정책을 추가 해 줄 예정입니다.

 

 

금방 생성한 ec2-codedeploy와 s3FullAccess 를 연결 해 줍니다.

 

 

 

마지막으로 역할의 이름도 설정 해 줍니다.

 

2. 시작 구성 설정하기

Ec2- 시작구성으로 가서 생성 해 줍니다.

여기선 Codedeploy agent 를 위한 설정을 진행 해 줍니다.

 

AMI ID- ami-01711d925a1e4cc3a

구성환경을 다음과같이 꾸며 줍니다.

 

 

Role 을 연결 시켜 줍니다.

 

 

추가 구성환경의 유저데이터에도 명령어를 미리 넣어줍니다.

#!/bin/bash
yum update -y
yum install -y ruby
curl -O https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto

 

원하는 보안그룹과 key 도 설정 해 주면서 마무리 해 줍니다.

 

 

3. Auto Scaling 생성하기

오토 스케일링 그룹을 생성 해 줍니다.

 

 

Asg 의 이름을 설정 해 주고 시작구성으로 변경해서 금방 만든 시작구성을 연결 해 줍니다.

이후 네트워크 설정에서 해당하는 vpc와 가용영역 A/C 로 설정 해 줍니다.

 

 

로드밸런싱 관련 설정을 해 줍니다.

 

 

Asg 타켓그룹 설정과 Health checks 도 이어서 해 줍니다.

 

 

Capacity 설정을 해주고 나머지는 기본값으로 해서 생성을 마무리 해 줍니다.

 

 

3. 코드 소스 설정하기

개발환경 도구로 사용중인 Cloud9 에서 codedeploy 폴더와 index.html 파일을 생성 해 줍니다.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Sample Deployment</title>
  <style>
    body {
      color: #ffffff;
      background-color: #0188cc;
      font-family: Arial, sans-serif;
      font-size: 14px;
    }
    h1 {
      font-size: 500%;
      font-weight: normal;
      margin-bottom: 0;
    }
    h2 {
      font-size: 200%;
      font-weight: normal;
      margin-bottom: 0;
    }
  </style>
</head>
<body>
  <div align="center">
    <h1>Congratulations</h1>
    <h2>This application was deployed using AWS CodeDeploy.</h2>
    <p>For next steps, read the <a href="http://aws.amazon.com/documentation/codedeploy">AWS CodeDeploy Documentation</a>.</p>
  </div>
</body>
</html>

 

 

appspec.yml 파일도 생성해서 코드를 넣어 줍니다.

 

version: 0.0
os: linux
files:
  - source: /index.html
    destination: /var/www/html/
hooks:
  BeforeInstall:
    - location: scripts/install_dependencies
      timeout: 300
      runas: root
    - location: scripts/start_server
      timeout: 300
      runas: root
  ApplicationStop:
    - location: scripts/stop_server
      timeout: 300
      runas: root

 

scripts 디렉토리를 생성한 뒤 명령어로 세개의 파일을 생성해서 코드를 넣어 줍니다.

mkdir scripts
cd scripts
vi install_dependencies
#!/bin/bash
yum install -y httpd

vi start_server
#!/bin/bash
systemctl start httpd

vi stop_server
#!/bin/bash
isExistApp = `pgrep httpd`
if [[ -n $isExistApp ]]; then
     systemctl stop httpd
fi

 

Codedeploy 를 압축파일로 생성 해 주고 확인 해 봅니다.

 

 

Aws s3 cp 명령어로 zip 파일을 s3 버킷으로 이동시켜주고 잘 들어갔는지 확인 해 줍니다.

 

 

4. CodeDeploy

Codedelpy 의 app 을 생성 해 줍니다.

 

 

App 의 이름을 적어주고 ec2/온프레미스 플랫폼으로 생성 해 줍니다.

 

 

App 내부 배포그룹을 생성하러 가 줍니다.

 

해당 이름을 설정 해 주고 미리 생성 해 놓은 codedeploy 의 역할을 지정 시킵니다.

 

환경설정도 마찬가지로 미리 생성해놓은 오토스케일링 그룹과 연결 시켜 줍니다.

 

 

로드밸런싱은 비활성화 해 주었습니다.

 

 

이제 본격적으로 배포를 생성 해 봅니다.

 

 

S3 에 보관해둔 압축파일을 통해 배포를 진행할 예정이기 때문에 주소와 타입을 잘 설정 해 둡니다.

 

 

배포가 완료 되었습니다.

 

 

로드밸런싱의 DNS 이름으로 주소에 접근 해 보겠습니다.

 

 

다음과 같이 APP 화면이 잘 보입니다.

 

+

Html 파일 수정 시 zip 파일을 삭제한 뒤 수정한 파일로

다시 zip 파일을 만들어서 똑같이 s3 에 배포하고 codedeploy 를 배포를 재시작 해주면 됩니다.


# 025) CodePipeline 사용하기

 

# 025) AWS CodePipeline 사용하기

https://aws.amazon.com/ko/codepipeline/ AWS CodePipeline | 지속적 통합 및 지속적 전달 AWS CodePipeline은 특정한 요구에 맞게 손쉽게 확장할 수 있습니다. 사전 구축된 플러그인 또는 자체 사용자 지정 플러..

cloudbim.tistory.com