지난 글에서는 깃헙액션, 워크플로우에 대해 설정했다.

이번에는 aws 관련 설정들을 할 것이다.

 

 

이전 포스팅에서 다뤘던 것처럼

깃헙액션에서는 s3와 codedeploy, ec2를 이용한다.
s3에 파일을 압축해서 올리고 codedeploy를 이용해 ec2에 뿌려주는 것이다.

 

 

📌EC2 생성

ec2 인스턴스를 생성해야 한다.

 

📌S3 생성

생성시 주의할 점은 퍼블릭 설정은 따로 필요 없지만, 버킷 이름은 신경써서 지어주자

 

📌EC2에 Codedeploy 에이전트 설치

sudo apt update
sudo apt install ruby-full
sudo apt install wget
cd /home/ubuntu
wget https://bucket-name.s3.region-identifier.amazonaws.com/latest/install

//밑에 주소 참조
//ex) wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto > /tmp/logfile

# 실행중인지 확인
sudo service codedeploy-agent status
# CodeDeploy 에이전트가 설치되어 실행 중이면 과 같은 메시지가 표시되어야 합니다.The AWS CodeDeploy agent is running.

# error: No AWS CodeDeploy agent running과 같은 메시지가 표시되면 서비스를 시작하고 다음 두 명령을 한 번에 하나씩 실행
sudo service codedeploy-agent start
sudo service codedeploy-agent status

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html

 

 

 

 

📌EC2 IAM 설정

ec2가 s3와 codedeploy를 이용할 수 있도록 권한 설정을 해줘야 한다. 아래 링크를 들어가서 하면 된다.

https://console.aws.amazon.com/iamv2/home#/roles

 

사용 사례를 codedeploy로 설정하여 하나 더 만들어줌

 

이제 깃헙 액션이 s3에 접근하여 파일을 업로드할 수 있도록 IAM 사용자 추가 및 권한 설정을 한다.

https://console.aws.amazon.com/iamv2/home#/users

아까는 역할이고 이번에는 사용자다.

 

기존 정책 직접 연결에서 아까 선택한것처럼

1. AWSCodeDeployFullAccess

2. AmazonS3FullAccess

두 개의 권한 체크 후 생성

 

 

📌codedeploy어플리케이션 생성

이제 codedeploy어플리케이션을 생성하자

 

 

 

이름만 정하고 ec2 선택해서 만들어줌~~~

 

 

 

 

 

 

📌배포그룹(액세스 키) 생성

이제 배포 그룹을 생성하자

(❁´◡`❁)

 

 

 

서비스 역할에는 아까 만들어준 IAM 을 선택

 

 

Amazon EC2 인스턴스를 선택하고 태그에 Name, 값에 아까 만든 EC2 인스턴스 Name을 입력

 

 

배포구성은 그대로 두면 되고 로드밸런싱 활성화를 취소한다.

 

 

생성 후 IAM 사용자의  보안자격 증명에서 엑세스 키 만들기

 

 

 

엑세스 키에 주석처럼 태그를 설정할 수도 있다(선택)

 

엑세스 키 생성 완료~~~

비밀 엑세스 키는 다시 확인할 수 없으니 안전한 곳에 잘 보관하도록 하자!!!

 

 

 

 

 

엑세스 키 생성 완료 🤸‍♀️🤸‍♀️🤸‍♀️🤸‍♀️🤸‍♀️🤸‍♀️🤸‍♀️🤸‍♀️🤸‍♀️🤸‍♀️🤸‍♀️🤸‍♀️🤸‍♀️

 

자 이제 Github Actions를 AWS 리소스와 연결하자

먼저 이전에 생성한 S3 버킷에 프로젝트 빌드한 결과물을 전송해보자

 

 

🗝️ 키 등록

받은 Access key ID, Secret access key를 github settings-secrets에서 추가
yml파일에 변수로 넣을 것이다.

왜 이렇게 하냐면! Github Actions에서 워크플로를 실행하는 과정에서 액세스 키가 필요하지만,
공개되면 보안 이슈가 발생할 수 있기 때문에 Github Secret을 이용해 액세스 키 값을 저장한 후 사용하는 것이다.
레포지토리의 Settings > Secrets > Actions 탭으로 이동한 후 [New repository secret] 버튼을 클릭 

 

.Name에는 변수 이름을, Value엔 변수의 값을 저장

저장해야하는 변수는 두가지로, IAM User를 생성할 때 볼 수 있는 액세스 키 ID 값과, 비밀 액세스 키 값을 각각 저장

한 번 저장하면 값의 일부만은 수정할 수 없으니 주의하자! (덮어쓰기는 가능. 저장된 값을 확인하는 것은 불가능)

 

gradle.yml 파일 하단에 코드를 추가

    # build한 후 webservice-deploy.zip 이라는 이름으로 프로젝트를 압축합니다.
    - name: Make zip file
      run: zip -r ./webservice-deploy.zip .
      shell: bash
    
    # Access Key와 Secret Access Key를 통해 권한을 확인합니다.
    # 아래 코드에 Access Key와 Secret Key를 직접 작성하지 않습니다.
    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }} # 등록한 Github Secret이 자동으로 불려옵니다.
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} # 등록한 Github Secret이 자동으로 불려옵니다.
        aws-region: ap-northeast-2
name: Configure AWS credentials: 워크플로우의 작업 이름을 정의
uses: aws-actions/configure-aws-credentials@v1: GitHub Actions 워크플로우에서 제공되는 AWS 액션 중 하나인 aws-actions/configure-aws-credentials를 사용하겠다. 이 액션은 AWS 자격 증명을 구성하기 위해 사용
with:액션에 전달되는 입력 변수들을 정의



저장된 secret의 이름이 위와 다를 경우, 알맞게 수정해주어야 한다.secrets.AWS_ACCESS_KEY와 secrets.AWS_SECRET_ACCESS_KEY는 이전에 등록한 Github Secret에서 값을 불러오므로 키 값을 yml파일에 바로 적지 않아도 된다.

 

 

📌참고로 ap-northeast-2 는 서울 리전을 의미한다

 

 

빌드파일 s3에 전달하는 코드도 추가

env:
  S3_BUCKET_NAME: mutjaeng
  .
  .
  .

 # 압축한 프로젝트를 S3로 전송합니다.
    - name: Upload to S3
      run: aws s3 cp --region ap-northeast-2 ./webservice-deploy.zip s3://$S3_BUCKET_NAME/webservice-deploy.zip

 

 

전체 yml파일 코드

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle

name: Java CI with Gradle

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

permissions:
  contents: read

env:
  S3_BUCKET_NAME: mutjaeng

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up JDK 11
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'
    - name: Add permission
      run: chmod +x ./gradlew
    - name: Build with Gradle
      uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
      with:
        arguments: build
        
    # build한 후 webservice-deploy.zip 이라는 이름으로 프로젝트를 압축합니다.
    - name: Make zip file
      run: zip -r ./webservice-deploy.zip .
      shell: bash
    
    # Access Key와 Secret Access Key를 통해 권한을 확인합니다.
    # 아래 코드에 Access Key와 Secret Key를 직접 작성하지 않습니다.
    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }} # 등록한 Github Secret이 자동으로 불려옵니다.
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} # 등록한 Github Secret이 자동으로 불려옵니다.
        aws-region: ap-northeast-2
    
    # 압축한 프로젝트를 S3로 전송합니다.
    - name: Upload to S3
      run: aws s3 cp --region ap-northeast-2 ./webservice-deploy.zip s3://$S3_BUCKET_NAME/webservice-deploy.zip

 

 

이제 커밋하고 성공적으로 빌드되기를 기다린다

두근세근네근...

 

성공하면 ! S3 버킷에 설정한 이름으로 압축파일이 전송된걸 확인할 수 있다!

 

 

다음 포스팅에서는 빌드파일을 배포하고 실행해 볼 것이다

 

 

 

 

 

 

 

 

도움이 많이 됐던 사이트❗❗❗❗

https://ms3864.tistory.com/382

https://ms3864.tistory.com/383

https://hyunki99.tistory.com/94

복사했습니다!