본문 바로가기

퍼블릭 클라우드

[aws] AWS CodeDeploy 사용법

728x90

AWS CodeDeploy 사용법

AWS 개발자 도구

코드를 호스팅하고 자동으로 애플리케이션을 AWS로 빌드, 테스트 및 배포합니다.

웹 소스 생성

spring boot 프로젝트 생성

 - vscode spring boot 프로젝트 세팅 및 실행 : https://sangchul.kr/552

appspec.yml 생성

version: 0.0
os: linux
files:
  - source:  /
    destination: /home/ec2-user/build/

 

IAM(Identity and Access Management) Role 생성

ec2 인스턴스에서 사용할 iam role 생성

Identity and Access Management(IAM) > 액세스 관리 > 역할 > 역할 만들기

 

정책 이름

  • AmazonS3FullAccess
  • AWSCodeDeployFullAccess
  • AWSCodeDeployRole
  • CloudWatchLogsFullAccess

 

역할 이름 : BbEC2RoleforAWSCodeDeploy

설명 : Allows EC2 instances to call AWS services on your behalf.

codedeploy에서 사용할 iam role 생성

Identity and Access Management(IAM) > 액세스 관리 > 역할 > 역할 만들기

 

정책 이름

  • AWSCodeDeployRole

 

역할 이름 : BbAWSCodeDeployRole

설명 : Allows CodeDeploy to call AWS services such as Auto Scaling on your behalf.

 

Identity and Access Management(IAM) > 액세스 관리 > 사용자 그룹 > 그룹 생성

- 사용자 그룹 이름 : CodeDeployAgentGroup

권한 > 권한 추가 > 인라인 정책 생성 > JSON

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "autoscaling:*",
                "codedeploy:*",
                "ec2:*",
                "lambda:*",
                "elasticloadbalancing:*",
                "s3:*",
                "cloudwatch:*",
                "logs:*",
                "sns:*"
            ],
            "Resource": "*"
        }
    ]
}

 

- 이름 : CodeDeployAgentGroupPolicy

 

IAM 사용자 생성(배포 계정 생성)

Github Actions에서 S3로 파일 업로드

- 사용자 이름 : githubactionscodedeploy

권한 설정

  • AWSCodeDeployFullAccess
  • AmazonS3FullAccess

 

ec2 인스턴스 생성(또는 기존 인스턴스 사용)

신규 ec2 인스턴스 생성

 

기존 인스턴스에 iam role 추가하기

 

EC2에 CodeDeploy Agent 설치하기

awscli 설치

curl -SsL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install
$ /usr/local/bin/aws --version
aws-cli/2.9.6 Python/3.9.11 Linux/5.10.147-133.644.amzn2.x86_64 exe/x86_64.amzn.2 prompt/off

EC2에 CodeDeploy Agent 설치

aws s3 cp s3://aws-codedeploy-ap-northeast-2/latest/install . --region ap-northeast-2
$ aws s3 cp s3://aws-codedeploy-ap-northeast-2/latest/install . --region ap-northeast-2
download: s3://aws-codedeploy-ap-northeast-2/latest/install to ./install
chmod +x install
./install auto

오류 : ec2에 루비(ruby)가 설치되어 있지 않아 발생한 오류

$ ./install auto
/usr/bin/env: ruby: No such file or directory
yum install -y ruby
./install auto
$ ./install auto     
I, [2022-12-12T07:18:38.854654 #3520]  INFO -- : Starting Ruby version check.
I, [2022-12-12T07:18:38.854923 #3520]  INFO -- : Starting update check.
...
Installed:
  codedeploy-agent.noarch 0:1.4.1-2244                                                                                              

Complete!
I, [2022-12-12T07:18:41.857044 #3520]  INFO -- : Update check complete.
I, [2022-12-12T07:18:41.857138 #3520]  INFO -- : Stopping updater.
service codedeploy-agent status
$ service codedeploy-agent status
The AWS CodeDeploy agent is running as PID 3604

codedeploy-startup.sh 스크립트 생성

 ec2 인스턴스가 부팅하며 자동으로 aws codedeploy agent가 실행되도록 /etc/init.d/에 쉘 스크립트 파일 생성

vim /etc/init.d/codedeploy-startup.sh
#!/bin/bash

echo 'Starting codedeploy-agent' 

sudo service codedeploy-agent restart
chmod +x /etc/init.d/codedeploy-startup.sh

** 사용자 데이터 추가 시

- codeploy user data(사용자 데이터) : https://sangchul.kr/555

#!/bin/bash

yum install -y ruby

yum erase -y codedeploy-agent

### codedeploy agent install
cd /home/ec2-user
curl -O https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install
./install auto

systemctl --now enable codedeploy-agent

 

Amazon S3

s3 버킷 생성

- 버킷 이름 : bb-codedeploydemobucket

웹 소스 압축(zip 압축)

zip aaa.zip demo/*

*** 압축 해제

unzip aaa.zip
unzip aaa.zip -d ./target

s3 버킷으로 웹 소스 업로드

aws s3 cp aaa.zip s3://bb-codedeploydemobucket/

 

AWS CodeDeploy 생성

애플리케이션 가동 시간을 유지하려면 코드 배포를 자동화합니다.

AWS CodeDeploy > 개발자 도구 > CodeDeploy > 애플리케이션 생성

- 애플리케이션 이름 : bb-springboot-application

- 컴퓨팅 플랫폼 : EC2/온프레미스

 

AWS CodeDeploy > 개발자 도구 > CodeDeploy > 애플리케이션 > bb-springboot-application 애플리케이션 > 배포 그룹 생성

 

배포 그룹 이름 : bb-springboot-application-deployment-group

서비스 역할 : BbAWSCodeDeployRole

 

태그 그룹

키 : CodeDeploy

값 : bb-springboot-01

 

배포 생성(배포 만들기)

 

배포 내역

 

ec2 인스턴스

[ec2-user@ip-172-31-95-69 build]$ pwd
/home/ec2-user/build

[ec2-user@ip-172-31-95-69 build]$ ls
HELP.md  appspec.yml  bin  build.gradle  gradle  gradlew  gradlew.bat  settings.gradle  src

 

추가 작업

zbuild.sh 스크립트 생성

vim zbuild.sh
#!/bin/bash

cp appspec.yml build/libs/appspec.yml

./gradlew build

cd build/libs/
zip aaa.zip demo-*-SNAPSHOT.jar appspec.yml

aws s3 cp aaa.zip s3://bb-codedeploydemobucket/aaa.zip

rm -rf aaa.zip

aws deploy create-deployment --application-name bb-springboot-application --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name bb-springboot-application-deployment-group --s3-location bucket=bb-codedeploydemobucket,key=aaa.zip,bundleType=zip
chmod +x zbuild.sh

 

java -jar demo-0.0.1-SNAPSHOT.jar
$ java -jar demo-0.0.1-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.0.0)

2022-12-21T08:49:32.060Z  INFO 4858 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication using Java 19.0.1 with PID 4858 (/home/ec2-user/build/demo-0.0.1-SNAPSHOT.jar started by root in /home/ec2-user/build)
2022-12-21T08:49:32.070Z  INFO 4858 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to 1 default profile: "default"
2022-12-21T08:49:34.869Z  INFO 4858 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-12-21T08:49:34.894Z  INFO 4858 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-12-21T08:49:34.895Z  INFO 4858 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.1]
2022-12-21T08:49:35.177Z  INFO 4858 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-12-21T08:49:35.180Z  INFO 4858 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2957 ms
2022-12-21T08:49:36.602Z  INFO 4858 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2022-12-21T08:49:36.643Z  INFO 4858 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 5.63 seconds (process running for 6.726)

 

참고 URL

- codeploy user data(사용자 데이터) : https://sangchul.kr/555

- Amazon Linux 또는 RHEL용 CodeDeploy 에이전트 설치: https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html

- AppSpec 파일 구조 : https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/reference-appspec-file-structure.html

 

728x90