이번에는 Git - AWS ECS 서비스를 연동해보고자 한다.
(AWS 계정이 필요하다.)
AWS - IAM 설정
AWS - IAM 페이지에서 사용자 생성을 진행한다.
그 다음 액세스 키를 발급한다.
AWS CLI 이용할 예정이기 때문에 아래와 같이 선택한다.
AccessKey를 발급 받으면
[AccessKey, SecretAccessKey]
두 개가 발급되는데, 어디다가 저장해두자.
Git repository - AccessKey 등록
이제 발급 받은 AccessKey와 SecretAccessKey를 Next 프로젝트 레포지토리에 등록해야 한다.
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY 를 각각 등록해준다.
Next.js 프로젝트 workflow 수정
방금 추가한 Access, Secret 키를 프로젝트 내 github / workflow 파일에 추가해준다.
그래야 해당 키를 가지고 AWS와 연동할 수 있게 된다.
변경사항을 push하여 Git Action을 확인해보도록 하자.
현재는 AccessKey를 설정하는 단계에서 그쳤지만, workflow에 다른 AWS 서비스를 사용할 수 있도록 steps를 추가한다면, 해당 키가 잘 설정되어야만 오류 없이 배포가 된다.
IAM 권한 설정
이제 AWS로 프로젝트를 배포할 모든 서버에 동일한 환경을 구축하기 위해 Docker Image 생성 및 해당 Image의 Repository 역할을 하는 ECR 서비스를 사용할 예정이다.
그러나 해당 작업에 앞서 ECR과 같은 AWS 서비스를 바로 사용할 수는 없다.
우리는 앞선 과정에서 IAM 그룹 or 사용자를 생성하였고 각 서비스에 맞는 권한을 설정해주어야 한다.
필자는 그룹 단위로 권한을 부여하고, 해당 그룹에 속한 사용자들에게 동일한 권한을 부여해주는 방식으로 진행하려고 한다.
IAM 그룹에 권한 설정
그룹에 권한을 추가하려면 [사용자 그룹 - 권한 추가 - 정책 연결]
사용자별 권한을 추가하려면 [사용자 - 권한 추가 - 정책 연결]을 통해 권한을 추가할 수 있다.
필자는 아래와 같이 추가하였다.
아래 빨간 박스를 제외한 다른 권한들은 AWS에 이미 존재하는 권한들이고
빨간 박스는 별도로 추가해주었다.
ecs-cicd-demo-role 추가 방법 (이름은 마음대로 지어주세요)
[사용자 or 사용자 그룹 - 권한 추가 - 인라인 정책 생성 - 정책편집기 JSON] 선택 후 아래 JSON 붙여넣기
{
"Version": "2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Action":
[
"iam:PassRole"
],
"Resource": "arn:aws:iam::*:role/ecsTaskExecutionRole"
}
]
}
그 다음 정책의 이름을 설정해주면 끝이다.
결론적으로 추가한 정책들은 아래와 같다.
//ECR에 대한 모든 권한
AmazonEC2ContainerRegistryFullAccess
//ECS에 대한 모든 권한
AmazonECS_FullAccess
//ECR Public에 대한 모든 권한
AmazonElasticContainerRegistryPublicFullAccess
//S3에 대한 모든 권한
AmazonS3FullAccess
//ECS 클러스터로 애플리케이션 배포를 관리할 때 사용되는 권한
AWSCodeDeployRoleForECS
//AWSCodeDeployRoleForECS와 동일한 목적이지만 최소한의 권한만 부여
AWSCodeDeployRoleForECSLimited
//ECR 컨테이너 빌드를 위한 EC2 프로필을 나타내는 역할
EC2InstanceProfileForImageBuilderECRContainerBuilds
//ELB에 대한 모든 권한
ElasticLoadBalancingFullAccess
//ECS에서 실행 중인 Task에 대한 IAM 역할. 컨테이너 실행 및 관련 작업을 수행 - 별도로 직접 추가 필요
ecs-cicd-demo-role
ECR 관련 workflow 추가 및 배포 확인
이제 github workflow 하단에 ECR 로그인 관련 코드를 추가해준다.
name: Staging # 워크플로 Action의 이름
on:
push:
branches: [main] #github main 브런치에 푸시 발생 시 실행 ( main 외 다른브런치 이용시 이름변경)
jobs:
staging: #staging이라는 작업
name: deploy to staging # 작업의 이름
runs-on: ubuntu-latest # 실행될 작업환경을 말함.
steps:
- name: Checkout
uses: actions/checkout@v3 #체크아웃 받기
- name: HelloWorld
uses: actions/hello-world-javascript-action@v1 # 헬로월드 찍어보기
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} # Github Secret 이름
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} # Github Secret 이름
aws-region: ap-northeast-1 # AWS 리전 선택
#AWS - ECR
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
추가 성공!
정리
- AWS의 서비스들을 사용하기 위해서는 IAM 사용자 혹은 사용자 그룹을 생성한다.
- IAM 사용자 혹은 사용자 그룹에 AccessKey, SecretAccessKey를 발급 받아 github repository에 등록 및 workflow에 설정한다.
- 필요한 AWS 서비스를 사용하기 위해 그에 맞는 권한을 설정한다.
- AWS ECR 관련 workflow를 설정한다.
다음 포스팅에서는 본격적으로 ECR, ECS 서비스를 사용해볼 예정이다.
처음이라면 이 모든 과정이 쉽지 않겠지만 천천히 공부하다보면 언젠가는 될 것이라 믿는다.
'BackEnd > CICD' 카테고리의 다른 글
[Next + Git + AWS] - 자동 배포 시스템 구축해보기(5) ECS 서비스 구축하기 (1) | 2023.10.28 |
---|---|
[Next + Git + AWS] - 자동 배포 시스템 구축해보기(4) ECR - Git 연동하기 (2) | 2023.10.24 |
[Docker] Docker에 대해 알아보자 (1) | 2023.10.22 |
[Next + Git + AWS] - 자동 배포 시스템 구축해보기(2) - Next.js 프로젝트 생성 및 Git Action 동작해보기 (0) | 2023.10.18 |
[Next + Git + AWS] 자동 배포 시스템 구축해보기(1) - Intro (0) | 2023.10.18 |