Amazon Elastic Container Service(ECS)
- 컨테이너화된 애플리케이션의 손쉬운 배포, 관리 및 조정에 도움이 되는 완전 관리형 컨테이너 오케스트레이션 서비스
- "ECS Anywhere": 온프레미스 또는 클라우드 모두에서 ECS에서 확인하려는 유사한 클러스터 관리, 워크로드 예약 및 모니터링 이용 가능
- 오케스트레이터: 컨테이너 배포, 컨테이너 상태 확인, 상태가 좋지 않은 노드 교체, 새 배포 처리를 통해 컨테이너의 수명 주기 관리
구성 요소
- Cluster: 클러스터에 배포된 모든 컨테이너를 그룹화하는 논리적 구조
- Task definition: 컨테이너 이미지 위치, CPU 및 메모리 용량, 로그 구성 등과 같은 속성을 포함
- Task: 클러스터 내 태스크 정의를 인스턴스화
- Service: 클러스터에서 원하는 수의 태스크를 동시에 실행하고 유지 가능
- ECR: Amazon에서 제공하는 컨테이너 이미지 저장소
시작 유형
- Fargate: 서버리스 컴퓨팅 엔진
- EC2
- External: 온프레미스 서버 또는 가상 머신
실습
- VPC 생성
퍼블릭 서브넷 2 / 프라이빗 서브넷 2
퍼블릭 rtb에 igw 추가
- 보안그룹
(docker 설치 및 dockerfile 만들 ec2 보안그룹) ssh만 열어주자
(로드 밸런서 보안그룹) HTTP 열어주자
(컨테이너 보안그룹) private subnet 배치, alb에서만 받아오자
- docker 환경 구축
ec2 인스턴스 생성
위에서 생성했던 vpc와 sg 적용 시키기, 퍼블릭 ip 활성화
(❗ vpc 적용시킬 때 public인지 확인해라...)
이후에 ssh 접속 해서 docker 설치를 해보자!
sudo -s
yum install -y docker
service start docker | systemctl start docker
docker images
docker images 명령어 입력 후 위의 그림과 같은 화면이 나오면 성공적으로 설치된 것.
dockerfile 작성
mkdir dockerfile-folder
cd dockerfile-folder/
vi index.html
//index.html
<!doctype html>
<h1>hello ecs!</h1>
vi dockerfile
//dockerfile
FROM nginx:latest
MAINTAINER "kim.jaewook@classmethod.jp"
COPY ./index.html /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
docker build -t ecs-nginx .
docker images 명령어를 입력해보면
위와 같이 업로드를 확인할 수 있다.
ECR로 이미지를 푸시하기 전 현재 생성한 docker image가 정상 작동하는지 테스트 해보자.
(create 명령어로 container 생성)
docker create -i -t --name ecs-nginx-container -p 8000:80 ac167921553f //ecs-nginx image id
컨테이너 아이디를 확인하고 start 명령어로 컨테이너 실행
docker ps -a
docker start 362972fc9628 // container id
ec2 보안그룹에서 8000번 포트 열고 확인!
컨테이너는 필요없으니 삭제 해주자
docker stop 362972fc9628
docekr rm 362972fc9628
- ECR 리포지토리 생성
이름은 docker image와 같게 만들자.
- EC2에서 프로필 설정
ECR에 이미지를 푸시하기 위해선 EC2에 IAM Role이 연결되어 있어야 한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:Describe*",
"ecr:Get*",
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ecr:PutImage",
"ecr:InitiateLayerUpload",
"ecr:UploadLayerPart",
"ecr:CompleteLayerUpload",
"ecr:BatchDeleteImage"
],
"Resource": [
"arn:aws:ecr:REGION:AWS_ACCOUNT_ID:repository/REPOSITORY_NAME"
]
}
]
}
나는 위의 내용을 정책으로 만들고 만든 정책으로 역할을 생성했다.
역할을 업데이트 해준다.
- ECR 로그인
$ aws ecr get-login-password --region REGION | docker login --username AWS --password-stdin AWS_ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/리포지토리
로그인 성공!
- ECR Push
해당 명령어들을 따라간다..(얘는 ECR 리포지토리 선택 후 '푸시 명령 보기' 클릭하면 나옴..)
2번까진 위에서 테스트 했기 때문에 3번 명령어부터 진행하면 된다.
3번 명령어 까진 실행이 잘 되었다는 것을 알 수 있음.(TAG 명령어)
4번 명령어 실행하면
이와 같은 오류가 뜬다. 아마 aws configure 문제 일듯?
IAM user를 생성한다.
후에 aws configure 작업 진행
ECR 리포지토리의 권한도 설정해준다.(귀찮으니까 모든 사람으로 설정해버림)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPushPull",
"Effect": "Allow",
"Principal": "*",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:CompleteLayerUpload",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
]
}
]
}
다시한번 더 4번 명령어(push) 하면 성공이다.
위와 같이 이미지가 잘 올라간 것을 볼 수 있음!
❗ 글이 길어지니까 ECS 구축 관련한 내용은 다음 포스팅에 올리자.. ❗
'Cloud > AWS' 카테고리의 다른 글
[AWS] Cloud9 - Github 연동 (0) | 2022.09.16 |
---|---|
[AWS] ECS 실습 -2(ECS 구축) (0) | 2022.09.15 |
[AWS] ECS에 HTTP API 구축 (0) | 2022.09.13 |
[AWS] Mobile Backend 구성 (1) | 2022.09.08 |
[AWS] AWS Amplify -1(Amplify Studio) (0) | 2022.09.07 |