본문 바로가기
카테고리 없음

[AWS] AWS EC2 & Github Actions 배포

by 용용이아바이 2024. 12. 31.
728x90

 

Amazon EC2 생성

1. ec2 검색 후 ec2 클릭

2.  인스턴스 클릭 > 인스턴스 시작 클릭 

3. 이름을 입력하고 원하는 사양의 인스턴스를 선택

4. 인스턴스 유형 선택 - 프리티어 (1년 무료)

5.  키 페어 생성

6. 키페어 이름 입력 후 키 페어 생성 클릭

7. ssh(22) https(443) 와 http(80) 트래픽 허용 & 프리티어 최대 용량 30GB 

8. 인스턴스 생성

보안그룹 확인

1. 보안그룹 클릭

2. 보안 그룹 아이디 확인

탄력적 IP 주소 할당

1. 탄력적 IP 선택

2. 탄력적 IP 주소 할당 클릭

3. 할당 클릭

4. 할당된 IP 주소 클릭

5. 탄력적 IP 주소 연결 클릭

7. 해당하는 인스턴스를 선택하고 연결 클릭

 

사용자 만들기

1. iam 으로 이동

2. 사용자로 이동

3. 사용자 생성 클릭

4.  사용자 이름 입력 후 다음 클릭

5.  직접 정책 연결 선택 후 AmazonEC2FullAccess 검색해서 정책 선택하고 다음 클릭

6. 사용자 생성 클릭

정책 연결

1. 생성된 유저 선택

2. 권한 추가 선택 후 인라인 정책 생성 클릭

3. ec2 검색해서 선택

4. 쓰기 선택

5. AuthorizeSecurityGroupIngress 선택

6. RevokeSecurityGroupIngress 선택

7. 모두를 선택하고 다음을 클릭

8. 정책 이름을 입력 후 정책 생성 클릭

보안 자격 증명

1. 보안 자격 증명에서 액세스 키 만들기 클릭

2. 기타 선택 후 다음 클릭

3. 설명 태그 값을 입력 후 액세스 키 만들기 클릭

4. .csv 파일 다운로드 후에 완료 클릭

.github/workflows/deploy.yml 설정

1. git으로 서버에 clone을 해둔 뒤에 pull 하는 것을 가정하에 만듦

프로젝트는 간단하게 php 프로젝트로 함

프로젝트의 가장 상단에 project/.github/workflows/deploy.yml 를 만들어서 추가 

name: Build and Deploy to EC2

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

env:
  AWS_REGION: ap-northeast-2
jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-region: ${{ env.AWS_REGION }}
          aws-access-key-id: ${{ secrets.CICD_ACCESS_KEY }}
          aws-secret-access-key: ${{ secrets.CICD_SECRET_KEY }}

      - name: Get Github Actions IP
        id: ip
        uses: haythem/public-ip@v1.2
  
      - name: Add Github Actions IP to Security group
        run: |
          aws ec2 authorize-security-group-ingress --group-id ${{ secrets.SG_ID }} --protocol tcp --port 22 --cidr ${{ steps.ip.outputs.ipv4 }}/32

      - name: SSH Commands
        uses: appleboy/ssh-action@v0.1.6
        with:
          host: ${{ secrets.HOST_DEV }}
          username: ${{ secrets.DEV_USERNAME }}
          password: ${{ secrets.DEV_PASSWORD }}
          port: ${{ secrets.PORT_DEV }}
          script_stop: true
          script: |
            cd /home/ec2-user/project
            git stash
            git pull origin dev

      - name: Remove Github Actions IP From Security Group
        run: |
          aws ec2 revoke-security-group-ingress --group-id ${{ secrets.SG_ID }} --protocol tcp --port 22 --cidr ${{ steps.ip.outputs.ipv4 }}/32

github 에 variable 추가

1. project의 settings > Secrets and variables > Actions 를 클릭

2. 위에서 만든 것들을 입력해서 만든다.

SG_ID: 보안그룹 아이디

PORT_DEV: EC2 컨테이너의 SSH 포트(기본:22)

HOST_DEV: 탄력적IP 주소

DEV_USERNAME: ec2-user(amazon linux 디폴트 아이디: ec2-user)

DEV_PASSWORD: ec2-user의 비밀번호 (비밀번호로 접속이 가능하게 하려면 linux 에서 sshd_config를 수정해야 한다.)

- DEV_PASSWORD는 DEV_SSH_KEY로 대체가 가능하며 deploy.yml 에서 password: ${{ secrets. DEV_PASSWORD  }} -> key: ${{  secrets.DEV_SSH_KEY }} 로 변경하면 된다.

CICD_ACCESS_KEY: iam 에서 만든 유저의 access_key 

CICD_SECRET_KEY: iam 에서 만든 유저의 secret_key 

테스트


참고

 

[Github Actions/AWS] Github Actions에서 SSH로 EC2 인스턴스에 접근하기

※ 이 방법은 EC2 인스턴스에 SSH로 직접 접근하는 방식으로, 빌드를 EC2 인스턴스 상에서 진행하기 때문에 EC2 메모리 등의 자원을 사용하여 서비스에 영향을 줄 수 있습니다. 빌드를 Github Actions에

tesseractjh.tistory.com

 

728x90