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
'퍼블릭 클라우드' 카테고리의 다른 글
[aws] 3fs-fuse를 설치하는 방법 (0) | 2020.08.07 |
---|---|
리눅스에서 .ppk 파일을 .pem 파일로 변환 (0) | 2020.06.08 |
Amazon CloudWatch Agent 설치 (0) | 2015.04.09 |
AWS Chatbot을 Slack과 연동하여 알람을 받는 방법 (0) | 2015.03.17 |
AWS CloudFront에서 캐시된 파일을 무효화(Invalidation)하는 방법 (0) | 2015.03.17 |