cloud9을 사용하려면 루트 계정 사용자가 권한을 줘야함
route53fullaccess
+ route53resolverfullaccess
+ cloud9user
이거
현재 vpc를 구축하면서 부여한 권한은 다음과 같음
여기서 IAMReadOnlyAccess
는 IAM 내용을 읽을 수 있음 따라서 이 권한을 부여해야 각각의 ㅅㅏ용자가 어떤 권한을 가지고 있는지 볼 수 있음
vpc 삭제할때는 연결된 vpc는 삭제가 안되므로 역순으로 하나하나 삭제해야 함
cloud9에서 붕어빵 틀을 만들어 냄 -> 이 붕어빵 틀을 가지고 ecs가 붕어빵(컨테이너)를 찍어 내는 것 !
이 과정에서 트래픽이 많이 발생하면 로드밸런서가 트래픽을 잘 나눠줌
이름은 ecs-workshop
로 만들고, 새로운 인스턴스, 인스턴스 크기는 small, vpc 설정에서 어제 만든 vpc
와 public-subnet-1
을 선택하고 생성 !
cloud9이 제대로 생성된 걸 볼 수 있음
성공적으로 ec2 인스턴스가 생성된 걸 볼 수 있음
root 권한 사용자가 iam:ListInstanceProfiles
역할을 부여한 후
작업 -> 보안 -> IAM 역할 수정 -> IAM 역할을 fullaccessrole
로 바꿔줌
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": [ "*" ] } ] }
오른쪽 상단 톱니바퀴 -> AWS settings -> credentials -> 빨간색으로 변경
/.aws 폴더에 credentials 파일이 있을 경우 삭제
aws configure set default.region us-east-2
-> 지역 설정
aws configure get default.region
-> 지역 설정 됐는지 확인
나는 오하이오로 되어있어서 region뒤를 us-east-2
로 설정함
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 레퐂지토리에서 관리되고 이후 클러스터 또는 다른 환경에서 해당 이미지를 사용 가능함