Developing

패스트캠퍼스 캐시백 챌린지 37일차 본문

Devops/Fastcampus 캐시백 챌린지

패스트캠퍼스 캐시백 챌린지 37일차

DEV_BLOG 2022. 5. 24. 22:32

수강 인증샷

 

AWS CLI를 활용해 ECR repository를 생성하고 ECS 작업정의와 관련된 클립들을 수강하는 식으로 챌린지를 진행하였다.

내용이 상당하기에 최대한 적은 포스팅으로 많이다루기위해 2개정도로 분할해서 작성하려고 한다. GUI 환경에서 작업해주는 것과달리 aws 공식문서를 같이보면서 CLI 환경에서 작업들을 해주는 실습을 할 수 있었다. 다음 포스팅에도 AWS CLI를 통한 작업정의에 관한 포스팅을 이어서 하려고한다.

 

 

 

AWS CLI 를 활용하여 gui상에서 AWS console의 서비스를 사용해보는 것대신 CLI 환경에서 작업을 해보려고 한다. EC2를 새로 하나판뒤에 작업을 해보도록 하자.

 

AWS CLI 실습

mkdir docker-server
cd docker-server
git clone <https://github.com/SongGeunil1/fastcampus_test.git>

cd fastcampus_test
vi requirements.txt

앞선 포스팅들에서 했었던 것과 과정이 비슷하다. requirements.txt애 uwsgi를 추가해주자.

 

 

curl -fsSL <https://get.docker.com/> | sudo sh
sudo usermod -aG docker $USER

도커설치와 권한설정을 해주자.

 

 

vi Dockerfile

FROM python:3.6.7

ENV PYTHONUNBUFFERED 1

RUN apt-get -y update
RUN apt-get -y install vim

RUN mkdir /srv/docker-server
ADD . /srv/docker-server

WORKDIR /srv/docker-server

RUN pip install --upgrade pip
RUN pip install -r requirements.txt

EXPOSE 8000
CMD ["python" , "manage.py" , "runserver", "0.0.0.0:8000"]

Dockerfile을 생성해주자.

 

 

docker build -t server_dev/django .

(permission denied가 출력되면 putty 재접속 한번 해주면된다.)

 

 

sudo apt install awscli
aws configure

AWS Access Key ID [None] : [엑세스 키 ID]
AWS Secret Key [Done] : [비밀 엑세스 키 ]

aws ecr get-login --no-include-email --region ap-northeast-2

IAM에서 사용자를 추가하고 key발급 후 configure 과정을 마친뒤 ecr 명령어로 출력되는 내용을 그대로 복사해서 입력해준다. Login succeded 까지 완료되면 된다.

AWS CLI를 쓰기위한 환경을 다 완료했으니 ECS의 repository를 AWS CLI 환경에서 생성해보도록 하자.

 

 

 

 

‘ecr repository 생성 cli’ 정도로 구글링하면 쉽게 aws공식문서를 찾을 수 있다. ECR 레포지토리를 생성해준다.

aws ecr create-repository --repository-name hello-cli --region ap-northeast-2

 

 

ECR 컨테이너를 확인해보면 레포지토리가 생성이 된 것을 확인할 수 있다.

docker tag를 달아주고 push를 해보자.

docker tag [image명] [ECR URI] 
docker push [ECR URI]

 

 

gui에서 fargate화면을 눌러 설정해준 것 처럼 cli에서 작업정의의 타입을 fargate/ec2/external 등을 선택하여 명령어로 실행할 수 있다.

이 내용은 aws Elastic container Service 공식문서에 상세하게 나와있다.

https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/ecs-cli-tutorial-fargate.html

aws ecs create-cluster --cluster-name fargate-cluster

 

 

 

fargate을 위한 cluster가 생성되었음을 확인할 수 있다.

그 후에 작업을 정의해주어야하는데, json 파일에 해당 내용을 포함해야한다.

cd ..
cd ..
mkdir json-list
cd json-list
vi task1.json
{
    "family": "fargate-cli", 
    "networkMode": "awsvpc", 
    "containerDefinitions": [
        {
            "name": "django-cli", 
            "image": "**ECR URI 주소**", 
            "portMappings": [
                {
                    "containerPort": 8000, 
                    "protocol": "tcp"
                }
            ], 
            "essential": true, 
            "entryPoint": [
                "sh",
		"-c"
            ]
        }
    ], 
    "requiresCompatibilities": [
        "FARGATE"
    ], 
    "cpu": "256", 
    "memory": "512"
}
aws ecs register-task-definition --cli-input-json file://./task1.json

 

현재 디렉토리에 위치한 task1.json을 작업정의로 지정해준다.

json파일의 자세한내용은 task parameter와 관련된 aws 공식문서에서 확인할 수 있다.

https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/task_definition_parameters.html

몇가지만 언급하자면 portMappings 에는 3가지 옵션이 또 존재한다.

protocol은 ssh인지,tcp인지에 대한 것이고, hostport는 사용자가 들어오는 port, containerPort는 내부컨테이너로 접근할때 연결하는 port이다. 이때 fargate 시작 유형으로 작업에서 컨테이너를 사용하는 경우에 hostport를 빈칸으로 두어도 된다.

requiresCompatibilites는 FARGATE으로 만들어주겠다는 설정이다.

 

 

 

이때 위와같이 에러가 발생할 수 있다. 공식문서에서처럼 공개된 이미지가 아니라 custom으로 만들어준 개인 이미지에 접근하기 위해서 권한이 필요하다는 내용이다. IAM에서 설정해줄 수 있지만 cli 환경에서도 설정해줄 수 있다. 이것에 대한 설정을 해주기 위해 ecs-task.json을 만들어준다.

vi ecs-task.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

 

 

ecr을 접근하는 것은 누구나 활용할 수 있는 role이라고 생각해서 미리 만들어둔 task가 있어서 그것을 “Service”에서 그대로 불러오기만 하면된다.

aws iam create-role --role-name ecrTaskRole --assume-role-policy-document file://ecs-task.json

 

 

 

 

 

IAM에서 역할이 잘 생성되었음을 확인할 수 있다.

이 role을 attach 해주면 된다.

aws iam attach-role-policy --role-name ecrTaskRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

 

 

아까 에러가 뜬 command를 다시 시도해보자.

aws ecs register-task-definition --cli-input-json file://./task1.json

 

 

이번에는 다른 에러가 발생하는데, ARN role을 담당하는 파라미터를 처리해야한다. 해당 내용은 다음 포스팅에서 이어진다.

 

 

 

 

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

*본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.