Docker Compose로 만든 여러 컨테이너를 AWS ECS로 올려 봅니다.
11647 단어 docker-compose도커ECS
나도 이것 어디서부터 시작할까라고 생각하고 있었습니다. 우선은 로컬 측에서 준비합니다.
AWS CLI 준비
AWS 명령줄 도구입니다. 저는 Windows에 서브시스템으로 들어 있는(WSL이라고 하는 사람입니다) Ubuntu 를 사용하고 있기 때문에 Linux 판의 CLI 를 넣을 수 있습니다.
설치 방법의 공식 문서 을 읽고 그대로 복사하면 들어갑니다.
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
들어갔는지 확인합니다.$ aws --version
aws-cli/2.1.29 Python/3.8.8 Linux/5.4.72-microsoft-standard-WSL2 exe/x86_64.ubuntu.20 prompt/off
오늘 시점에서 최신 2.1.29가 들어갔습니다.프로필 만들기
AWS에 대한 연결 정보가 포함된 프로필을 생성합니다.
$ aws configure --profile dev
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json
할 수 있었습니다.Amazon ECS용 docker context 생성
$ docker context create ecs ecs_dev_context
? Create a Docker context using: An existing AWS profile
? Select AWS Profile dev
Successfully created ecs context "ecs_dev_context"
할 수 있었다$ docker context ls
NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
default * moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm
ecs_dev_context ecs
설정 확인
잘 모르겠지만 LongArnFormat에 대한 설정이 Enable
해야 한다고 합니다. 전부 Enable이 되어 있는 것을 확인했습니다.
$ aws ecs list-account-settings --effective-settings
{
"settings": [
{
"name": "awsvpcTrunking",
"value": "disabled",
"principalArn": "arn:aws:iam::XXXXXXXXXXXX:user/sugimoto-dev"
},
{
"name": "containerInsights",
"value": "disabled",
"principalArn": "arn:aws:iam::XXXXXXXXXXXX:user/sugimoto-dev"
},
{
"name": "containerInstanceLongArnFormat",
"value": "enabled",
"principalArn": "arn:aws:iam::XXXXXXXXXXXX:user/sugimoto-dev"
},
{
"name": "dualStackIPv6",
"value": "enabled",
"principalArn": "arn:aws:iam::XXXXXXXXXXXX:user/sugimoto-dev"
},
{
"name": "serviceLongArnFormat",
"value": "enabled",
"principalArn": "arn:aws:iam::XXXXXXXXXXXX:user/sugimoto-dev"
},
{
"name": "taskLongArnFormat",
"value": "enabled",
"principalArn": "arn:aws:iam::XXXXXXXXXXXX:user/sugimoto-dev"
}
]
}
ECR 리포지토리 준비
웹 브라우저에서 AWS 콘솔에 로그인하여 여기에서 생성합니다.
ECR에 로그인
또한 로컬 명령입니다.
로그인이 필요합니다.
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com
username 은 자신의 것을 넣는 것이 아니라 고정으로 AWS 와 넣는 것 같습니다.푸시해 둔다.
docker-compose push
Pushing api (XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/hogehoge:latest)...
The push refers to repository [XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/hogehoge]
1f6de88c2dc9: Preparing 73e3e78bfd9a: Preparing 7384658657bf: Preparing c1ae2439e41e: Preparing 72fd383bd06f: Preparing 7e918812cca3: Waiting b45d11f9e6b5: Waiting 3676846f14f0: Waiting 10c7b2ce5f37: Waiting e3d73f29c674: Waiting 10bf86ff9f6a: Waiting da654bc8bc80: Waiting 4ef81dc52d99: Waiting 909e93c71745: Waiting 7f03bfe4d6dc: Waiting ERROR: denied: User: arn:aws:iam::XXXXXXXXXXXX:user/hogefuga-user is not authorized to perform: ecr:InitiateLayerUpload on resource: arn:aws:ecr:ap-northeast-1:XXXXXXXXXXXX:repository/hogehoge
오류가 발생했습니다. ? ? ? ? ?아.
version: '3.8'
services:
api:
build: ./app
image: XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/api-hawk:latest
ports:
- 5000:5000
docker-compose의 이미지에서 XXXXXXXXXXXX에 잘못된 사용자 ID를 넣었습니다. 아호입니다. 제대로 콘솔에서 얻은 리포지토리 URL을 넣으십시오.$ docker-compose push
Pushing api (XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/hogehoge:latest)...
The push refers to repository [XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/hogehoge]
1f6de88c2dc9: Pushed 73e3e78bfd9a: Pushed 7384658657bf: Pushed c1ae2439e41e: Pushed 72fd383bd06f: Pushed 7e918812cca3: Pushed b45d11f9e6b5: Pushed 3676846f14f0: Pushed 10c7b2ce5f37: Pushed e3d73f29c674: Pushed 10bf86ff9f6a: Pushed da654bc8bc80: Pushed 4ef81dc52d99: Pushed 909e93c71745: Pushed 7f03bfe4d6dc: Pushed latest: digest: sha256:7e949d6732a116f81811c4520b505391a6da4db7d34c9e50d179becc390539c8 size: 3475
성공했습니다. 콘솔에서 보면 제대로 리포지토리에 들어갔습니다.ECS에 배포
ECS에 배포하기 위한 컨텍스트(예전에 만든 ecs_dev_context)를 사용하도록 Docker 설정을 변경합니다.
$ docker context use ecs_dev_context
ecs_dev_context
이 문맥에서 docker-compose up 하면 어떻게 AWS에 올라 버린 것 같습니다. 대단해.[+] Running 14/14
⠿ docker-api-hawk CreateComplete 291.0s
⠿ LogGroup CreateComplete 2.0sh
⠿ ApiTCP5000TargetGroup CreateComplete 1.0s
⠿ LoadBalancer CreateComplete 152.0s
⠿ DefaultNetwork CreateComplete 5.0s
⠿ CloudMap CreateComplete 48.1s
⠿ ApiTaskExecutionRole CreateComplete 22.0s
⠿ Cluster CreateComplete 7.0s
⠿ Default5000Ingress CreateComplete 1.0s
⠿ DefaultNetworkIngress CreateComplete 1.0s
⠿ ApiTaskDefinition CreateComplete 3.0s
⠿ ApiServiceDiscoveryEntry CreateComplete 2.0s
⠿ ApiTCP5000Listener CreateComplete 3.0s
⠿ ApiService CreateComplete 121.0s
올랐습니다.
Reference
이 문제에 관하여(Docker Compose로 만든 여러 컨테이너를 AWS ECS로 올려 봅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sixpetals/items/90a6894c89c4fa4439d7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)