AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
연결이 끊긴 Amazon ECS 에이전트의 문제를 해결하려면 어떻게 해야 합니까?
Amazon Elastic Container Service(Amazon ECS)용 컨테이너 인스턴스의 연결이 끊겼습니다.
간략한 설명
Amazon ECS 컨테이너 에이전트 연결이 한 시간 동안 여러 번 끊겼다가 다시 연결되는 것은 정상입니다. 이러한 변경 이벤트는 걱정할 필요가 없습니다. 연결 이벤트가 단 몇 분 동안만 지속된다면 컨테이너 에이전트 또는 컨테이너 인스턴스의 문제 때문이 아닐 수 있습니다.
하지만 컨테이너 에이전트의 연결 끊김 상태가 더 오래 유지된다면 컨테이너 인스턴스는 Amazon ECS 클러스터의 일부로 작동할 수 없습니다. 이 문제는 다음 이유 중 하나로 인해 발생할 수 있습니다.
- 네트워킹 문제로 인해 인스턴스와 Amazon ECS 간의 통신이 차단됩니다.
- 컨테이너 에이전트에 Amazon ECS 엔드포인트와 통신하는 데 필요한 AWS Identity and Access Management(AWS IAM) 권한이 없습니다.
- 컨테이너 인스턴스 내부의 호스트 또는 Docker 대몬에 문제가 있습니다.
- 기본 호스트에 리소스 경합이 있습니다.
참고: Amazon ECS 컨테이너 에이전트의 최신 버전을 사용하는 것이 좋습니다.
해결 방법
참고: 다음 해결 방법은 Amazon ECS 최적화 Amazon Linux 2 AMI에 적용됩니다.
SSH 키를 사용하여 Amazon EC2 인스턴스에 연결할 수 있습니다. SSH 키가 생성되지 않은 경우 AWS Systems Manager의 기능인 세션 관리자를 사용하여 인스턴스에 연결할 수 있습니다. 기본적으로 Systems Manager 에이전트는 Amazon Linux 2 AMI와 Amazon Linux 2 ECS 최적화 기본 AMI에 설치됩니다.
컨테이너 인스턴스에서 컨테이너 에이전트가 실행되고 있는지 확인
Amazon ECS 컨테이너 에이전트의 상태 및 연결을 확인하려면 컨테이너 인스턴스에서 다음 명령 중 하나를 실행합니다.
$ sudo systemctl status ecs $ sudo docker ps -f name=ecs-agent
출력은 **active (running)**를 나타내며 다음과 비슷합니다.
ecs.service - Amazon Elastic Container Service - container agent Loaded: loaded (/usr/lib/systemd/system/ecs.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2022-02-15 15:51:09 UTC; 37min ago Docs: https://aws.amazon.com/documentation/ecs/ Process: 30039 ExecStopPost=/usr/libexec/amazon-ecs-init post-stop (code=exited, status=0/SUCCESS) Process: 29987 ExecStop=/usr/libexec/amazon-ecs-init stop (code=exited, status=0/SUCCESS) Process: 30077 ExecStartPre=/usr/libexec/amazon-ecs-init pre-start (code=exited, status=0/SUCCESS) Main PID: 30123 (amazon-ecs-init) Tasks: 5 Memory: 3.7M CGroup: /system.slice/ecs.service └─30123 /usr/libexec/amazon-ecs-init start CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eb1dc8d4ab3b amazon/amazon-ecs-agent:latest "/agent" 3 days ago Up 3 days (healthy) ecs-agent
에이전트의 연결이 끊어져 문제가 발생한 경우 다음 명령을 실행하여 ECS 에이전트를 다시 시작합니다.
$ sudo systemctl restart ecs
참고: 위 명령을 실행하면 출력이 반환되지 않습니다.
에이전트가 실행되고 있는지 확인하려면 다음 명령을 실행합니다.
sudo systemctl status ecs
Docker 서비스가 컨테이너 인스턴스에서 실행 중인지 확인
영향을 받는 컨테이너 인스턴스에서 Docker 서비스가 실행되고 있는지 확인하려면 다음 명령을 실행합니다.
sudo systemctl status docker
출력은 **active (running)**를 나타내며 다음과 비슷합니다.
docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2022-02-11 17:42:32 UTC; 3 days ago Docs: https://docs.docker.com Process: 4307 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS) Process: 4296 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS) Main PID: 4315 (dockerd) Tasks: 24 Memory: 360.5M CGroup: /system.slice/docker.service ├─4315 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=32768:65536 ├─6010 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.17.0.2 -container-port 80 └─6016 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 80 -container-ip 172.17.0.2 -container-port 80
Docker 서비스가 비활성 상태인 경우 다음 명령을 실행하여 Docker 서비스를 다시 시작합니다.
sudo systemctl restart docker
참고: 위 명령을 실행하면 출력이 반환되지 않습니다.
Docker 서비스가 다시 시작되었는지 확인하려면 다음 명령을 실행합니다.
sudo systemctl status docker
컨테이너 에이전트 및 Docker의 로그 파일 검토
컨테이너 인스턴스가 여전히 연결 끊김 상태인 경우 컨테이너 호스트에서 컨테이너 에이전트 및 Docker의 로그 파일을 검토하십시오.
다음 로그 파일에서 "error", "warn" 또는 "agent transition state" 등의 키워드를 확인하십시오.
- /var/log/ecs/ecs-agent.log 에서 Amazon ECS 컨테이너 에이전트의 최신 로그 확인 참고: /var/log/ecs/ecs-agent-log.timestamp로 필터링하여 회전된 로그를 볼 수 있습니다.
- /var/log/ecs/ecs-init.log에서 Amazon ECS init 로그 확인
- /var/log/cloud-init.log에서 사용자 데이터 실행 로그 확인
- sudo journalctl -u docker 명령을 사용하여 Docker 대몬 로그 확인
Linux를 사용하는 경우 종료 코드를 검토하여 중지된 에이전트 컨테이너에 대한 자세한 내용을 확인할 수도 있습니다. 자세한 내용은 GitHub 웹 사이트의 exitcodes를 참조하십시오.
종료 코드를 가져오려면 다음 명령을 실행합니다.
docker inspect your container ID
your container ID를 중지된 컨테이너의 ID로 바꾸십시오.
참고: Amazon ECS 로그 수집기를 사용하여 Amazon ECS의 일반 운영 체제 로그, Docker 로그 및 컨테이너 에이전트 로그를 수집할 수 있습니다.
IAM 인스턴스 프로필에 필요한 권한이 있는지 확인
컨테이너 에이전트가 여전히 연결 끊김 상태인 경우 컨테이너 인스턴스와 연결된 IAM 인스턴스 프로필에 필요한 IAM 권한이 있는지 확인합니다.
-
SSH 또는 세션 관리자를 사용하여 인스턴스에 연결합니다.
-
인스턴스와 연결된 인스턴스 프로파일에서 인스턴스 메타데이터를 보려면 다음 명령을 실행합니다.
curl http://169.254.169.254/latest/meta-data/iam/info출력은 다음과 유사하게 표시됩니다.
{ "Code" : "Success", "LastUpdated" : "2022-02-16T22:42:17Z", "InstanceProfileArn" : "arn:aws:iam::1122334455:instance-profile/ecsInstanceRole", "InstanceProfileId" : "AIPA4VIZXOFF55F72XIZN" } -
특정 자격 증명 오류를 확인하려면 다음과 유사한 명령을 실행하여 컨테이너 에이전트 로그에서 ECS 로그 목록을 확인합니다.
cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-##**YYYY-MM-DD-##**을 관련 타임스탬프로 바꾸십시오.
참고: 컨테이너 에이전트 로그는 1시간마다 교체됩니다. 접미사는 현재 날짜 및 시간을 반영하여 자동으로 변경됩니다. 문제가 발생한 날짜 범위와 로그 ID를 포함하도록 명령을 업데이트합니다.
컨테이너 인스턴스에 ECS 에이전트를 실행하기에 충분한 리소스가 있는지 확인
작업의 메모리/CPU 사용률이 높으면 컨테이너 인스턴스에 ECS 에이전트를 실행할 리소스가 충분하지 않을 수 있습니다.
Amazon ECS 컨테이너 에이전트는 Docker ReadMemInfo() 함수를 사용하여 운영 체제에 사용할 수 있는 메모리의 양을 쿼리합니다.
컨테이너 인스턴스에서 다음 명령을 실행하여 운영 체제에서 인식하는 총 메모리를 확인합니다.
free -b
Amazon ECS 최적화 Amazon Linux AMI를 실행하는 t2.large 인스턴스의 출력 예시는 다음과 같습니다.
total used free shared buff/cache available Mem: 8361193472 298577920 7325388800 405504 737226752 7844274176 Swap: 0 0 0
Amazon ECS 컨테이너 에이전트와 컨테이너 인스턴스의 기타 중요한 시스템 프로세스에 사용할 일부 메모리를 예약하도록 선택할 수 있습니다. 이 메모리를 예약하면 작업 컨테이너가 동일한 메모리를 놓고 경합하지 않도록 하는 데 도움이 됩니다. 자세한 내용은 Amazon ECS Linux 컨테이너 인스턴스 메모리 예약을 참조하십시오.
환경 변수 ECS_CLUSTER에 올바른 클러스터 이름이 있는지 확인
Amazon ECS 컨테이너 에이전트 구성 파라미터 ECS_CLUSTER에 잘못된 클러스터 이름이 있는 경우 컨테이너 인스턴스가 클러스터에 가입할 수 없습니다. /etc/ecs/ecs.config 파일의 내용을 확인하여 이 파라미터를 확인하려면 다음 명령을 실행합니다.
cat /etc/ecs/ecs.config
ECS 에이전트가 ECS 엔드포인트와 통신할 수 있는지 확인
ECS 엔드포인트와 연결하려면 네트워크 액세스 제어 목록 및 컨테이너 인스턴스 보안 그룹이 포트 443(HTTPS)의 아웃바운드 연결을 허용해야 합니다.
ECS 엔드포인트(ACS/TCS)에 대한 아웃바운드 연결을 확인하려면 컨테이너 인스턴스에서 다음 명령 중 하나를 실행합니다.
sudo yum install telnet -y$ telnet ecs.region.amazonaws.com 443
-또는-
$ curl https://ecs.region.amazonaws.com
다음 모범 사례를 검토합니다.
- 애플리케이션에 특정 운영 체제나 그렇지 않은 Docker 버전이 필요하지 않다면 Amazon ECS 최적화 AMI를 사용하여 ECS 워크로드를 실행합니다.
- 최신 버전의 Amazon ECS 컨테이너 에이전트를 사용하십시오. 최신 버전은 향상된 기능을 포함하며 중요한 업데이트를 제공합니다.
- CPU 및 메모리 제한으로 작업을 구성합니다.
관련 정보
- 언어
- 한국어
