

지원 종료 공지: 2026년 10월 7일에는에 대한 지원을 중단할 AWS 예정입니다 AWS IoT Greengrass Version 1. 2026년 10월 7일 이후에는 더 이상 AWS IoT Greengrass V1 리소스에 액세스할 수 없습니다. 자세한 내용은 [에서 마이그레이션 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)을 참조하세요.

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

# Docker 컨테이너 AWS IoT Greengrass 에서 실행
<a name="run-gg-in-docker-container"></a>

AWS IoT Greengrass 는 [Docker](https://www.docker.com/) 컨테이너에서 실행되도록 구성할 수 있습니다.

 AWS IoT Greengrass 코어 소프트웨어 및 종속성이 설치된 [ Amazon CloudFront를 통해](what-is-gg.md#gg-docker-download) Dockerfile을 다운로드할 수 있습니다. 다른 플랫폼 아키텍처에서 실행되도록 Docker 이미지를 수정하거나 Docker 이미지의 크기를 줄이려면 Docker 패키지 다운로드에 있는 `README` 파일을 참조하십시오.

실험을 시작하는 데 도움이 되도록는 AWS IoT Greengrass 코어 소프트웨어 및 종속성이 설치된 사전 빌드된 Docker 이미지 AWS IoT Greengrass AWS 도 제공합니다. [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) 또는 [Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)(Amazon ECR)에서 이미지를 다운로드할 수 있습니다. 이러한 미리 빌드된 이미지는 Amazon Linux 2(x86\$164) 및 Alpine Linux(x86\$164, Armv7l 또는 AArch64) 기본 이미지를 사용합니다.

**중요**  
<a name="docker-images-end-of-maintenance"></a>2022년 6월 30일에 Amazon Elastic Container Registry(Amazon ECR) 및 Docker Hub에 게시된 AWS IoT Greengrass 코어 소프트웨어 v1.x Docker 이미지에 대한 유지 관리를 AWS IoT Greengrass 종료했습니다. 유지 관리 종료 후 1년이 되는 2023년 6월 30일까지 Amazon ECR 및 Docker Hub에서 이 Docker 이미지를 계속 다운로드할 수 있습니다. 그러나 AWS IoT Greengrass 코어 소프트웨어 v1.x Docker 이미지는 2022년 6월 30일에 유지 관리가 종료된 후 더 이상 보안 패치 또는 버그 수정을 받지 않습니다. 이러한 Docker 이미지에 의존하는 프로덕션 워크로드를 실행하는 경우에서 AWS IoT Greengrass 제공하는 Dockerfiles를 사용하여 자체 Docker 이미지를 빌드하는 것이 좋습니다. 자세한 내용은 [AWS IoT Greengrass Docker 소프트웨어](what-is-gg.md#gg-docker-download) 단원을 참조하십시오.

이 주제에서는 Amazon ECR에서 AWS IoT Greengrass Docker 이미지를 다운로드하고 Windows, macOS 또는 Linux(x86\$164) 플랫폼에서 실행하는 방법을 설명합니다. 이 주제에는 다음 단계가 포함되어 있습니다.

1. [Amazon ECR에서 AWS IoT Greengrass 컨테이너 이미지 가져오기](#docker-pull-image)

1. [Greengrass 그룹 및 코어 생성 및 구성](#docker-config-gg)

1. [ AWS IoT Greengrass 로컬에서 실행](#docker-run-gg)

1. [그룹에 대한 "컨테이너 없음" 컨테이너화 구성](#docker-no-container)

1. [Docker 컨테이너너에 Lambda 함수 배포](#docker-add-lambdas)

1. [(선택 사항) Docker 컨테이너에서 Greengrass와 상호 작용하는 장치 배포](#docker-add-devices)

Docker 컨테이너 AWS IoT Greengrass 에서를 실행할 때는 다음 기능이 지원되지 않습니다.<a name="docker-image-unsupported-features"></a>
+ [Greengrass 컨테이너](connectors.md) 모드에서 실행되는 **커넥터** Docker 컨테이너에서 커넥터를 실행하려면 커넥터가 **컨테이너 없음** 모드로 실행되어야 합니다. **컨테이너 없음** 모드를 지원하는 커넥터를 찾으려면 [AWS에서 제공한 Greengrass 커넥터](connectors-list.md) 단원을 참조하십시오. 이러한 커넥터 중 일부에는 **컨테이너 없음**으로 설정해야 하는 격리 모드 파라미터가 있습니다.
+ [로컬 장치 및 볼륨 리소스](access-local-resources.md). Docker 컨테이너에서 실행되는 사용자 정의 Lambda 함수는 코어의 장치 및 볼륨에 직접 액세스해야 합니다.

Greengrass 그룹의 Lambda 런타임 환경이 Docker [컨테이너에서 실행하는 데 필요한 컨테이너 없음](lambda-group-config.md#no-container-mode)으로 설정된 경우 이러한 기능은 지원되지 않습니다. AWS IoT Greengrass 

## 사전 조건
<a name="docker-image-prerequisites"></a>

이 자습서를 시작하기 전에 다음 작업을 수행해야 합니다.<a name="docker-image-prereq-list"></a>
+ 선택한 AWS Command Line Interface (AWS CLI) 버전에 따라 호스트 컴퓨터에 다음 소프트웨어 및 버전을 설치해야 합니다.

------
#### [ AWS CLI version 2 ]
  + [Docker](https://docs.docker.com/install/), 버전 18.09 이상. 이전 버전도 작동할 수 있지만 18.09 이상을 사용하는 것이 좋습니다.
  + AWS CLI 버전 2.0.0 이상.
    +  AWS CLI 버전 2를 설치하려면 [AWS CLI 버전 2 설치를 참조하세요](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
    + 를 구성하려면 구성을 AWS CLI참조하세요. [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) 
**참고**  
Windows 컴퓨터에서 이후 AWS CLI 버전 2로 업그레이드하려면 [MSI 설치](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html) 프로세스를 반복해야 합니다.

------
#### [ AWS CLI version 1 ]
  + [Docker](https://docs.docker.com/install/), 버전 18.09 이상. 이전 버전도 작동할 수 있지만 18.09 이상을 사용하는 것이 좋습니다.
  + [Python](https://www.python.org/downloads/), 버전 3.6 이상.
  + [pip](https://pip.pypa.io/en/stable/installing) 버전 18.1 이상
  + AWS CLI 버전 1.17.10 이상
    +  AWS CLI 버전 1을 설치하려면 [AWS CLI 버전 1 설치를 참조하세요](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html).
    + 를 구성하려면 구성을 AWS CLI참조하세요. [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) 
    +  AWS CLI 버전 1의 최신 버전으로 업그레이드하려면 다음 명령을 실행합니다.

      ```
      pip install awscli --upgrade --user
      ```
**참고**  
Windows에서 AWS CLI 버전 1의 [MSI 설치를](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#msi-on-windows) 사용하는 경우 다음 사항에 유의하세요.  
 AWS CLI 버전 1 설치가 botocore를 설치하지 못하는 경우 [Python 및 pip 설치를](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html#awscli-install-windows-pip) 사용해 보세요.
이후 AWS CLI 버전 1로 업그레이드하려면 MSI 설치 프로세스를 반복해야 합니다.

------
+ Amazon Elastic Container Registry(Amazon ECR) 리소스에 액세스하려면 다음 권한을 부여해야 합니다.
  + Amazon ECR을 사용하려면 사용자가 AWS Identity and Access Management (IAM) 정책을 통해 `ecr:GetAuthorizationToken` 권한을 부여해야 레지스트리에 인증하고 Amazon ECR 리포지토리에서 이미지를 푸시하거나 가져올 수 있습니다. 자세한 내용은 *Amazon Elastic Container Registry 사용 설명서*의 [Amazon ECR 리포지토리 정책 예시](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) 및 [One Amazon ECR 리포지토리 액세스](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-access-one-bucket)를 참조하십시오.

## 1단계: Amazon ECR에서 AWS IoT Greengrass 컨테이너 이미지 가져오기
<a name="docker-pull-image"></a>

AWS 는 AWS IoT Greengrass 코어 소프트웨어가 설치된 Docker 이미지를 제공합니다.

**주의**  <a name="docker-images-python-2.7-removal"></a>
 AWS IoT Greengrass 코어 소프트웨어의 v1.11.6부터는 Greengrass Docker 이미지에 Python 2.7이 더 이상 포함되지 않습니다. Python 2.7이 2020년에 end-of-life에 도달했으며 더 이상 보안 업데이트를 수신하지 않기 때문입니다. 이러한 Docker 이미지로 업데이트하기로 선택한 경우, 업데이트를 프로덕션 장치에 배포하기 전에 애플리케이션이 새 Docker 이미지와 호환되는지 확인하는 것을 권장합니다. Greengrass Docker 이미지를 사용하는 애플리케이션에 Python 2.7이 필요한 경우, Python 2.7을 애플리케이션에 포함하도록 Greengrass Dockerfile을 수정할 수 있습니다.

Amazon ECR에서 `latest` 이미지를 끌어오는 방법을 보여 주는 단계를 알아보려면 해당 운영 체제를 선택하십시오.

### 컨테이너 이미지 가져오기(Linux)
<a name="docker-pull-image-linux"></a>

컴퓨터 터미널에서 다음 명령을 실행합니다.

1. <a name="docker-get-login"></a>Amazon ECR의 AWS IoT Greengrass 레지스트리에 로그인합니다.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   성공하면 `Login Succeeded` 출력이 인쇄됩니다.

1. <a name="docker-docker-pull"></a> AWS IoT Greengrass 컨테이너 이미지를 검색합니다.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**참고**  
`latest` 이미지에는 Amazon Linux 2 기본 이미지에 설치된 AWS IoT Greengrass 코어 소프트웨어의 안정적인 최신 버전이 포함되어 있습니다. 또한 리포지토리에서 다른 이미지를 끌어올 수도 있습니다. 사용 가능한 모든 이미지에 대한 태그를 찾으려면 [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass)의 **태그** 페이지를 확인하거나 **aws ecr list-images** 명령을 사용하십시오. 예제:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

1. symlink 및 hardlink 보호를 활성화합니다. 컨테이너 AWS IoT Greengrass 에서 실행을 실험하는 경우 현재 부팅에 대해서만 설정을 활성화할 수 있습니다.
**참고**  
**sudo**를 사용해 이러한 명령을 실행해야 할 수 있습니다.
   + 현재 부트에 대해서만 설정을 활성화하려면:

     ```
     echo 1 > /proc/sys/fs/protected_hardlinks
     echo 1 > /proc/sys/fs/protected_symlinks
     ```
   + 재시작 후에도 유지되도록 설정을 활성화하려면:

     ```
     echo '# AWS IoT Greengrass' >> /etc/sysctl.conf 
     echo 'fs.protected_hardlinks = 1' >> /etc/sysctl.conf 
     echo 'fs.protected_symlinks = 1' >> /etc/sysctl.conf
     
     sysctl -p
     ```

1. <a name="docker-linux-enable-ipv4"></a> AWS IoT Greengrass 클라우드 배포 및 MQTT 통신이 Linux에서 작동하는 데 필요한 IPv4 네트워크 전달을 활성화합니다. `/etc/sysctl.conf` 파일에서 `net.ipv4.ip_forward`를 1로 설정한 다음 `sysctls`를 다시 로드합니다.

   ```
   sudo nano /etc/sysctl.conf
   # set this net.ipv4.ip_forward = 1
   sudo sysctl -p
   ```
**참고**  
nano 대신 사용자가 선택한 편집기를 사용할 수 있습니다.

### 컨테이너 이미지 가져오기(macOS)
<a name="docker-pull-image-mac"></a>

컴퓨터 터미널에서 다음 명령을 실행합니다.

1. <a name="docker-get-login"></a>Amazon ECR의 AWS IoT Greengrass 레지스트리에 로그인합니다.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   성공하면 `Login Succeeded` 출력이 인쇄됩니다.

1. <a name="docker-docker-pull"></a> AWS IoT Greengrass 컨테이너 이미지를 검색합니다.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**참고**  
`latest` 이미지에는 Amazon Linux 2 기본 이미지에 설치된 AWS IoT Greengrass 코어 소프트웨어의 안정적인 최신 버전이 포함되어 있습니다. 또한 리포지토리에서 다른 이미지를 끌어올 수도 있습니다. 사용 가능한 모든 이미지에 대한 태그를 찾으려면 [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass)의 **태그** 페이지를 확인하거나 **aws ecr list-images** 명령을 사용하십시오. 예제:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

### 컨테이너 이미지 가져오기(Windows)
<a name="docker-pull-image-windows"></a>

명령 프롬프트에서 다음 명령을 실행합니다. Windows에서 도커 명령을 사용하려면 먼저 도커 데스크톱이 실행 중이어야 합니다.

1. <a name="docker-get-login"></a>Amazon ECR의 AWS IoT Greengrass 레지스트리에 로그인합니다.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   성공하면 `Login Succeeded` 출력이 인쇄됩니다.

1. <a name="docker-docker-pull"></a> AWS IoT Greengrass 컨테이너 이미지를 검색합니다.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**참고**  
`latest` 이미지에는 Amazon Linux 2 기본 이미지에 설치된 AWS IoT Greengrass 코어 소프트웨어의 안정적인 최신 버전이 포함되어 있습니다. 또한 리포지토리에서 다른 이미지를 끌어올 수도 있습니다. 사용 가능한 모든 이미지에 대한 태그를 찾으려면 [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass)의 **태그** 페이지를 확인하거나 **aws ecr list-images** 명령을 사용하십시오. 예제:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

## 2단계: Greengrass 그룹 및 코어 생성 및 구성
<a name="docker-config-gg"></a>

Docker 이미지에는 AWS IoT Greengrass 코어 소프트웨어가 설치되어 있지만 Greengrass 그룹 및 코어를 생성해야 합니다. 이 단계에는 인증서와 코어 구성 파일을 다운로드하는 작업도 포함됩니다.
+ [모듈 2: AWS IoT Greengrass 코어 소프트웨어 설치](module2.md) 섹션의 단계를 따르세요. AWS IoT Greengrass 코어 소프트웨어를 다운로드하고 실행하는 단계를 건너뜁니다. 소프트웨어와 해당 런타임 종속성은 Docker 이미지에 이미 설치되어 있습니다.

## 3단계: AWS IoT Greengrass 로컬에서 실행
<a name="docker-run-gg"></a>

그룹이 구성된 후에는 코어를 구성하고 시작할 준비가 된 것입니다. 이렇게 하는 방법을 보여 주는 단계를 알아보려면 운영 체제를 선택하십시오.

### 로컬로 Greengrass 실행(Linux)
<a name="docker-run-gg-linux"></a>

컴퓨터 터미널에서 다음 명령을 실행합니다.

1. <a name="docker-create-certs-folder"></a>장치의 보안 리소스를 위한 폴더를 생성하고 인증서와 키를 이 폴더로 옮깁니다. 다음 명령을 실행합니다. *path-to-security-files*을 보안 리소스 경로로 바꾸고 *certificateId*를 파일 이름의 인증서 ID로 대체합니다.

   ```
   mkdir /tmp/certs
   mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs
   mv path-to-security-files/certificateId-public.pem.key /tmp/certs
   mv path-to-security-files/certificateId-private.pem.key /tmp/certs
   mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
   ```

1. <a name="docker-create-config-folder"></a>디바이스 구성을 위한 폴더를 생성하고 AWS IoT Greengrass 코어 구성 파일을 해당 폴더로 이동합니다. 다음 명령을 실행합니다. *path-to-config-file*을 구성 파일의 경로로 바꿉니다.

   ```
   mkdir /tmp/config
   mv path-to-config-file/config.json /tmp/config
   ```

1. <a name="docker-docker-run"></a>Docker 컨테이너에서 인증서 AWS IoT Greengrass 및 구성 파일을 시작하고 바인드 마운트합니다.

   인증서와 구성 파일의 압축을 푼 경로로 `/tmp`를 바꿉니다.

   ```
   docker run --rm --init -it --name aws-iot-greengrass \
   --entrypoint /greengrass-entrypoint.sh \
   -v /tmp/certs:/greengrass/certs \
   -v /tmp/config:/greengrass/config \
   -p 8883:8883 \
   216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   출력은 다음 예시와 같은 형식이어야 합니다.

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

### 로컬로 Greengrass 실행(macOS)
<a name="docker-run-gg-mac"></a>

컴퓨터 터미널에서 다음 명령을 실행합니다.

1. <a name="docker-create-certs-folder"></a>장치의 보안 리소스를 위한 폴더를 생성하고 인증서와 키를 이 폴더로 옮깁니다. 다음 명령을 실행합니다. *path-to-security-files*을 보안 리소스 경로로 바꾸고 *certificateId*를 파일 이름의 인증서 ID로 대체합니다.

   ```
   mkdir /tmp/certs
   mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs
   mv path-to-security-files/certificateId-public.pem.key /tmp/certs
   mv path-to-security-files/certificateId-private.pem.key /tmp/certs
   mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
   ```

1. <a name="docker-create-config-folder"></a>디바이스 구성을 위한 폴더를 생성하고 AWS IoT Greengrass 코어 구성 파일을 해당 폴더로 이동합니다. 다음 명령을 실행합니다. *path-to-config-file*을 구성 파일의 경로로 바꿉니다.

   ```
   mkdir /tmp/config
   mv path-to-config-file/config.json /tmp/config
   ```

1. <a name="docker-docker-run"></a>Docker 컨테이너에서 인증서 AWS IoT Greengrass 및 구성 파일을 시작하고 바인드 마운트합니다.

   인증서와 구성 파일의 압축을 푼 경로로 `/tmp`를 바꿉니다.

   ```
   docker run --rm --init -it --name aws-iot-greengrass \
   --entrypoint /greengrass-entrypoint.sh \
   -v /tmp/certs:/greengrass/certs \
   -v /tmp/config:/greengrass/config \
   -p 8883:8883 \
   216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   출력은 다음 예시와 같은 형식이어야 합니다.

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

### 로컬로 Greengrass 실행(Windows)
<a name="docker-run-gg-windows"></a>

1. 장치의 보안 리소스를 위한 폴더를 생성하고 인증서와 키를 이 폴더로 옮깁니다. 명령 프롬프트에서 다음 명령을 실행합니다. *path-to-security-files*을 보안 리소스 경로로 바꾸고 *certificateId*를 파일 이름의 인증서 ID로 대체합니다.

   ```
   mkdir C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-certificate.pem.crt C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-public.pem.key C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-private.pem.key C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\AmazonRootCA1.pem C:\Users\%USERNAME%\Downloads\certs
   ```

1. 디바이스 구성을 위한 폴더를 생성하고 AWS IoT Greengrass 코어 구성 파일을 해당 폴더로 이동합니다. 명령 프롬프트에서 다음 명령을 실행합니다. *path-to-config-file*을 구성 파일의 경로로 바꿉니다.

   ```
   mkdir C:\Users\%USERNAME%\Downloads\config
   move path-to-config-file\config.json C:\Users\%USERNAME%\Downloads\config
   ```

1. Docker 컨테이너에서 인증서 AWS IoT Greengrass 및 구성 파일을 시작하고 바인드 마운트합니다. 명령 프롬프트에서 다음 명령을 실행합니다.

   ```
   docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   도커에서 `C:\` 드라이브를 도커 데몬과 공유하라는 메시지가 나타나면 이 작업을 허용하여 도커 컨테이너 내부에 `C:\` 디렉터리를 바인드 탑재합니다. 자세한 내용은 도커 설명서의 [공유 드라이브](https://docs.docker.com/docker-for-windows/#shared-drives)를 참조하십시오.

   출력은 다음 예시와 같은 형식이어야 합니다.

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

**참고**  
컨테이너가 셸을 열지 않고 즉시 종료되는 경우 이미지 시작 시 Greengrass 런타임 로그를 바인드 탑재하여 문제를 디버그할 수 있습니다. 자세한 내용은 [도커 컨테이너 외부의 Greengrass 런타임 로그를 유지하려면](#debugging-docker-persist-logs) 단원을 참조하십시오.

## 4단계: Greengrass 그룹에 대한 "컨테이너 없음" 컨테이너화 구성
<a name="docker-no-container"></a>

Docker 컨테이너 AWS IoT Greengrass 에서를 실행하는 경우 모든 Lambda 함수는 컨테이너화 없이 실행되어야 합니다. 이 단계에서는 그룹의 기본 컨테이너화를 **컨테이너 없음**으로 설정합니다. 처음으로 그룹을 배포하기 전에 이 작업을 수행해야 합니다.

1. <a name="console-gg-groups"></a> AWS IoT 콘솔 탐색 창의 **관리**에서 **Greengrass 디바이스**를 확장한 다음 **그룹(V1)을** 선택합니다.

1. <a name="group-choose-group"></a>설정을 변경하려는 그룹을 선택합니다.

1. **Lambda 함수**탭을 선택합니다.

1. **기본 Lambda 함수 런타임 환경**에서 **편집**을 선택합니다.

1. **기본 Lambda 함수 런타임 환경 편집**의 **기본 Lambda 함수 컨테이너화**에서 컨테이너화 설정을 변경합니다.

1. **저장**을 선택합니다.

변경 사항은 그룹이 배포될 때 적용됩니다.

자세한 내용은 [그룹 내 Lambda 함수의 기본 컨테이너화 설정](lambda-group-config.md#lambda-containerization-groupsettings) 단원을 참조하십시오.

**참고**  
기본적으로 Lambda 함수는 그룹 컨테이너화 설정을 사용합니다. AWS IoT Greengrass 이(가) Docker 컨테이너에서 실행 중일 때 Lambda 함수에 **컨테이너 없음** 설정을 재정의하면 배포가 실패합니다.

## 5단계: AWS IoT Greengrass Docker 컨테이너에 Lambda 함수 배포
<a name="docker-add-lambdas"></a>

수명이 긴 Lambda 함수를 Greengrass Docker 컨테이너에 배포할 수 있습니다.
+ [모듈 3(1부):의 Lambda 함수 AWS IoT Greengrass](module3-I.md)의 단계를 따라 수명이 긴 Hello World Lambda 함수를 컨테이너에 배포합니다.

## 6단계: (선택 사항) Docker 컨테이너에서 실행 중인 Greengrass와 상호 작용하는 클라이언트 장치 배포
<a name="docker-add-devices"></a>

Docker 컨테이너에서 실행 중일 AWS IoT Greengrass 때와 상호 작용하는 클라이언트 디바이스를 배포할 수도 있습니다.
+ [모듈 4: AWS IoT Greengrass 그룹의 클라이언트 디바이스와 상호 작용](module4.md)의 단계에 따라 코어에 연결하고 MQTT 메시지를 전송하는 클라이언트 장치를 배포합니다.

## AWS IoT Greengrass Docker 컨테이너 중지
<a name="docker-stop"></a>

 AWS IoT Greengrass Docker 컨테이너를 중지하려면 터미널 또는 명령 프롬프트에서 Ctrl\$1C를 누릅니다. 이 작업은 `SIGTERM`을 Greengrass 대몬 프로세스로 전송하여 Greengrass 대몬 프로세스와 해당 대몬 프로세스로 시작된 모든 Lambda 프로세스를 제거합니다. Docker 컨테이너는 `/dev/init` 프로세스를 통해 PID 1로 초기화됩니다. 이렇게 하면 남아 있는 좀비 프로세스를 제거하는 데 도움이 됩니다. 자세한 내용은 [Docker 실행 참조](https://docs.docker.com/engine/reference/commandline/run/#options)를 확인하십시오.

## Docker 컨테이너 AWS IoT Greengrass 의 문제 해결
<a name="troubleshooting-docker-gg"></a>

다음 정보를 사용하여 Docker 컨테이너 AWS IoT Greengrass 에서 실행과 관련된 문제를 해결할 수 있습니다.

### 오류: TTY가 아닌 장치에서 대화형 로그인을 수행할 수 없습니다.
<a name="docker-troubleshootin-ecr-get-login-password"></a>

**해결책:** `aws ecr get-login-password` 명령을 실행할 때 이 오류가 발생할 수 있습니다. 가장 최신의 AWS CLI 버전 2 또는 1 이상이 설치되어 있는지 확인합니다. AWS CLI 버전 2를 사용하는 것이 좋습니다. 자세한 내용은 *AWS Command Line Interface 사용자 가이드*에서 [AWS CLI설치](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)를 참조하세요.

### 오류: 알 수 없는 옵션: no-include-email
<a name="docker-troubleshooting-cli-version"></a>

**해결책:** `aws ecr get-login` 명령을 실행할 때 이 오류가 발생할 수 있습니다. 최신 AWS CLI 버전이 설치되어 있는지 확인합니다(예: 실행: `pip install awscli --upgrade --user`). Windows를 사용하고 있고 MSI 설치 관리자를 사용하여 CLI를 설치한 경우 설치 프로세스를 반복해야 합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [Microsoft Windows에 AWS Command Line Interface 설치](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html)를 참조하십시오.

### 경고: IPv4가 비활성화되어 있습니다. 네트워킹이 작동하지 않습니다.
<a name="docker-troubleshooting-ipv4-disabled"></a>

**해결 방법:** Linux 컴퓨터에서 실행할 때이 경고 또는 유사한 메시지가 표시될 수 AWS IoT Greengrass 있습니다. 이 [step](#docker-linux-enable-ipv4). AWS IoT Greengrass cloud 배포에 설명된 대로 IPv4 네트워크 전달을 활성화하면 IPv4 전달이 활성화되지 않은 경우 MQTT 통신이 작동하지 않습니다. 자세한 내용은 Docker 설명서의 [런타임에 네임스페이스 커널 파라미터(sysctls) 구성](https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime)을 참조하십시오.

### 오류: 방화벽이 Windows와 컨테이너 간의 파일 공유를 차단하고 있습니다.
<a name="docker-troubleshooting-firewall"></a>

**해결책:** Windows 컴퓨터에서 Docker를 실행할 때 이 오류 또는 `Firewall Detected` 메시지를 받을 수 있습니다. 이 오류는 VPN(가상 프라이빗 네트워크)에 로그인되어 있고 네트워크 설정 때문에 공유 드라이브가 탑재되지 않는 경우에도 발생할 수 있습니다. 이러한 경우에는 VPN을 끄고 Docker 컨테이너를 재실행합니다.

### <account-id><user-name>오류: GetAuthorizationToken 작업을 호출하는 동안 오류가 발생했습니다(AccessDenieException): 사용자: arn:aws:iam::<account-id>:user/<user-name>에게 수행할 권한이 없습니다: ecr:GetAuthorizationToken on resource: \$1
<a name="docker-troubleshooting-ecr-perms"></a>

Amazon ECR 리포지토리에 액세스할 충분한 권한이 없는데 `aws ecr get-login-password` 명령을 실행할 경우 이 오류가 발생할 수 있습니다. 자세한 내용은 *Amazon ECR 사용 설명서*의 [Amazon ECR 리포지토리 정책 예제](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) 및 [하나의 Amazon ECR 리포지토리에 액세스](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html)를 참조하세요.

일반적인 AWS IoT Greengrass 문제 해결 도움말은 섹션을 참조하세요[문제 해결 AWS IoT Greengrass](gg-troubleshooting.md).

### Docker 컨테이너 AWS IoT Greengrass 에서 디버깅
<a name="debugging-docker-gg"></a>

도커 컨테이너로 문제를 디버그하려면 Greengrass 런타임 로그를 유지하거나 대화형 셸을 도커 컨테이너에 연결할 수 있습니다.

#### 도커 컨테이너 외부의 Greengrass 런타임 로그를 유지하려면
<a name="debugging-docker-persist-logs"></a>

`/greengrass/ggc/var/log` 디렉터리를 바인드 마운트한 후 AWS IoT Greengrass Docker 컨테이너를 실행할 수 있습니다. 컨테이너가 종료되거나 제거된 후에도 로그는 유지됩니다.

**Linux 또는 macOS에서는**  
호스트에서 실행 중인 [Greengrass Docker 컨테이너를 중지](#docker-stop)하고 터미널에서 다음 명령을 실행합니다. 이렇게 하면 Greengrass `log` 디렉터리가 바인드 탑재되고 Docker 이미지가 시작됩니다.  
인증서와 구성 파일의 압축을 푼 경로로 `/tmp`를 바꿉니다.  

```
docker run --rm --init -it --name aws-iot-greengrass \
      --entrypoint /greengrass-entrypoint.sh \
      -v /tmp/certs:/greengrass/certs \
      -v /tmp/config:/greengrass/config \
      -v /tmp/log:/greengrass/ggc/var/log \
      -p 8883:8883 \
      216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
```
그런 다음 Docker 컨테이너 내부에서 Greengrass가 실행되는 중에 호스트의 `/tmp/log`에서 로그를 점검하여 무슨 일이 발생했는지 확인할 수 있습니다.

**Windows**  
호스트에서 실행 중인 [Greengrass Docker 컨테이너를 중지](#docker-stop)하고 명령 프롬프트에서 다음 명령을 실행합니다. 이렇게 하면 Greengrass `log` 디렉터리가 바인드 탑재되고 Docker 이미지가 시작됩니다.  

```
cd C:\Users\%USERNAME%\Downloads
mkdir log
docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -v c:/Users/%USERNAME%/Downloads/log:/greengrass/ggc/var/log -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
```
그런 다음 Docker 컨테이너 내부에서 Greengrass가 실행되는 중에 호스트의 `C:/Users/%USERNAME%/Downloads/log`에서 로그를 점검하여 무슨 일이 발생했는지 확인할 수 있습니다.

#### 대화형 셸을 도커 컨테이너에 연결하려면
<a name="debugging-docker-attach-shell"></a>

대화형 쉘을 실행 중인 AWS IoT Greengrass Docker 컨테이너에 연결할 수 있습니다. 이는 Greengrass 도커 컨테이너의 상태를 조사하는 데 도움이 될 수 있습니다.

**Linux 또는 macOS에서는**  
Greengrass Docker 컨테이너가 실행되는 동안 별도의 터미널에서 다음 명령을 실행합니다.  

```
docker exec -it $(docker ps -a -q -f "name=aws-iot-greengrass") /bin/bash
```

**Windows**  
Greengrass Docker 컨테이너가 실행되는 동안 별도의 명령 프롬프트에서 다음 명령을 실행합니다.  

```
docker ps -a -q -f "name=aws-iot-greengrass"
```
*gg-container-id*를 이전 명령의 `container_id` 결과로 바꿉니다.  

```
docker exec -it gg-container-id /bin/bash
```