AWS의 ECS로 컨테이너에 웹 터미널 연결

15451 단어 gotty도커ECSAWS
ECS를 사용하면 디버그 환경에서 컨테이너에 연결하는 것이 번거롭기 때문에 컨테이너에 웹 터미널 인 GoTTY를 넣어 보는 방법을 생각해 보았습니다.
어디까지나 디버그 목적으로 사용합니다.

내 앱의 Docker 파일에 gotty 설정



Dockerfile의 gotty 설정 부분 (alpine을 사용하고 있습니다)
# GoTTY
RUN addgroup -S gotty && adduser -S -g gotty gotty \
    && mkdir -p /gotty \
    && chown -R gotty /gotty && chgrp -R gotty /gotty
RUN wget -qO- https://github.com/yudai/gotty/releases/download/v0.0.12/gotty_linux_amd64.tar.gz | tar zx -C /gotty/
RUN echo 'port = "8080"' >> /home/gotty/.gotty
RUN echo 'credential = "myacc:pass"' >> /home/gotty/.gotty
RUN chown -R gotty /gotty/gotty /home/gotty

# Supervisor
RUN echo '[supervisord]' >> /etc/supervisord.conf
RUN echo 'nodaemon=true' >> /etc/supervisord.conf
RUN echo '[program:myapp]' >> /etc/supervisord.conf
RUN echo 'command=/myworks/myapp'   >> /etc/supervisord.conf
RUN echo '[program:gotty]' >> /etc/supervisord.conf
RUN echo 'command=/gotty/gotty --config "/home/gotty/.gotty" -w /bin/ash' >> /etc/supervisord.conf
RUN echo 'autostart=true' >> /etc/supervisord.conf
# RUN echo 'user=gotty' >> /etc/supervisord.conf

EXPOSE 80 8080

CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]

포트에서 터미널 포트
credential의 기본 인증 계정 및 비밀번호
단지 확인하고 싶다면 "user = gotty"부분의 코멘트를 제거하십시오.

ECS 태스크 정의



컨테이너에서 내 앱 80과 터미널 8080을 통과하고 싶지만 내가 사용했던 ecs-cli 버전에서는 멀티 포트 설정을 잘 못했기 때문에 aws 클라이언트에서 작업 정의에서 할 수 있습니다.
targetGroupArn은 자신의 대상 그룹 ARN을 넣습니다.
  • 포트 정의 파일 "multiport.json"만들기
  • {
    "loadBalancers": [
    {
    "containerName": "myapp",
    "containerPort": 80,
    "targetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:*********:targetgroup/mycluster/*****"
    },
    {
    "containerName": "myapp",
    "containerPort": 8080,
    "targetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:*********:targetgroup/mycluster/****"
    }
    ]
    }
    
  • 작업 정의 파일 "task-definition.json"만들기
  • {
        "memory": "512", 
        "networkMode": "bridge", 
        "family": "mytask", 
        "placementConstraints": [], 
        "cpu": "256", 
        "executionRoleArn": "arn:aws:iam:*************", 
        "volumes": [], 
        "requiresCompatibilities": [
            "EC2"
        ], 
        "taskRoleArn": "arn:aws:iam::*************", 
        "containerDefinitions": [
            {
                "links": [], 
                "image": "********.dkr.ecr.ap-northeast-1.amazonaws.com/myapp/develop:1.0.0", 
                "hostname": "myhost", 
                "environment": [
                ], 
                "extraHosts": [], 
                "dnsServers": [], 
                "volumesFrom": [], 
                "dnsSearchDomains": [], 
                "mountPoints": [], 
                "logConfiguration": {
                    "logDriver": "awslogs", 
                    "options": {
                        "awslogs-region": "ap-northeast-1", 
                        "awslogs-stream-prefix": "docker", 
                        "awslogs-group": "/myapp/group"
                    }
                }, 
                "dockerSecurityOptions": [], 
                "entryPoint": [], 
                "linuxParameters": {
                    "devices": [], 
                    "capabilities": {}
                }, 
                "essential": true, 
                "readonlyRootFilesystem": false, 
                "name": "myapp", 
                "dockerLabels": {}, 
                "privileged": false, 
                "portMappings": [
                    {
                        "protocol": "tcp", 
                        "containerPort": 80, 
                        "hostPort": 0
                    }, 
                    {
                        "protocol": "tcp", 
                        "containerPort": 8080, 
                        "hostPort": 8080
                    } 
                ], 
                "command": [], 
                "cpu": 0, 
                "ulimits": []
            }
        ] 
    }
    

    작업 정의 및 ECS 서비스 시작


    revision=`aws ecs register-task-definition --cli-input-json file://task-definition.json | jq '.taskDefinition.revision'`
    echo "revision:${revision}"
    aws ecs create-service --cluster ${CLUSTER_NAME} --service ${SERVICE_NAME} --task-definition mytask:${revision} --deployment-configuration maximumPercent=${MAX_PARCENT},minimumHealthyPercent=${MIN_PARCENT} --desired-count 1 --launch-type EC2 --cli-input-json file://multiport.json
    

    브라우저로 액세스



    지정한 8080 포트에 브라우저로 액세스하면 터미널이 시작됩니다.

    좋은 웹페이지 즐겨찾기