[플레이데이터] 6월 14일 수업(ECS 구축-cloud9 사용하기)

싱숭생숭어·2023년 6월 14일
0

플레이데이터 수업

목록 보기
17/21
post-thumbnail

cloud 9

cloud9을 사용하려면 루트 계정 사용자가 권한을 줘야함

route53fullaccess + route53resolverfullaccess + cloud9user 이거

현재 vpc를 구축하면서 부여한 권한은 다음과 같음

여기서 IAMReadOnlyAccess는 IAM 내용을 읽을 수 있음 따라서 이 권한을 부여해야 각각의 ㅅㅏ용자가 어떤 권한을 가지고 있는지 볼 수 있음

vpc 삭제할때는 연결된 vpc는 삭제가 안되므로 역순으로 하나하나 삭제해야 함

cloud9에서 붕어빵 틀을 만들어 냄 -> 이 붕어빵 틀을 가지고 ecs가 붕어빵(컨테이너)를 찍어 내는 것 !

이 과정에서 트래픽이 많이 발생하면 로드밸런서가 트래픽을 잘 나눠줌

이름은 ecs-workshop로 만들고, 새로운 인스턴스, 인스턴스 크기는 small, vpc 설정에서 어제 만든 vpcpublic-subnet-1을 선택하고 생성 !

cloud9이 제대로 생성된 걸 볼 수 있음

cloud9에서 생성한 ec2 설정

성공적으로 ec2 인스턴스가 생성된 걸 볼 수 있음

root 권한 사용자가 iam:ListInstanceProfiles 역할을 부여한 후

작업 -> 보안 -> IAM 역할 수정 -> IAM 역할을 fullaccessrole로 바꿔줌

cloud9 열기

cloud9 -> 앞서 만든 ecs-workshop을 선택 후 cloud9 열기

그랬더니 이렇게 계속 connecting 뜸 ! ㅠ

json 파일에 route53resolver:* 이라는 권한과 AWSCloud9SSMInstanceProfile 권한을 부여하고 다시 cloud9과 인스턴스를 생성한 뒤 cloud9을 다시 열면 제대로 열림 !

이 시점에서 내가 가지고 있는 권한 목록은 아래와 같다.

이 중 encore_test 정책을 json으로 열면

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "iam:ListRoles",
                "iam:ListInstanceProfilesForRole",
                "iam:PassRole",
                "iam:CreateRole",
                "iam:AttachRolePolicy",
                "iam:ListInstanceProfiles",
                "iam:PutRolePolicy",
                "iam:GetRole"
            ],
            "Resource": "*"
        },
        {
            "Sid": "ECRAccess",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetRepositoryPolicy",
                "ecr:DescribeRepositories",
                "ecr:ListImages",
                "ecr:DescribeImages",
                "ecr:BatchGetImage",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:PutImage",
                "ecr:DeleteRepository",
                "ecr:DescribeRepositories",
                "ecr:CreateRepository"
            ],
            "Resource": "*"
        },
        {
            "Sid": "ECSAccess",
            "Effect": "Allow",
            "Action": "ecs:*",
            "Resource": "*"
        },
        {
            "Sid": "Route53",
            "Effect": "Allow",
            "Action": [
                "route53resolver:*",
                "ec2:DescribeSubnets",
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterface",
                "ec2:ModifyNetworkInterfaceAttribute",
                "ec2:DescribeNetworkInterfaces",
                "ec2:CreateNetworkInterfacePermission",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeVpcs",
                "ec2:DescribeAvailabilityZones"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

cloud9 설정

오른쪽 상단 톱니바퀴 -> AWS settings -> credentials -> 빨간색으로 변경

/.aws 폴더에 credentials 파일이 있을 경우 삭제

지역 변경

aws configure set default.region us-east-2 -> 지역 설정
aws configure get default.region -> 지역 설정 됐는지 확인
나는 오하이오로 되어있어서 region뒤를 us-east-2로 설정함

ECR 생성(=> 레포지토리 생성)

aws ecr create-repository --repository-name "django"

django라는 이름의 ecr 레포지토리를 생성함

Amazon Elastic Container Service -> amazon ECR -> 리포지토리에서 생성된 레포지토리 목록을 확인할 수 있음

cloud9에선 생성이 됐는지 레포지토리 목록에서는 조회가 안됨.
따라서 권한을 부여해야함

  • account ID 확인
    aws sts get-caller-identity --query Account --output text
    -> 나의 경우 나의 account ID인 12자리 숫자가 출력됨

  • docker client 인증
    aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin 391518741196.dkr.ecr.us-east-2.amazonaws.com/django
    -> 여기서 391518741196.dkr.ecr.us-east-2.amazonaws.com/django 이 부분은 직전에 만든 django 레포지토리에서 가져온 것

  • nginx-web 다운받기
    cd /home/ec2-user/environment
    git clone https://github.com/brayanlee/nginx-web.git

  • docker build
    cd nginx-web
    docker build -t nginx .

  • nginx 레포지토리 생성
    aws ecr create-repository --repository-name "nginx-hg"

  • docker 이미지 설정
    docker tag nginx:latest 391518741196.dkr.ecr.us-east-2.amazonaws.com/nginx-hg:latest
    -> docker 이미지를 다른 이름으로 태그하는 명령어(nginx:latest -> 391518741196.dkr.ecr.us-east-2.amazonaws.com/nginx-hg:latest)

  • docker 이미지를 ECR에 push
    docker push 391518741196.dkr.ecr.us-east-2.amazonaws.com/nginx-hg:latest
    -> 391518741196.dkr.ecr.us-east-2.amazonaws.com/nginx-hg:latest라는 이름의 docker 이미지를 ECR 레포지토리로 푸시하는 명령어, 푸시한 이미지는 ECR 레퐂지토리에서 관리되고 이후 클러스터 또는 다른 환경에서 해당 이미지를 사용 가능함

profile
공부합시당

0개의 댓글