반응형

배포하실 서비스가 Dockerfile에 준비되어 있다는 전제에서 설명드리겠습니다.

 

순서

  1. ECR 레포 docker 이미지 push
  2. ECS 태스크 정의
  3. ECS 클러스터 생성
  4. 클러스터 서비스 생성

 

ECS 이란?

Amazon Elastic Container Service(Amazon ECS)는 완전관리형 컨테이너 오케스트레이션 서비스입니다. 기본적으로 Amazon Route 53, Secrets Manager, AWS Identity and Access Management(IAM), Amazon CloudWatch 등의 다른 서비스와 통합을 통해 컨테이너 배포 및 확장을 위한 익숙한 환경을 제공할 수 있습니다. 다른 AWS 서비스와의 신속한 통합을 통해 ECS에 새로운 기능을 추가할 수도 있습니다. ECS를 통해 애플리케이션에서 Amazon EC2  AWS Fargate를 스팟 및 온디맨드 요금 옵션과 조합하여 유연하게 사용할 수도 있습니다.


ECR 이란?

AWS ECR (Amazon Elastic Container Registry)는 Amazon Web Services가 제공하는 Docker 컨테이너 이미지를 저장하고 관리할 수 있는 서비스입니다. 이 서비스를 사용하여 개발자는 Docker 이미지를 안전하게 업로드, 저장, 관리 및 배포할 수 있습니다. ECR은 AWS 클라우드의 다른 서비스와 통합되어 컨테이너화된 애플리케이션의 빌드, 저장 및 배포 프로세스를 간소화합니다.

 

1. ECR 레포 docker 이미지 push

1. AWS ECR에 접속해서 원하는 레포 이름으로 레포지토리를 생성합니다.

2. 레포를 생성했다면 푸시 명령 보기를 클릭해서 배포하려는 프로젝트 파일에서 순차적으로 명령어를 실행시켜서 푸시를 진행합니다.(푸시 명령 1~4번 실행)

주의할 점, 배포하는 ECS가 Linux이기 때문에 Linux 환경에서 실행되는 docker 이미지를 push 해야 합니다.
추후에 ECS 서비스를 생성할 때 계속 서킷 브레이커가 발생한다면 docker 이미지를 먼저 의심해 보시면 됩니다.

(저 같은 경우 docker 이미지가 제 MAC에서는 잘 동작해서 ECR에 올렸는데 ECS는 Linux 계열이라서 계속적으로 ECS 서비스 생성에 문제가 발생해서 오랜 삽질을 했습니다,, 저 같은 분들이 없기를,,)

 

 

 

2. ECS 태스크 정의

  • 태스크 정의 패밀리 : 원하시는 이름 작성
  • 시작 유형 : AWS Fargate
  • OS, 아키텍처, 네트워크 모드 : Linux/X86_64
  • 태스크 크기 : 1 vCPU, 3GB
  • 태스크 역할 : ecsTaskExecutionRole
  • 태스크 실행 역할 : ecsTaskExecutionRole

 

컨테이너

  • 이미지 URI : ECR 이미지 URI (주의, ECR 레포 URI 아닙니다.  아래 이미지 참고)
  • 컨테이너 포트 : 컨테이너에서 사용하는 포트 작성
  • 환경변수 파일 추가 : S3에 환경 변수 파일 업로드해서 객체 ARN 값 작성(옵션)
  • 로깅을 선택하면 ecsTaskExecutionRole 값에 CloudWatchFullAccess 권한 추가 필요(옵션, 아래 이미지 참고)

나머지 설정은 기본 설정으로 진행

 

 

ECR 레포 안에 이미지 URI 복사
ecsTaskExecutionRole 권한에 CloudWatchFullAccess 권한 추가

3. ECS 클러스터 생성

  • 클러스터 이름 작성
  • AWS Fargate 선택

나머지 설정은 기본 설정값으로 진행

 

 

4. 클러스터 서비스 생성

환경
- 컴퓨팅 옵션 : 시작 유형

- 시작 유형 : FARGATE
배포 구성

- 애플리케이션 유형 : 서비스

- 패밀리 : 앞에서 정의한 태스크 선택
네트워킹
- 사용하는 VPC 있으면 선택

로드 벨런싱

- 로드 벨런서 연결

- 기존 대상 그룹을 연결할 때는 대상 유형을 “IP 주소 선택해서 생성한 대상 그룹 연결 가능(Fargate 연결하는 경우)

 

 

ECS 서비스 상태가 활성이면 배포 성공!

 

서비스에 들어가면 상태 및 지표와 연결된 로드 벨런서 확인이 가능하고

테스크에 들어가면 태스크 구성(IP등)과 로그를 확인할 수 있습니다.

728x90
반응형

'AWS' 카테고리의 다른 글

S3 객체 대량 삭제 시 복구 방법  (2) 2023.11.03
AWS를 이용한 SSL 적용하기  (0) 2023.01.08
반응형
Github Action을 이용해서 CDN S3 업로드 POC 진행중..
너무 오래 걸리는데?? Action log를 살펴보는데..

 

 

 

upload : 오호 예상대로 업로드가 잘됐군
delete : 뭐지..?
delete : 이
delete : 거
delete : 어
delete : 떻
delete : 게
delete : 멈
delete : 추
delete : 지...
 

 

제가 멍청하게 Github 지정된 폴더와 S3 버킷을 동기화하는 코드를 넣어서 S3 객체를 날리고 있었습니다..
평정심을 찾고.. 아니 끝까지 못 찾았습니다..
부랴부랴 버킷에 들어가 봅니다!
 

 

 
버킷 버전 관리가 활성화되어 있으면 복구가 가능합니다!!
버전 관리가 활성화되어있는 상태에서는 객체를 삭제하면 삭제 마커 버전이 생성되는데요
삭제 마커 버전을 삭제하면 전 버전으로 복구 시킬 수 있습니다.
 
 
이렇게 aws console을 이용해서 복구 시킬 수도 있지만, 저같이 대량의 파일을 삭제했을 경우에는 코드로 복구 시킬 수 있는데요.
AWS SDK를 사용해서 여러 프로그래밍 언어로 코딩하는 방법도 있지만, 저는 급한 마음에 AWS CLI를 이용해서 S3 복구를 진행하였습니다.

 

1. AWS CLI를 설치

AWS CLI 이용하려면 CLI 설치를 먼저 진행해야 합니다.
Homebrew를 이용해서 설치를 진행하도록 하겠습니다.
aws cli 설치 : brew install awscli
설치 확인 : aws --version
aws cli를 이용하기 위해서는 aws configure 설정을 해줘야 합니다.
aws iam 서비스에서 관련된 권한만 부여된 사용자를 생성해서 설정하는게 보안에 더 좋습니다.
저는 s3 관련 권한만 부여된 사용자를 생성하였습니다.
 
 
위와 같이 사용자를 생성하면 AWS Access Key ID와 Secret Access Key가 생성되는데요,
중요한 정보이기에 외부 유출에 유의하셔야 합니다.
aws cli 설정 : aws configure
설정값에 key와 각종 정보를 등록하셨다면 이제 aws cli를 이용해서 S3 객체를 복원해 보도록 하겠습니다.
 
순서는 크게 두가지 입니다.
  1. 오늘 날짜로 삭제된 S3 객체 목록 추출
  2. 추출된 리스트를 이용해서 삭제 마커 버전 삭제

 

2. 삭제된 S3 객체 목록 추출

cli를 이용해서 aws api를 호출하면 아래와 같이 삭제 마커가 붙은 객체를 가져올 수 있습니다.
터미널에서 조회
aws s3api list-object-versions --bucket s3_bucket_name --output text | grep DELETEMARKERS

 

 
aws s3 api를 이용해서 오늘 날짜로 삭제된 객체 목록을 txt 파일로 가져올 수 있습니다.
s3_deleted_object_list.sh
#!/bin/bash
TODAY=$(date +"%Y-%m-%d")
aws s3api list-object-versions --bucket s3_bucket_name --output text | grep DELETEMARKERS | grep $TODAY > deleted_objects_today.txt

 

3. 추출된 리스트를 이용해서 삭제 마커 버전 삭제

위에서 추출한 목록에서 객체의 key 값과 version_id를 이용해서 해당 버전을 삭제시킬 수 있습니다.
s3_restore.sh
#!/bin/bash


while read -r line; do
key=$(echo $line | awk '{print $3}')
versionId=$(echo $line | awk '{print $5}')
aws s3api delete-object --bucket s3_bucket_name --key "$key" --version-id "$versionId"
done < deleted_objects_today.txt

 

 

 

 

728x90
반응형

'AWS' 카테고리의 다른 글

AWS ECS 이용한 서비스 배포  (0) 2024.04.28
AWS를 이용한 SSL 적용하기  (0) 2023.01.08
반응형

AWS에서 제공하는 인증서 관리 서비스인 ACM(AWS Certificate Manager)을 이용해서 웹 서버에 SSL을 적용해 보도록 하겠습니다.

 ACM 공식 문서를 한 번 읽어 보시면 좋을 것 같습니다.

  • 이 방법은 AWS에서 제공하는 인증서 관리 서비스로 갱신에 대한 신경을 쓸 필요가 없습니다.
  • 간편하게 사용이 가능하고 유효기간은 13개월이며, ACM에서 인증서 발급은 무료입니다.

사전 준비 상태

  • 도메인 구매 완료
  • EC2 Instances
  • AWS Rout 53 사용

SSL 적용 순서

  1. ACM을 이용한 인증서 발급
  2. 로드밸런서 생성
  3. Route 53 등록

1.  ACM을 이용한 인증서 발급

 

1.1 퍼블릭 인증서 요청 선택합니다.

1.2 완전히 정규화된 도메인 이름에 사전에 발급 받으신 도메인을 작성합니다.

 - 검증 방법은 Route 53을 이용하기 때문에 DNS 검증을 선택하면 보다 더 편리하게 자동으로 갱신됩니다.

 - 키 알고리즘은 가장 널리 사용되는 RSA 2048을 사용하겠습니다.

1.3 인증서 검증을 위해서 발급된 인증서에 들어가셔서 "Rout 53에서 레코드 생성"을 선택합니다.

 - Route 53에 들어가 보시면 레코드 리스트에 CNAME 유형으로 생성된 걸 확인할 수 있습니다.

 

2.  로드밸런서 생성

현재 발급받은 인증서는 사용 중이 아니라서 갱신 자격이 부적격입니다.(로드밸런서에 연결하면 적격으로 변경됩니다.)

ACM 인증서는 Elastic Load Balancing(ELB)과 같은 다른 AWS 서비스와 연결되어야 합니다.

로드밸런서를 생성하도록 하겠습니다.

 

2.1 Application Loa Balancer로 생성하도록 하겠습니다.

 

2.2 Basic configuration

  - Load balancer name을 작성해 주시고 다른 설정은 그대로 두셔도 무방합니다.

2.3 Network mapping

  - Mappings는 두개 이상 선택해줍니다.

2.4 Security groups

  - 보안 그룹은 EC2 Instances에 등록된 보안 그룹을 추가해 줍니다.

  - 80, 443 번 포트가 오픈되어 있어야 합니다.

2.5 Listeners and routing에 인증서를 연결할 EC2 Instances를 연결합니다.

- 연결할 인스턴스가 안 보일 경우 create target group을 선택해서 생성합니다.

2.6 위 설정을 모두 하셨다면 로드밸런서를 생성합니다.

 - 생성된 로드밸런서에 리스너 탭으로 이동하면 위에서 등록한 리스너가 보입니다.

 - 443 리스너에 인증서 보기/편집을 선택해서 앞에서 생성한 인증서를 연결합니다.

2.7 80 포트는 443 포트로 리디렉션를 해주도록 하겠습니다.

 - 규칙 보기/편집을 선택합니다.

 

 

3.  Rout 53 등록

3.1 Rout 53에 위에서 생성한 로드밸런서를 레코드에 생성합니다.

3.2 SSL 연결이 끝났습니다. 

 - 브라우저에서 해당 도메인에 접근하시면 자물쇠 모양과 발급된 인증서를 확인할 수 있습니다.

 

주의사항

1. 로드밸런서 대상 그룹에 해당 인스턴스 Health status가 정상인지 확인합니다.

- Health checks 탭에서 Path 등을 변경해서 인스턴스 상태를 체크할 수 있습니다.

- Zone이 위에서 선택한 Network mapping과 같은지 확인합니다.

 

2. Route 53에 서브도메인을 www로 설정해서 로드밸런서를 등록하셨다면 "www.도메인"으로 접근하셔야만 접근이 가능합니다.

www를 빼고 접근을 해도 해당 도메인에 접근할 수 있도록 설정하기 위해서 서브도메인을 비우고 별칭을 이용해서 도메인과 연결합니다.

 

728x90
반응형

'AWS' 카테고리의 다른 글

AWS ECS 이용한 서비스 배포  (0) 2024.04.28
S3 객체 대량 삭제 시 복구 방법  (2) 2023.11.03

+ Recent posts