안녕하세요.
이번 시간에는 ECR에 이미지를 올려서 ECS Fargate에 Redis를 구성하고 접속해 보는 실습을 진행하겠습니다.
일반적으로 Redis는 Fargate 위에 설치하지는 않습니다. Managed 서비스를 사용하는 것을 권장합니다.
1. ECS(Elastic Container Service) Cluster 생성하기
AWS Console - [Elastic Container Service]를 선택합니다.
클러스터 생성을 위해 [클러스터] - [클러스터 생성]을 눌러줍니다.
다음과 같이 클러스터 이름을 지정한 후 [AWS Fargate(서버리스)]를 체크한 후 생성합니다. 모니터링, 암호화, 태그는 선택 사항입니다.
2. ECR(Elastic Container Registry) 생성하기
AWS Console - [Elastic Container Registry]를 선택합니다.
[Repositories] - [리포지토리 생성]을 선택합니다.
리포지토리 이름을 설정한 후 [리포지토리 생성]을 눌러줍니다.
3. ECR 자격증명 설정하기
생성한 ECR에서 [푸시 명령 보기]를 선택합니다.
다음과 같이 ECR에 Push 할 수 있는 명령어 가이드를 자세하게 제공하고 있습니다.
해당 명령어를 수행하기 위한 세 가지 준비사항이 있는데 Bastion 서버, AWS CLI, Docker입니다.
1. Amazon Linux에 Docker 설치하기
sudo yum install docker
2. AWS CLI 설치하기
sudo yum install awscli
기본적으로 Amazon Linux에는 aws cli가 설치되어 있긴 하나 다른 운영체제라면 위 명령어로 설치하시면 됩니다.
3. AWS Configure 설정하기
IAM - [사용자] - [보안 자격 증명] - [액세스 키 만들기]를 통해 API 키를 생성합니다.
aws configure
input access key
input secret key
input region
input Enter
위에서 생성한 API키를 이용하여 aws configure에 자격증명을 넣어줍니다.
4. ECR에 이미지 Push하기
1. Dockerfile 생성하기
sudo vi Dockerfile
...
FROM redis:latest
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
다음과 같이 redis를 설정하는 Dockerfile을 생성합니다.
2. ECR 명령어 수행하기
다음과 같이 ECR Push 명령어를 순서대로 입력합니다. 주의사항은 위 예시는 root 계정 기준이기 때문에 일반 사용자 계정에서는 sudo를 포함하여 입력해주어야 합니다. 안 그러면 Permission Denied 에러가 발생합니다.
1. Retrieve an authentication token and authenticate your Docker client to your registry. Use the AWS CLI:
aws ecr get-login-password --region <region> | sudo docker login --username AWS --password-stdin <ecr-endpoint>
2. 다음 명령을 사용하여 도커 이미지를 빌드합니다. 도커 파일을 처음부터 새로 빌드하는 방법에 대한 자세한 내용은 여기 지침을 참조하십시오. 이미지를 이미 빌드한 경우에는 이 단계를 건너뛸 수 있습니다.
sudo docker build -t <ecr-name> .
3. 빌드가 완료되면 이미지에 태그를 지정하여 이 리포지토리에 푸시할 수 있습니다.
sudo docker tag <ecr-name>:latest <ecr-endpoint>/<ecr-name>:latest
4. 다음 명령을 실행하여 이 이미지를 새로 생성한 AWS 리포지토리로 푸시합니다.
sudo docker push <ecr-endpoint>/<ecr-name>:latest
다음과 같이 ECR에 이미지가 Push 된 것을 확인할 수 있습니다.
5. Task Definition 생성하기
ECS 태스크 정의 - [새 태스크 정의 생성]을 누르면 새 태스크 정의 생성을 할 수 있습니다.
1. 태스크 정의 구성
인프라 요구사항에서 시작 유형은 Fargate, 태스크 크기는 테스트용으로 작게 생성합니다.
컨테이너 이름, 이미지 URI, 컨테이너 포트, 포트 이름, 앱 프로토콜 등 필수 항목은 설정해 준 후 [생성] 버튼을 눌러줍니다.
다음과 같이 Task Definition을 생성했으면 클러스터에서 서비스 혹은 태스크를 생성해 주면 됩니다.
2. 보안 그룹 생성
다음과 같이 redis 접속을 위해서 해당 포트에 대해 열어줍니다. 접속하고자 하는 서버 대역만 여는 것이 좋습니다.
3. 태스크 생성하기
다음과 같이 단발성 테스트를 위한 태스크를 생성합니다.
배포 구성은 다음과 같이 [태스크]를 선택 후 Task Definition, 태스크 수, 작업 그룹 이름을 지정합니다.
네트워킹 탭에서 VPC, 서브넷, 보안그룹을 선택한 후 생성합니다. 로드밸런서를 두지 않아 퍼블릭 IP는 체크하였습니다.
그 외에 볼륨, 태스크 재정의, 컨테이너 재정의, 태그 등 선택사항을 추가할 수 있습니다.
6. Task 및 접속 확인하기
1. Task 상세 정보 확인
컨테이너 세부 정보에서 현재 클러스터에 올라간 컨테이너 정보를 확인할 수 있습니다. 공인 IP 정보를 확인한 후 Bastion 서버에서 해당 Redis에 접속해 보도록 하겠습니다.
2. Redis 접속 확인
redis-cli -h <host> -p <port>
다음과 같이 redis 클라이언트와 host, port 정보를 이용해서 redis에 접속합니다.
정상적으로 접속된 것을 확인할 수 있습니다. 이렇게 ECS Fargate를 이용해서 redis cluster 역시 구성할 수 있습니다.
이번 시간에는 ECR에 이미지를 올려서 ECS Fargate에 Redis를 구성하고 접속해 보는 실습을 진행해 봤습니다.
감사합니다.
'Cloud > Amazon Cloud' 카테고리의 다른 글
[AWS] Korea PLES GameDay 2024 Network Topology Titans 참여 후기 (0) | 2024.09.25 |
---|---|
[AWS] CodePipeline에서 다른 VPC에 있는 사내 GitLab에 연동하는 방법 (0) | 2024.06.26 |
[AWS] Lambda를 이용한 Serverless 형태의 Slack 챗봇 사용하기 - 2 (0) | 2023.11.30 |
[AWS] EC2에서 라이브러리를 S3에 저장하여 S3 업로드로 Lambda에 적용하기 (0) | 2023.11.30 |
[AWS] Lambda에서 Timeout 걸릴 때 해결 가능한 방법 알아보기 (0) | 2023.11.30 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!