AWS의 ECS로 컨테이너에 웹 터미널 연결
어디까지나 디버그 목적으로 사용합니다.
내 앱의 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을 넣습니다.
# 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"]
컨테이너에서 내 앱 80과 터미널 8080을 통과하고 싶지만 내가 사용했던 ecs-cli 버전에서는 멀티 포트 설정을 잘 못했기 때문에 aws 클라이언트에서 작업 정의에서 할 수 있습니다.
targetGroupArn은 자신의 대상 그룹 ARN을 넣습니다.
{
"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/****"
}
]
}
{
"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 포트에 브라우저로 액세스하면 터미널이 시작됩니다.
Reference
이 문제에 관하여(AWS의 ECS로 컨테이너에 웹 터미널 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hayashi-zener/items/feee081b8e641ef1019f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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 포트에 브라우저로 액세스하면 터미널이 시작됩니다.
Reference
이 문제에 관하여(AWS의 ECS로 컨테이너에 웹 터미널 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hayashi-zener/items/feee081b8e641ef1019f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)