Docker 컨테이너로 AWS IoT Greengrass V2 실행 중인에 컨테이너화된 애플리케이션 배포 - 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Docker 컨테이너로 AWS IoT Greengrass V2 실행 중인에 컨테이너화된 애플리케이션 배포

Salih Bakir, Giuseppe Di Bella, Gustav Svalander, Amazon Web Services

요약

AWS IoT Greengrass Version 2는 Docker 컨테이너로 배포될 때 기본적으로 Docker 애플리케이션 컨테이너 실행을 지원하지 않습니다. 이 패턴은 DinD(DockerDocker-in-Docker) 기능을 활성화 AWS IoT Greengrass V2 하는 최신 버전의를 기반으로 사용자 지정 컨테이너 이미지를 생성하는 방법을 보여줍니다. DinD를 사용하면 AWS IoT Greengrass V2 환경 내에서 컨테이너화된 애플리케이션을 실행할 수 있습니다.

이 패턴을 독립형 솔루션으로 배포하거나 Amazon ECS Anywhere와 같은 컨테이너 오케스트레이션 플랫폼과 통합할 수 있습니다. 두 배포 모델에서는 확장 가능한 컨테이너 기반 배포를 활성화하면서 AWS IoT SiteWise 엣지 처리 기능을 포함한 전체 AWS IoT Greengrass V2 기능을 유지합니다.

사전 조건 및 제한 사항

사전 조건 

  • 활성. AWS 계정

  • 일반적인 AWS IoT Greengrass Version 2 사전 조건은 AWS IoT Greengrass Version 2 설명서의 사전 조건을 참조하세요.

  • Linux, macOS 또는 Windows에 설치 및 구성된 Docker Engine.

  • Docker Compose(Docker Compose 명령줄 인터페이스(CLI)를 사용하여 Docker 이미지를 실행하는 경우).

  • Linux 운영 체제.

  • 가상화를 지원하는 호스트 서버가 있는 하이퍼바이저입니다.

  • 시스템 요구 사항:

    • RAM 2GB(최소)

    • 사용 가능한 디스크 공간 5GB(최소)

    • AWS IoT SiteWise Edge의 경우 16GB의 RAM과 50GB의 사용 가능한 디스크 공간이 있는 x86_64 쿼드 코어 CPU입니다. AWS IoT SiteWise 데이터 처리에 대한 자세한 내용은 AWS IoT SiteWise 설명서의 데이터 처리 팩 요구 사항을 참조하세요.

제품 버전

  • AWS IoT Greengrass Version 2 버전 2.5.3 이상

  • Docker-in-Docker 버전 1.0.0 이상

  • Docker Compose 버전 1.22 이상

  • Docker Engine 버전 20.10.12 이상

제한 사항

아키텍처

대상 기술 스택

  • 데이터 소스 - 처리를 위해 데이터를 생성하는 IoT 디바이스, 센서 또는 산업 장비

  • AWS IoT Greengrass V2 - 엣지 인프라에 배포된 D-in-D 기능이 있는 Docker 컨테이너로 실행

  • 컨테이너화된 애플리케이션 - AWS IoT Greengrass V2 환경 내에서 중첩된 Docker 컨테이너로 실행되는 사용자 지정 애플리케이션

  • (선택 사항) Amazon ECS Anywhere – 컨테이너 배포를 관리하는 AWS IoT Greengrass V2 컨테이너 오케스트레이션

  • 기타 AWS 서비스 - 데이터 처리 및 관리를 AWS 서비스 위한 AWS IoT Core AWS IoT SiteWise및 기타

대상 아키텍처 

다음 다이어그램은 컨테이너 관리 도구인 Amazon ECS Anywhere를 사용하는 대상 배포 아키텍처의 예를 보여줍니다.

Amazon ECS Anywhere를 사용하는 배포 아키텍처.

이 다이어그램은 다음 워크플로를 보여줍니다.

1: 컨테이너 이미지 스토리지 - Amazon ECR은 엣지 처리에 필요한 AWS IoT Greengrass 컨테이너 이미지와 사용자 지정 애플리케이션 컨테이너를 저장합니다.

2 3: 컨테이너 배포 - Amazon ECS Anywhere는 AWS IoT Greengrass Amazon ECR에서 엣지 로케이션으로 컨테이너 이미지를 배포하여 컨테이너 수명 주기 및 배포 프로세스를 관리합니다.

4: 구성 요소 배포 - 배포된 AWS IoT Greengrass 코어는 구성에 따라 관련 구성 요소를 자동으로 배포합니다. 구성 요소에는 컨테이너화된 환경 내의 AWS IoT SiteWise 엣지 및 기타 필요한 엣지 처리 구성 요소가 포함됩니다.

5: 데이터 수집 - 완전히 구성된 후 엣지 로케이션의 다양한 IoT 데이터 소스에서 원격 측정 및 센서 데이터를 수집하기 AWS IoT Greengrass 시작합니다.

6: 데이터 처리 및 클라우드 통합 - 컨테이너화된 AWS IoT Greengrass 코어는 배포된 구성 요소(산업 데이터용 AWS IoT SiteWise Edge 포함)를 사용하여 로컬에서 데이터를 처리합니다. 그런 다음 추가 분석 및 저장을 위해 처리된 데이터를 AWS 클라우드 서비스로 전송합니다.

도구

AWS 서비스

  • Amazon ECS Anywhere는 자체 인프라에서 Amazon ECS 작업 및 서비스를 배포, 사용 및 관리하는 데 도움이 됩니다.

  • Amazon Elastic Compute Cloud(Amazon EC2)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.

  • Amazon Elastic Container Registry(Amazon ECR)는 안전하고 확장성이 있고 신뢰할 수 있는 관리형 컨테이너 이미지 레지스트리 서비스입니다.

  • AWS IoT Greengrass는 디바이스에서 IoT 애플리케이션을 구축, 배포 및 관리하는 데 도움이 되는 오픈 소스 사물 인터넷(IoT) 엣지 런타임 및 클라우드 서비스입니다.

  • AWS IoT SiteWise를 사용하면 대규모로 산업 장비 데이터를 수집, 구성 및 분석할 수 있습니다.

기타 도구

  • Docker는 운영 체제 수준의 가상화를 사용하여 컨테이너에 소프트웨어를 제공하는 서비스형 플랫폼(PaaS) 제품 세트입니다.

  • Docker Compose는 멀티컨테이너 Docker 애플리케이션을 정의하고 실행하는 도구입니다.

  • Docker Engine은 애플리케이션을 구축하고 컨테이너화하기 위한 오픈 소스 컨테이너화 기술입니다.

코드 리포지토리

이 패턴의 코드는 GitHub AWS IoT Greengrass v2 Docker-in-Docker 리포지토리에서 사용할 수 있습니다.

에픽

작업설명필요한 기술

를 복제하고 리포지토리로 이동합니다.

리포지토리를 복제하려면 다음 명령을 사용합니다.

git clone https://github.com/aws-samples/aws-iot-greengrass-v2-docker-in-docker.git

docker 디렉터리로 이동하려면 다음 명령을 사용합니다.

cd aws-iot-greengrass-v2-docker-in-docker/docker

DevOps 엔지니어, AWS DevOps

Docker 이미지를 구축합니다.

기본(최신) 버전으로 Docker 이미지를 빌드하려면 다음 명령을 실행합니다.

docker build -t x86_64/aws-iot-greengrass:latest .

또는 특정 버전으로 Docker 이미지를 빌드하려면 다음 명령을 실행합니다.

docker build --build-arg GREENGRASS_RELEASE_VERSION=2.12.0 -t x86_64/aws-iot-greengrass:2.12.0 .

빌드를 확인하려면 다음 명령을 실행합니다.

docker images | grep aws-iot-greengrass

 

AWS DevOps, DevOps 엔지니어, 앱 개발자

(선택 사항) Amazon ECR로 푸시합니다.

  1. 리포지토리를 생성하려면 다음 명령을 실행합니다.

    aws ecr create-repository --repository-name aws-iot-greengrass-dind --region us-east-1

  2. 인증하려면 다음 명령을 실행합니다.

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <ACCOUNT-ID>.dkr.ecr.us-east-1.amazonaws.com

  3. 태그를 지정하고 푸시하려면 다음 명령을 실행합니다.

    docker tag x86_64/aws-iot-greengrass:latest <ACCOUNT-ID>.dkr.ecr.us-east-1.amazonaws.com/aws-iot-greengrass-dind:latest

    docker push <ACCOUNT_ID>.dkr.ecr.us-east-1.amazonaws.com/aws-iot-greengrass-dind:latest

앱 개발자, AWS DevOps, DevOps 엔지니어
작업설명필요한 기술

인증 방법을 선택합니다.

다음 옵션 중 하나를 선택하세요.

  • 옵션 1(권장): IAM 역할 - 적절한 IAM 역할이 있는 Amazon EC2, Amazon ECS 또는 Amazon EKS에서 실행되는 경우를 사용합니다. 추가 구성이 필요하지 않습니다.

  • 옵션 2: 환경 변수 - 테스트 및 개발용.

  • 옵션 3: 자격 증명 파일 - 프로덕션에는 권장되지 않습니다.

  • 옵션 4: 레거시 env.cfg 파일.

관리자

인증 방법을 구성합니다.

선택한 인증 방법의 경우 다음 구성 지침을 사용합니다.

  • 옵션 2(환경 변수) - AWS_ACCESS_KEY_ID, 및 선택적으로 AWS_SECRET_ACCESS_KEY를 준비합니다AWS_SESSION_TOKEN.

  • 옵션 3(Credentials 파일) - 자격 증명 디렉터리 및 파일 생성:

    • (a) 다음 명령을 실행합니다.

      mkdir -p ~/greengrass-v2-credentials

    • (b)에서 다음 파일을 생성합니다~/greengrass-v2-credentials/credentials.

      [default]

      aws_access_key_id=YourAccessKey

      aws_secret_access_key=YourSecretKey

    • (c) 다음과 같이 파일을 보호합니다.

      chmod 600 ~/greengrass-v2-credentials/credentials

  • 옵션 4(env.cfg) - 다음과 같이 docker 디렉터리에 env.cfg 파일을 생성합니다.

    GGC_ROOT_PATH=/greengrass/v2

    AWS_REGION=us-east-1

    PROVISION=true

    THING_NAME=MyGreengrassCore

    THING_GROUP_NAME=MyGreengrassCoreGroup

    TES_ROLE_NAME=GreengrassV2TokenExchangeRole

    TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias

    COMPONENT_DEFAULT_USER=ggc_user:ggc_group

관리자
작업설명필요한 기술

docker-compose.yml를 구성합니다.

다음과 같이 환경 변수로 docker-compose.yml 파일을 업데이트합니다.

  • 주요 변수: PROVISION, AWS_REGION, THING_NAME, THING_GROUP_NAME, TES_ROLE_NAME, TES_ROLE_ALIAS_NAME

  • 환경 변수를 통한 자격 증명의 경우 다음 주석 처리를 해제합니다.

    environment:

    - AWS_ACCESS_KEY_ID=YourKey

    - AWS_SECRET_ACCESS_KEY=YourSecret

  • 자격 증명 파일의 경우 다음 주석 처리를 해제합니다.

    volumes:

    - ~/greengrass-v2-credentials:/root/.aws/:ro

  • 로그 지속성의 경우 다음을 추가합니다.

    volumes:

    - ./logs:/greengrass/v2/logs

DevOps 엔지니어

컨테이너를 시작하고 확인합니다.

포그라운드에서 시작하려면 다음 명령을 실행합니다.

docker-compose up --build

또는 백그라운드에서 시작하려면 다음 명령을 실행합니다.

docker-compose up --build -d

상태를 확인하려면 다음 명령을 실행합니다.

docker-compose ps

로그를 모니터링하려면 다음 명령을 실행합니다.

docker-compose logs -f

DevOps 엔지니어
작업설명필요한 기술

Docker CLI를 사용하여 컨테이너를 실행합니다.

  • 프로비저닝 없이 기본 실행을 시작하려면 다음 명령을 실행합니다.

    docker run --init --privileged -it --name aws-iot-greengrass x86_64/aws-iot-greengrass:latest

  • 환경 변수로 실행을 시작하려면 다음 명령을 실행합니다.

    docker run --init --privileged -it --name aws-iot-greengrass -e PROVISION=true -e AWS_REGION=us-east-1 -e AWS_ACCESS_KEY_ID=YourKey -e AWS_SECRET_ACCESS_KEY=YourSecret -e THING_NAME=MyGreengrassCore -e THING_GROUP_NAME=MyGreengrassCoreGroup -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • 자격 증명 파일로 실행을 시작하려면 다음 명령을 실행합니다.

    docker run --init --privileged -it --name aws-iot-greengrass -v ~/greengrass-v2-credentials:/root/.aws:ro -e PROVISION=true -e AWS_REGION=us-east-1 -e THING_NAME=MyGreengrassCore -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • env.cfg 파일로 실행을 시작하려면 다음 명령을 실행합니다.

    docker run --init --privileged -it --name aws-iot-greengrass -v ~/greengrass-v2-credentials:/root/.aws:ro --env-file env.cfg -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • 영구 로그로 실행을 시작하려면 다음 명령을 실행합니다.

    docker run --init --privileged -it --name aws-iot-greengrass -v \$(pwd)/logs:/greengrass/v2/logs x86_64/aws-iot-greengrass:latest

DevOps 엔지니어

컨테이너를 확인합니다.

  • 컨테이너의 상태를 확인하려면 다음 명령을 실행합니다.

    docker ps | grep aws-iot-greengrass

  • 로그를 모니터링하려면 다음 명령을 실행합니다.

    docker logs -f aws-iot-greengrass

DevOps 엔지니어
작업설명필요한 기술

애플리케이션을 배포합니다.

  • 애플리케이션 컨테이너를 배포하려면 다음 명령을 실행합니다.

    docker run -d --name my-app nginx:alpine

  • 배포를 확인하려면 다음 명령을 실행합니다.

    docker ps

  • 로그에 액세스하려면 다음 명령을 실행합니다.

    cd /greengrass/v2/logs && cat greengrass.log

앱 개발자

Docker-in-Docker에 액세스하고 테스트합니다.

  1. 컨테이너에서 쉘을 열려면 다음 명령을 실행합니다.

    docker exec -it aws-iot-greengrass sh

  2. Docker를 확인하려면 다음 명령을 실행합니다.

    docker --version

    docker ps

  3. Docker-in-Docker를 테스트하려면 다음 명령을 실행합니다.

    docker run --rm hello-world

DevOps 엔지니어
작업설명필요한 기술

Amazon ECS 클러스터를 설정합니다.

  • Amazon ECS 클러스터를 생성하려면 다음 명령을 실행합니다.

    aws ecs create-cluster --cluster-name greengrass-cluster --region us-east-1

  • SSM 활성화를 생성하려면 다음 명령을 실행합니다.

    aws ssm create-activation --default-instance-name greengrass-edge --iam-role GreengrassECSAnywhereRole --registration-limit 10 --region us-east-1

  • 엣지 디바이스에 SSM 에이전트를 설치하려면 다음 명령을 실행합니다.

    curl -o install.sh https://s3.amazonaws.com/aws-ssm-downloads/latest/linux_amd64/install.sh

    chmod +x install.sh

    ./install.sh activation-code activation-id us-east-1

관리자

Amazon ECS 작업을 배포합니다.

  • /var/lib/docker 및 작업에 대한 privileged:true, 환경 변수 및 볼륨 마운트greengrass-task-definition.json를 포함한 /greengrass/v2.Register 작업 구성containerDefinitions으로를 생성합니다. 다음 명령을 실행합니다.

    aws ecs register-task-definition --cli-input-json file://greengrass-task-definition.json

  • 서비스를 생성하려면 다음 명령을 실행합니다.

    aws ecs create-service --cluster greengrass-cluster --service-name greengrass-service --task-definition greengrass-dind --desired-count 1 --launch-type EXTERNAL --region us-east-1

  • 배포를 확인하려면 다음 명령을 실행합니다.

    aws ecs describe-services --cluster greengrass-cluster --services greengrass-service --region us-east-1

관리자
작업설명필요한 기술

컨테이너를 중지합니다.

  • Docker Compose를 사용하여 컨테이너를 중지하려면 다음 명령을 실행합니다.

    docker-compose stop

    docker-compose down

    docker-compose down -v

  • Docker CLI를 사용하여 컨테이너를 중지(볼륨 제거)하려면 다음 명령을 실행합니다.

    docker stop aws-iot-greengrass

    docker rm aws-iot-greengrass

  • 강제 제거를 사용하여 컨테이너를 중지하려면 다음 명령을 실행합니다.

    docker rm -f aws-iot-greengrass

DevOps 엔지니어

문제 해결

문제Solution

컨테이너가 권한 오류로 시작되지 않습니다.

  1. 컨테이너가 Docker-in-Docker에 필요한 --privileged 플래그로 실행되는지 확인하려면 다음 명령을 실행합니다.

    docker run --init --privileged -it --name aws-iot-greengrass x86_64/aws-iot-greengrass:latest

  2. docker-compose.yml 파일에서 다음을 설정합니다.

    privileged: true

주의

--privileged는 컨테이너에 확장 권한을 부여합니다.

자격 증명 오류와 함께 프로비저닝이 실패합니다.

자격 증명이 올바르게 구성되었는지 확인하려면 다음 단계를 사용합니다.

  1. IAM 역할 확인:

    aws sts get-caller-identity

  2. 환경 변수를 확인합니다.

    docker exec -it aws-iot-greengrass sh -c 'echo \$AWS_ACCESS_KEY_ID'

  3. 자격 증명 파일 확인:

    docker exec -it aws-iot-greengrass sh -c 'cat /root/.aws/credentials'

IAM 권한에 iot:CreateThing, , iot:CreatePolicy, iot:AttachPolicyiam:CreateRole가 포함되어 있는지 확인합니다iam:AttachRolePolicy.

컨테이너 내부의 Docker 데몬에 연결할 수 없습니다.

  1. Docker 데몬 상태를 확인합니다.

    docker exec -it aws-iot-greengrass sh -c 'ps aux | grep dockerd'

  2. Docker 소켓이 존재하는지 확인합니다.

    docker exec -it aws-iot-greengrass sh -c 'ls -la /var/run/docker.sock'

  3. 필요한 경우 수동으로 시작합니다.

    docker exec -it aws-iot-greengrass sh -c 'dockerd > /var/log/docker.log 2>&1 &'

컨테이너에 디스크 공간이 부족합니다.

  1. 디스크 공간 확인:

    df -h

  2. Docker 리소스 정리:

    docker system prune -a --volumes

  3. 이전 Greengrass 아티팩트 제거:

    docker exec -it aws-iot-greengrass sh -c 'rm -rf /greengrass/v2/work/*'

최소 디스크 공간 보장: 기본 작업의 경우 5GB, AWS IoT SiteWise Edge의 경우 50GB

빌드 문제.

  1. docker 디렉터리에 있는지 확인합니다.

    cd docker && pwd

  2. Dockerfile 존재하는지 확인합니다.

    ls -la Dockerfile

  3. Docker가 설치되어 실행 중인지 확인합니다.

    docker --version && docker ps

네트워크 연결 문제.

  1. DNS 확인 테스트:

    docker exec -it aws-iot-greengrass sh -c 'nslookup google.com'

  2. AWS 연결 테스트:

    docker exec -it aws-iot-greengrass sh -c 'curl https://iot.us-east-1.amazonaws.com'

방화벽이 아웃바운드 HTTPS(443) 및 MQTT(8883) 트래픽을 허용하는지 확인합니다.

Greengrass 구성 요소가 배포되지 않습니다.

  1. Greengrass 로그 확인:

    docker exec -it aws-iot-greengrass sh -c 'cat /greengrass/v2/logs/greengrass.log'

  2. TES 역할 구성 확인:

    aws iot describe-role-alias --role-alias TES_ROLE_ALIAS_NAME

/greengrass/v2/logs/ 디렉터리에서 구성 요소별 로그를 확인합니다.

컨테이너는 시작 후 즉시 종료됩니다.

  1. 컨테이너 로그에서 오류를 확인합니다.

    docker logs aws-iot-greengrass

  2. 디버깅을 위해 대화형 셸로를 실행합니다.

    docker run --init --privileged -it --entrypoint sh x86_64/aws-iot-greengrass:latest

인 경우 필요한 모든 환경 변수가 올바르게 설정되었는지 확인합니다PROVISION=true. 컨테이너를 시작할 때 --init 플래그가 사용되는지 확인합니다.

관련 리소스

AWS resources

기타 리소스

추가 정보

  • AWS IoT SiteWise 엣지 데이터 처리의 경우 AWS IoT Greengrass 환경 내에서 Docker를 사용할 수 있어야 합니다.

  • 중첩 컨테이너를 실행하려면 관리자 수준 자격 증명으로 AWS IoT Greengrass 컨테이너를 실행해야 합니다.