728x90
반응형
SMALL
AWS CodeDeploy & AWS EC2 연동하기
배포 시스템인 codedeploy를 통해 ec2 instance에 배포를 가능하게 하는 작업을 설정한다.
EC2 설정
둘 사이의 접근을 가능하게 위해서는 AWS IAM에서 ‘역할 만들기’를 한다. 사용자 등록이 AWS 외부에서부터의 접근을 허가하는 것이라면, 역할은 AWS 내에서의 접근 권한이라고 볼 수 있으며 등록 예시는 다음과 같다.
- 다른 계정의 IAM 사용자
- AWS 리소스에서 작업을 수행해야 하는 EC2 인스턴스에서 실행 중인 애플리케이션 코드
- 계정 내 리소스에서 작업을 수행하여 기능을 제공해야 하는 AWS 서비스
- SAML을 통해 인증 연동을 사용하는 사내 디렉토리의 사용자
역할을 등록하고 나서는 EC2에서 해당 역할을 사용하도록 저장한다.
역할을 수정하고 인스턴스를 재부팅해준다.(인스턴스 상태 > 재부팅)
재부팅이 완료되면 EC2 Instance에서 다음 명령어를 통해 codedeploy를 설치한다.
**Codedeploy agent 설치
**1. ruby 설치:** Codedeploy agent는 ruby로 작성되었으므로 이를 설치한다.
$ sudo apt-get install ruby // (ubuntu 16.04)
**2. wget 설치** (agent 설치파일을 들고오기 위해 쓰인다)
$ sudo apt-get install wget
**3. Codedeploy Agent 설치**
*#* ubuntu 계정을 사용한다면 /home/ubuntu로 가면 된다.*
$ cd /home/jane
***#* 설치파일 **다운로드 *(Seoul region)***
$ wget [<https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install>](<https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install>)
**# 실행권한 추가 및 설치**
$ chmod +x ./install
$ sudo ./install auto
하다가 막힌다면 아래 aws docs를 참고한다.
[<https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html>](<https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html>)**
아래 메시지가 출력된다.
The AWS CodeDeploy agent is running as PID ****
CodeDeploy 설정
EC2와 마찬가지로, CodeDeploy에서도 역할을 생성하고 설정해야한다.
codedeploy는 권한 종류가 AWSCodeDeployRole 한 가지이니 그냥 선택해서 만들면 된다.
이제 codedeploy 서비스에서 애플리케이션 생성을 한다.
애플리케이션을 생성하고, 배포 그룹 생성을 이어 진행한다.
한 대의 서버이기 때문에 해당 옵션을 선택한다.
이제 프로젝트 폴더에 appspec.yml 파일을 생성한다. 이 파일은 codedeploy가 서버 환경에 설치를 할 수 있도록 동작을 정의한 내용이다.
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/app/deploy
그리고, 위치할 디렉토리를 생성한다.
mkdir /home/ec2-user/app/deploy
Github Action 설정
env:
AWS_REGION: ap-northeast-2 (지역)
S3_BUCKET_NAME: 설정한 버킷 이름
CODE_DEPLOY_APPLICATION_NAME: 설정한 codedeploy 어플리케이션 이름
CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: 설정한 codedeploy 그룹 이름
ZIP_NAME: zip -r ./프로젝트명.zip .
APPLICATION: ./src/main/resources/application.yml
# (7) S3 버킷에 있는 파일을 대상으로 CodeDeploy 실행
- name: Deploy to AWS EC2 from S3
run: |
aws deploy create-deployment \\
--application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \\
--deployment-config-name CodeDeployDefault.AllAtOnce \\
--deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \\
--s3-location bucket=$S3_BUCKET_NAME,key=$GITHUB_SHA.zip,bundleType=zip
name: Deploy to Amazon EC2
on:
push:
branches: [ "main" ]
# pull_request:
# branches: [ "feature" ]
env:
AWS_REGION: ap-northeast-2
S3_BUCKET_NAME: ddal-ggak-codedeploy-app
CODE_DEPLOY_APPLICATION_NAME: codedeploy
CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: codedeploy_g
ZIP_NAME: zip -r ./finalproject.zip .
APPLICATION: ./src/main/resources/application.yml
permissions:
contents: read
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
steps:
# (1) 기본 체크아웃
- name: Checkout
uses: actions/checkout@v2
# (2) application.yml 추가
- run: touch ./src/main/resources/application.yml
- run: echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml
- run: cat ./src/main/resources/application.yml
# (3) JDK 11 세팅
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: '11'
distribution: 'temurin'
# (4) Gradle build (Test 제외)
- name: Build with Gradle
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: clean build -x test
# (5) 디렉토리 생성
- name: Make Directory
run: mkdir -p deploy
# (6) Jar 파일 복사
- name: Copy Jar
run: cp ./build/libs/*.jar ./deploy
# # (7) clean build ( test를 사용하지 않아서 제외 시켰습니다.)
# - name: Build with Gradle
# run: ./gradlew clean build
# shell: bash
# (8) zip file
- name: Make zip file
run: zip -r ./$finalproject.zip .
shell: bash
# (5) AWS 인증 (IAM 사용자 Access Key, Secret Key 활용)
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
# (6) 빌드 결과물을 S3 버킷에 업로드
- name: Upload to AWS S3
run: |
aws deploy push \\
--application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \\
--ignore-hidden-files \\
--s3-location s3://$S3_BUCKET_NAME/$GITHUB_SHA.zip \\
--source .
# (7) S3 버킷에 있는 파일을 대상으로 CodeDeploy 실행
- name: Deploy to AWS EC2 from S3
run: |
aws deploy create-deployment \\
--application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \\
--deployment-config-name CodeDeployDefault.AllAtOnce \\
--deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \\
--s3-location bucket=$S3_BUCKET_NAME,key=$GITHUB_SHA.zip,bundleType=zip
긴 시간 끝에.. 드디어..!! 완성했습니다!!
다른 분들은 저처럼 고생하지 않길 바랍니다.
728x90
반응형
LIST
'개발 > sw' 카테고리의 다른 글
인스턴스IP 도메인 연결 (0) | 2023.03.31 |
---|---|
Codedeploy SQL 오류 (0) | 2023.03.30 |
CodeDeploy (0) | 2023.03.30 |
CI/CD 구축 github action (2) (0) | 2023.03.28 |
CI/CD 구축 github action (1) (0) | 2023.03.28 |