AWS EC2 CI/CD 구성하기
AWS EC2 CI/CD 환경 구성 관련하여 애기하려고 합니다.
EC2 Jenkins를 구성하면서 CI/CD까지 도입하여 간편하기 쓰기 위함입니다.
Git → S3 → Codedeploy → EC2 반영하는 과정입니다.
Github
- Repository 생성
-
AWS Credentials → Action Secret 값 설정
Action file
과appspec.yml
파일을 생성해주어야 한다.- appspec.yml = codedeploy(S3→ EC2) 어떻게 처리해야 할지 처리하는 설정 값
- 주의 = aws deploy 설정 시 key 값은
./
라는 값 없이 바로 시작하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
name: CI
on:
push:
branches: [ main ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: checkout release
uses: actions/checkout@v3
- name: file -> zip
run: tar cvfz ./baro-jenkins.tar.gz *
- name: AWS configure credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: $
aws-secret-access-key: $
aws-region: ap-northeast-2
- name: upload to S3
run: aws s3 cp --region ap-northeast-2 ./baro-jenkins.tar.gz s3://baro-jenkins-git/
- name: deploy with AWS codeDeploy
run: aws deploy create-deployment
--application-name github-action-baro-jenkins
--deployment-config-name CodeDeployDefault.OneAtATime
--deployment-group-name github-acion-baro-jenkins
--s3-location bucket=baro-jenkins-git,bundleType=tgz,key=baro-jenkins.tar.gz
1
2
3
4
5
6
7
8
9
10
11
12
#appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/jenkins
permissions:
- object: /home/ubuntu/jenkins
owner: ubuntu
group: ubuntu
mode: 755
S3 버킷 설정
- AWS → S3 → Bucket → Create
IAM Role 설정
- IAM → ROLE → Crate role
instance role
codedeploy role
codedeploy
- 연동할 EC2의 Security의 IAM설정을 위에서 해준바와 같이 설정하여 줍니다.
- codedeploy→ getting started → create application
- application name을 원하는대로 설정하여 주고, EC2에 연동할 예정이니 EC2/On-premises를 적용합니다.
- deployment group울 추가하여 줍니다.
- Deployment group name = 원하는 이름
- Service role = 위에서 설정한 Codedeploy Role 설정
- Environment configuration
- EC2 instance 설정
- 별도로 EC2 instance의 Tag을 변경하지 않았다면, Key =
Name
, Value =EC2 instance name
으로 설정하여 줍니다.
- deployment settings = codedeploydefault.allatone
- loadbalancer = 사용 시 체크
EC2 codedeploy agent 설치
1
2
3
4
5
6
7
8
$ sudo apt update
$ sudo apt install ruby-full
$ sudo apt install wget
$ cd ~
$ wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
$ chmod +x ./install
$ sudo ./install auto
$ sudo service codedeploy-agent status
오류 발생 추적 과정 및 원인
- Error :
The CodeDeploy agent did not find an AppSpec file within the unpacked revision directory at revision-relative path \\\"appspec.yml
- 검색 결과
- yaml으로 하면 인식못하여 yml로 설정
- Error :
The specified key does not exist
- 검색 결과 S3 Key가 잘못되거나 yml 파일 설정 값이 오타가 있을것이다라고 하여 찾아보았다.
- S3 Key가 시작되는 값을
./test
으로 설정하였는데 그것이 아닌test
로 설정해야 한다.
1
$ tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log
1
INFO [codedeploy-agent(2612)]: [Aws::CodeDeployCommand::Client 200 0.022738 0 retries] put_host_command_complete(command_status:"Failed",diagnostics:{format:"JSON",payload:"{\"error_code\":5,\"script_name\":\"\",\"message\":\"The specified key does not exist.\",\"log\":\"\"}"},host_command_identifier:"12312==")
- Error :
InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile
- 해결 방안
- 참조 - https://sarc.io/index.php/aws/1327-tip-codedeploy-missing-credentials
1
$ sudo service codedeploy-agent restart
결과
참조
https://blog.bespinglobal.com/post/github-action-으로-ec2-에-배포하기/ https://velog.io/@dnwlsrla40/AWS-CodeDeploy-AWS-CodeDeploy를-이용해-자동화-배포-중-Error-발생