AWS IoT Greengrass 문제 해결 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 2023년 6월 30일에 수명 연장 단계에 들어갔습니다. AWS IoT Greengrass V1 관리형 정책에 대한 자세한 정보는 섹션을 참조하세요. 이 날짜 이후에는 기능, 개선 사항, 버그 수정 또는 보안 패치를 제공하는 업데이트가 AWS IoT Greengrass V1 릴리스되지 않습니다. 에서 실행되는 기기는 AWS IoT Greengrass V1 중단되지 않으며 계속 작동하고 클라우드에 연결됩니다. 새로운 기능이 크게 추가되고 추가 플랫폼에 대한 지원이 추가되는 으로 마이그레이션하는 AWS IoT Greengrass Version 2 것이 좋습니다.

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

AWS IoT Greengrass 문제 해결

이 단원에서는 AWS IoT Greengrass 관련 문제를 해결하는 데 도움이 되는 문제 해결 정보와 가능한 해결책을 제공합니다.

AWS IoT Greengrass 할당량(한도)에 대한 자세한 내용은 Amazon Web Services 일반 참조서비스 할당량을 참조하세요.

AWS IoT Greengrass 코어 문제

AWS IoT Greengrass 코어 소프트웨어가 시작되지 않는 경우, 다음과 같은 일반 문제 해결 단계를 시도합니다.

  • 아키텍처에 적합한 바이너리를 설치했는지 확인합니다. 자세한 내용은 AWS IoT Greengrass 코어 소프트웨어를 참조하십시오.

  • 코어 디바이스가 로컬 스토리지를 사용할 수 있는지 확인합니다. 자세한 설명은 스토리지 문제 해결 섹션을 참조하세요.

  • runtime.logcrash.log에서 오류 메시지가 있는지 확인합니다. 자세한 설명은 로그 문제 해결 섹션을 참조하세요.

다음 증상과 오류를 검색해 AWS IoT Greengrass 코어로 관련 문제 해결에 도움이 되는 정보를 찾습니다.

문제

 

오류: 구성 파일에 CaPath, CertPath 또는 가 없습니다 KeyPath. The Greengrass daemon process with [pid = <pid>] died.

해결책: AWS IoT Greengrass 코어 소프트웨어가 시작되지 않을 때 crash.log에서 이 오류를 볼 수 있습니다. 이는 v1.6 이전 버전을 실행하는 경우에 발생할 수 있습니다. 다음 중 하나를 수행합니다.

  • v1.7 이상으로 업그레이드. 항상 최신 버전의 AWS IoT Greengrass 코어 소프트웨어를 실행하는 것이 좋습니다. 다운로드 정보는 AWS IoT Greengrass 코어 소프트웨어를 참조하십시오.

  • AWS IoT Greengrass 코어 소프트웨어 버전에 대해 올바른 config.json 형식을 사용합니다. 자세한 설명은 AWS IoT Greengrass 코어 구성 파일 섹션을 참조하세요.

    참고

    코어 디바이스에 설치된 AWS IoT Greengrass 코어 소프트웨어 버전이 무엇인지 알아보려면 디바이스 터미널에서 다음 명령을 실행합니다.

    cd /greengrass-root/ggc/core/ sudo ./greengrassd --version

 

오류: Failed to parse /<greengrass-root>/config/config.json.

해결책: AWS IoT Greengrass 코어 소프트웨어가 시작되지 않을 때 이 오류가 발생할 수 있습니다. Greengrass 구성 파일이 올바른 JSON 형식을 사용 중인지 확인합니다.

config.json(/greengrass-root/config에 위치)을 열고 JSON 형식을 검증합니다. 예를 들어, 쉼표가 올바르게 사용되었는지 확인합니다.

 

오류: TLS 구성을 생성하는 동안 오류가 발생했습니다: URIScheme ErrUnknown

해결책: AWS IoT Greengrass 코어 소프트웨어가 시작되지 않을 때 이 오류가 발생할 수 있습니다. Greengrass 구성 파일의 crypto 섹션에 있는 속성이 유효한지 확인합니다. 오류 메시지는 더 많은 정보를 제공합니다.

config.json(/greengrass-root/config에 위치)을 열고 crypto 섹션을 확인합니다. 예를 들어 인증서와 키 경로는 올바른 URI 형식을 사용하여 올바른 위치를 가리켜야 합니다.

 

오류: Runtime failed to start: unable to start workers: container test timed out.

해결책: AWS IoT Greengrass 코어 소프트웨어가 시작되지 않을 때 이 오류가 발생할 수 있습니다. Greengrass 구성 파일에서 postStartHealthCheckTimeout 속성을 설정합니다. 이 선택적 속성은 Greengrass 데몬이 상태 확인이 시작 후 완료될 때까지 대기하는 시간(밀리초)을 구성합니다. 기본값은 30초(30000 밀리초)입니다.

config.json(/greengrass-root/config에 위치)을 엽니다. runtime 객체에서 postStartHealthCheckTimeout 속성을 추가하고 해당 값을 30000을 초과하는 값으로 설정합니다. 유효한 JSON 문서를 생성하는 데 필요한 경우 쉼표를 추가합니다. 예:

... "runtime" : { "cgroup" : { "useSystemd" : "yes" }, "postStartHealthCheckTimeout" : 40000 }, ...

 

<address>오류: 로컬 Cloudwatch, LogGroup:/GreengrassSystem/connection_manager, 오류: 전송 요청 실패 원인: 포스트 http://<path>/cloudwatch/logs/ RequestError: 다이얼 tcp: PutLogEvents getsockopt: 연결 거부, 응답: {}.

해결책: AWS IoT Greengrass 코어 소프트웨어가 시작되지 않을 때 이 오류가 발생할 수 있습니다. 이는 Raspberry Pi에서 AWS IoT Greengrass를 실행하고 필요한 메모리 설정이 완료되지 않은 경우 발생할 수 있습니다. 자세한 정보는 이 단계를 참조하십시오.

 

오류: 다음 이유로 인해 서버를 생성할 수 없습니다. 그룹을 로드하지 못했습니다: chmod /<greengrass-root>/ggc/deployment/lambda/arn:aws:lambda:<region>:<account-id>:function:<function-name>:<version>/<file-name>: no such file or directory.

해결책: AWS IoT Greengrass 코어 소프트웨어가 시작되지 않을 때 이 오류가 발생할 수 있습니다. 실행 가능한 Lambda를 코어에 배포했다면 group.json 파일 (/greengrass-root/ggc/deployment/group에 위치)에서 함수의 Handler 속성을 확인합니다. 핸들러가 컴파일된 실행 파일의 정확한 이름이 아닌 경우에는 group.json 파일의 내용을 빈 JSON 객체({})로 바꾸고, 다음 명령을 실행해 AWS IoT Greengrass를 시작합니다.

cd /greengrass/ggc/core/ sudo ./greengrassd start

그런 다음,AWS Lambda API를 사용하여 구성의 handler 파라미터를 업데이트하고 새 함수 버전을 게시하고 별칭을 업데이트합니다. 자세한 내용은 AWS Lambda 함수 버전 및 별칭을 참조하십시오.

별칭을 기준으로 Greengrass 그룹에 함수를 추가했다고 가정한다면(권장 사항) 이제 그룹을 다시 배포할 수 있습니다 (그렇지 않은 경우에는 그룹을 배포하기 전에 그룹 정의 및 구독에서 새 함수 버전이나 별칭을 가리켜야 함).

 

컨테이너화 없이 실행하는 방식에서 Greengrass 컨테이너에서 실행하는 방식으로 변경한 후 AWS IoT Greengrass 코어 소프트웨어가 시작되지 않습니다.

해결책: 누락된 컨테이너 종속성이 없는지 확인합니다.

 

오류: Spool size should be at least 262144 bytes.

해결책: AWS IoT Greengrass 코어 소프트웨어가 시작되지 않을 때 이 오류가 발생할 수 있습니다. group.json 파일(/greengrass-root/ggc/deployment/group에 위치)을 열고, 파일 내용을 빈 JSON 객체(){}로 바꾸고, 다음 명령을 실행해 AWS IoT Greengrass를 시작합니다.

cd /greengrass/ggc/core/ sudo ./greengrassd start

그런 다음 로컬 스토리지의 캐시에 메시지를 저장하는 방법 절차에서 해당 단계를 따릅니다. GGCloudSpooler 함수의 경우 262144보다 크거나 같은 GG_CONFIG_MAX_SIZE_BYTES 값을 지정해야 합니다.

 

오류: [ERROR]-Cloud messaging error: Error occurred while trying to publish a message. {"errorString": "operation timed out"}

해결책: Greengrass 코어가 MQTT 메시지를 AWS IoT Core에 보낼 수 없을 경우 GGCloudSpooler.log에 이 오류가 표시될 수 있습니다. 이 문제는 코어 환경의 대역폭이 제한되고 지연 시간이 긴 경우에 발생할 수 있습니다. AWS IoT Greengrass v1.10.2 이상을 실행하는 경우 config.json 파일에서 mqttOperationTimeout 값을 늘려 보십시오. 속성이 없으면 coreThing 객체에 추가합니다. 예:

{ "coreThing": { "mqttOperationTimeout": 10, "caPath": "root-ca.pem", "certPath": "hash.cert.pem", "keyPath": "hash.private.key", ... }, ... }

기본값은 5이고 최소값은 5입니다.

 

오류: container_linux.go:344: starting container process caused "process_linux.go:424: container init caused \"rootfs_linux.go:64: mounting \\\"/greengrass/ggc/socket/greengrass_ipc.sock\\\" to rootfs \\\"/greengrass/ggc/packages/<version>/rootfs/merged\\\" at \\\"/greengrass_ipc.sock\\\" caused \\\"stat /greengrass/ggc/socket/greengrass_ipc.sock: permission denied\\\"\"".

해결책: AWS IoT Greengrass 코어 소프트웨어가 시작되지 않을 때 runtime.log에서 이 오류를 볼 수 있습니다. 이 오류는 umask0022보다 큰 경우에 발생합니다. 이 문제를 해결하려면 umask0022 이하로 설정해야 합니다. 0022 값을 설정하면 모든 사람에게 새 파일에 대한 읽기 권한이 기본적으로 부여됩니다.

 

오류: Greengrass daemon running with PID: <process-id>. Some system components failed to start. Check 'runtime.log' for errors.

해결책: AWS IoT Greengrass 코어 소프트웨어가 시작되지 않을 때 이 오류가 발생할 수 있습니다. runtime.logcrash.log에서 특정 오류 정보를 확인합니다. 자세한 설명은 로그 문제 해결 섹션을 참조하세요.

 

디바이스 섀도우가 클라우드와 동기화하지 않습니다.

해결 방법: AWS IoT Greengrass에 Greengrass 서비스 역할iot:UpdateThingShadowiot:GetThingShadow 작업에 대한 권한이 있는지 확인하십시오. 서비스 역할이 AWSGreengrassResourceAccessRolePolicy 관리형 정책을 사용하는 경우 이러한 권한은 기본적으로 포함됩니다.

섀도우 동기화 제한 시간 문제 해결 섹션을 참조하세요.

 

오류: unable to accept TCP connection. accept tcp [::]:8000: accept4: too many open files.

해결책: greengrassd 스크립트 출력에서 이 오류가 표시될 수 있습니다. 이는 AWS IoT Greengrass 코어 소프트웨어에 대한 파일 서술자 한도가 임계값에 도달했기 때문에 이 한도를 높여야 하는 경우에 발생할 수 있습니다.

다음 명령을 사용하고 AWS IoT Greengrass 소프트웨어를 다시 시작합니다.

ulimit -n 2048
참고

이 예제에서 한도는 2048로 증가합니다. 사용 사례에 적합한 하나의 값을 선택합니다.

 

오류: Runtime execution error: unable to start lambda container. container_linux.go:259: starting container process caused "process_linux.go:345: container init caused \"rootfs_linux.go:50: preparing rootfs caused \\\"permission denied\\\"\"".

해결책: 루트 디렉터리 아래에 AWS IoT Greengrass를 직접 설치하거나 AWS IoT Greengrass 코어 소프트웨어가 설치된 디렉터리와 그 상위 디렉터리에 모두에 대한 execute 권한이 있는지 확인해야 합니다.

 

경고: [WARN] - [5] GK Remote: 공개 키 데이터를 검색하는 중 오류가 발생했습니다.: 개인 키가 설정되지 않았습니다. ErrPrincipalNotConfigured MqttCertificate

해결책: AWS IoT Greengrass는 일반 핸들러를 사용하여 모든 보안 주체의 속성을 검증합니다. 로컬 MQTT 서버에 대한 사용자 지정 프라이빗 키를 지정하지 않은 경우 runtime.log에서 이러한 경고가 발생합니다. 자세한 설명은 AWS IoT Greengrass 핵심 보안 원칙 섹션을 참조하세요.

 

오류: 역할을 사용하려고 할 때 권한이 거부되었습니다.<arn:aws:iam::<account-id>:role/<role-name> to access s3 url https://<region>-greengrass-updates.s3.<region>.amazonaws.com/core/<architecture>/greengrass-core-<distribution-version>.tar.gz.

해결 방법: over-the-air (OTA) 업데이트 실패 시 이 오류가 표시될 수 있습니다. 서명자 역할 정책에서 대상 AWS 리전을 Resource로서 추가합니다. 이 서명자 역할은 AWS IoT Greengrass 소프트웨어 업데이트의 S3 URL을 미리 서명하는 데 사용됩니다. 자세한 내용은 S3 URL 서명자 역할을 참조하십시오.

 

AWS IoT Greengrass 코어가 네트워크 프록시를 사용하도록 구성되었으므로 Lambda 함수는 나가는 연결을 만들 수 없습니다.

해결책: Lambda 함수가 연결을 생성하는 데 사용하는 런타임 및 실행 파일에 따라 연결 시간 초과 오류가 표시될 수도 있습니다. Lambda 함수가 적절한 프록시 구성을 사용하여 네트워크 프록시를 통해 연결되는지 확인하십시오. AWS IoT Greengrass는 http_proxy, https_proxy, 및 no_proxy 환경 변수를 통해 사용자 정의 Lambda 함수에 프록시 구성을 전달합니다. 이러한 환경 변수는 다음 Python 코드와 같이 액세스할 수 있습니다.

import os print(os.environ['http_proxy'])

환경에 정의된 변수와 동일한 대/소문자를 사용합니다(예: 모두 소문자 http_proxy 또는 모두 대문자 HTTP_PROXY). 이러한 변수의 경우 AWS IoT Greengrass는 둘 다 지원합니다.

참고

boto3 또는 cURL 및 python requests 패키지와 같은 연결을 만드는 데 사용하는 대부분의 공통 라이브러리는 이러한 환경 변수를 기본값으로 사용합니다.

 

코어가 무한 연결-연결 해제 루프에 있습니다. runtime.log 파일에 연속적인 연결 및 연결 해제 항목 시리즈가 포함되어 있습니다.

해결책: 다른 디바이스가 코어 사물 이름을 AWS IoT에 대한 MQTT 연결에 클라이언트 ID로 사용하도록 하드코딩되는 경우 이 상태가 발생할 수 있습니다. 동일한 AWS 리전 및 AWS 계정에서 동시에 연결하려면 고유의 클라이언트 ID를 사용해야 합니다. 기본적으로 코어는 코어 사물 이름을 이러한 연결에 클라이언트 ID로 사용합니다.

이 문제를 해결하려면 다른 디바이스에서 연결에 사용하는 클라이언트 ID를 변경(권장)하거나 코어의 기본값을 재정의할 수 있습니다.

코어 디바이스의 기본 클라이언트 ID를 재정의하려면
  1. 다음 명령을 실행해 Greengrass 대몬(daemon)을 중단합니다.

    cd /greengrass-root/ggc/core/ sudo ./greengrassd stop
  2. su 사용자로서 편집을 하려면 greengrass-root/config/config.json을 엽니다.

  3. coreThing 객체에서 coreClientId 속성을 추가하고 이 값을 사용자 지정 클라이언트 ID로 설정합니다. 값은 1~128자 이내로 작성해야 합니다. AWS 계정의 현재 AWS 리전에서는 고유해야 합니다.

    "coreClientId": "MyCustomClientId"
  4. 대몬(daemon)을 시작합니다.

    cd /greengrass-root/ggc/core/ sudo ./greengrassd start

 

오류: unable to start lambda container. container_linux.go:259: starting container process caused "process_linux.go:345: container init caused \"rootfs_linux.go:62: mounting \\\"proc\\\" to rootfs \\\"

해결책: 일부 플랫폼에서 AWS IoT Greengrass가 /proc 파일 시스템을 탑재하여 Lambda 컨테이너를 생성하도록 시도할 때 runtime.log에 이 오류가 표시될 수 있습니다. 또는 operation not permittedEPERM과 비슷한 오류가 표시될 수 있습니다. 플랫폼에서 실행되는 테스트가 종속성 확인 스크립트에서 통과되는 경우에도 이러한 오류가 발생할 수 있습니다.

다음과 같은 가능한 해결 방안 중 하나를 수행하십시오.

  • Linux 커널에서 CONFIG_DEVPTS_MULTIPLE_INSTANCES 옵션을 활성화합니다.

  • 호스트에 대한 /proc 탑재 옵션을 rw,relatim 전용으로 설정합니다.

  • Linux 커널을 4.9 이상으로 업그레이드합니다.

참고

이 문제는 로컬 리소스 액세스를 위한 /proc 탑재와는 관련이 없습니다.

 

오류: 런타임 실행 오류: Lambda 컨테이너를 시작할 수 없습니다. {"errorString": "failed to initialize container mounts: failed to mask greengrass root in overlay upper dir: failed to create mask device at directory <ggc-path>: file exists"}

해결책: 배포에 실패하면 runtime.log에서 이 오류가 발생할 수 있습니다. AWS IoT Greengrass 그룹의 Lambda 함수가 코어의 파일 시스템에 있는 /usr 디렉터리에 액세스할 수 없는 경우 이 오류가 발생합니다.

이 문제를 해결 하려면 그룹에 로컬 볼륨 리소스를 추가하고 그룹을 배포합니다. 리소스는 다음 조건을 충족해야 합니다.

  • /usr소스 경로대상 경로로 지정

  • 리소스를 소유한 Linux 그룹의 OS 그룹 권한을 자동으로 추가

  • Lambda 함수와 연결하고 읽기 전용 액세스 허용

 

[ERROR]-배포 실패. {"deploymentId": "<deployment-id>", "errorString": "container test process with pid <pid> failed: container process state: exit status 1"}

해결책: 배포에 실패하면 runtime.log에서 이 오류가 발생할 수 있습니다. AWS IoT Greengrass 그룹의 Lambda 함수가 코어의 파일 시스템에 있는 /usr 디렉터리에 액세스할 수 없는 경우 이 오류가 발생합니다.

GGCanary.log에 추가 오류가 있는지 확인하여 이러한 사실을 확인할 수 있습니다. Lambda 함수가 /usr 디렉터리에 액세스할 수 없는 경우 GGCanary.log에는 다음과 같은 오류가 포함되어 있습니다.

[ERROR]-standard_init_linux.go:207: exec user process caused "no such file or directory"

이 문제를 해결 하려면 그룹에 로컬 볼륨 리소스를 추가하고 그룹을 배포합니다. 리소스는 다음 조건을 충족해야 합니다.

  • /usr소스 경로대상 경로로 지정

  • 리소스를 소유한 Linux 그룹의 OS 그룹 권한을 자동으로 추가

  • Lambda 함수와 연결하고 읽기 전용 액세스 허용

 

해결책: AWS IoT Greengrass 코어 소프트웨어가 시작되지 않을 때 runtime.log 파일에서 이 오류를 볼 수 있습니다. 이 문제는 Debian 운영 체제에서 더 일반적으로 발생할 수 있습니다.

이 문제를 해결하려면 다음과 같이 실행합니다.

  1. AWS IoT Greengrass Core 소프트웨어를 v1.9.3 이상으로 업그레이드하십시오. 문제가 자동으로 해결됩니다.

  2. AWS IoT Greengrass Core 소프트웨어를 업그레이드한 후에도 이 오류가 계속 발생하는 경우 config.json 파일에서 system.useOverlayWithTmpfs 속성을 true(으)로 설정하십시오.

    { "system": { "useOverlayWithTmpfs": true }, "coreThing": { "caPath": "root-ca.pem", "certPath": "cloud.pem.crt", "keyPath": "cloud.pem.key", ... }, ... }
참고

오류 메시지에 AWS IoT Greengrass 코어 소프트웨어 버전이 표시됩니다. Linux 커널 버전을 찾으려면 uname -r을 실행합니다.

 

Error: [DEBUG]-Failed to get routes. Discarding message.

해결책: 그룹에서 구독을 확인하고, [DEBUG] 메시지에 나열된 구독이 존재하는지 확인합니다.

 

오류: [Errno 24] <lambda-function>이 너무 많이 열려 있습니다.[Errno 24] 열린 파일이 너무 많습니다.

해결책: 함수가 함수 핸들러에서 를 인스턴스화되면 Lambda 함수 로그 파일에 StreamManagerClient 이 오류가 표시될 수 있습니다. 처리기 외부에서 클라이언트를 만드는 것이 좋습니다. 자세한 설명은 StreamManagerClient를 사용하여 스트림 작업 섹션을 참조하세요.

 

Error: ds server failed to start listening to socket: listen unix <ggc-path>/ggc/socket/greengrass_ipc.sock: bind: invalid argument

해결책: AWS IoT Greengrass 코어 소프트웨어가 시작되지 않을 때 이 오류가 발생할 수 있습니다. 이 오류는 파일 경로가 긴 폴더에 AWS IoT Greengrass Core 소프트웨어를 설치했을 때 발생합니다. 쓰기 디렉터리를 사용하지 않는 경우 파일 경로가 79바이트 미만이고, 쓰기 디렉터리를 사용하는 경우에는 83바이트 미만인 폴더에 AWS IoT Greengrass Core 소프트웨어를 다시 설치하시기 바랍니다.

[정보] (복사기) aws.greengrass. StreamManager: 스타드아웃. 원인: com.fasterxml.jackson.databind. JsonMappingException: 인스턴트가 최소 또는 최대 인스턴트 시간을 초과했습니다.

AWS IoT Greengrass 코어 소프트웨어를 v1.11.3으로 업그레이드할 때 스트림 관리자가 시작되지 않으면 스트림 관리자 로그에 다음 오류가 표시될 수 있습니다.

2021-07-16T00:54:58.568Z [INFO] (Copier) aws.greengrass.StreamManager: stdout. Caused by: com.fasterxml.jackson.databind.JsonMappingException: Instant exceeds minimum or maximum instant (through reference chain: com.amazonaws.iot.greengrass.streammanager.export.PersistedSuccessExportStatesV1["lastExportTime"]). {scriptName=services.aws.greengrass.StreamManager.lifecycle.startup.script, serviceName=aws.greengrass.StreamManager, currentState=STARTING} 2021-07-16T00:54:58.579Z [INFO] (Copier) aws.greengrass.StreamManager: stdout. Caused by: java.time.DateTimeException: Instant exceeds minimum or maximum instant. {scriptName=services.aws.greengrass.StreamManager.lifecycle.startup.script, serviceName=aws.greengrass.StreamManager, currentState=STARTING}

v1.11.3 이전의 AWS IoT Greengrass 코어 소프트웨어 버전을 사용 중이고 이를 이후 버전으로 업그레이드하려면 OTA 업데이트를 사용하여 v1.11.4로 업그레이드하십시오.

GPG error: https://dnw9lb6lzp2d8.cloudfront.net stable InRelease: The following signatures were invalid: EXPKEYSIG 68D644ABD2327D47 AWS Greengrass Master Key

APT 리포지토리에서 AWS IoT Greengrass 코어 소프트웨어를 설치한 디바이스에서 apt update을(를) 실행하면 다음 오류가 표시될 수 있습니다.

Err:4 https://dnw9lb6lzp2d8.cloudfront.net stable InRelease The following signatures were invalid: EXPKEYSIG 68D644ABD2327D47 AWS Greengrass Master Key Reading package lists... Done W: GPG error: https://dnw9lb6lzp2d8.cloudfront.net stable InRelease: The following signatures were invalid: EXPKEYSIG 68D644ABD2327D47 AWS Greengrass Master Key

이 오류는 AWS IoT Greengrass이(가) APT 저장소에서 AWS IoT Greengrass 코어 소프트웨어를 설치하거나 업데이트하는 옵션을 더 이상 제공하지 않기 때문에 발생합니다. apt update을(를) 성공적으로 실행하려면 디바이스의 소스 목록에서 AWS IoT Greengrass 리포지토리를 제거하세요.

sudo rm /etc/apt/sources.list.d/greengrass.list sudo apt update

배포 관련 문제

다음 정보를 사용하면 배포 문제를 해결하는 데 도움이 됩니다.

문제

 

현재 배포가 작동하지 않으며 이전의 작동하는 배포로 되돌려야 합니다.

해결책: AWS IoT 콘솔 또는 AWS IoT Greengrass API를 사용하여 이전의 작동하는 배포를 재배포합니다. 그러면 코어 디바이스에 해당 그룹 버전이 배포됩니다.

배포를 재배포하려면(콘솔)
  1. 그룹 구성 페이지에서 배포 탭을 선택합니다. 이 페이지에는 각 배포 시도의 날짜 및 시간, 그룹 버전, 상태를 포함하여 그룹의 배포 기록이 표시됩니다.

  2. 다시 배포하려는 배포가 포함된 행을 찾습니다. 재배포하려는 배포를 선택하고 재배포를 선택합니다.

    
                            배포에 대한 재배포 작업을 표시하는 배포 페이지.
배포를 재배포하려면(CLI)
  1. 재배포하려는 배포의 ID를 찾는 데 사용합니다 ListDeployments. 예:

    aws greengrass list-deployments --group-id 74d0b623-c2f2-4cad-9acc-ef92f61fcaf7

    이 명령은 그룹의 배포 목록을 반환합니다.

    { "Deployments": [ { "DeploymentId": "8d179428-f617-4a77-8a0c-3d61fb8446a6", "DeploymentType": "NewDeployment", "GroupArn": "arn:aws:greengrass:us-west-2:123456789012:/greengrass/groups/74d0b623-c2f2-4cad-9acc-ef92f61fcaf7/versions/8dd1d899-4ac9-4f5d-afe4-22de086efc62", "CreatedAt": "2019-07-01T20:56:49.641Z" }, { "DeploymentId": "f8e4c455-8ac4-453a-8252-512dc3e9c596", "DeploymentType": "NewDeployment", "GroupArn": "arn:aws:greengrass:us-west-2::123456789012:/greengrass/groups/74d0b623-c2f2-4cad-9acc-ef92f61fcaf7/versions/4ad66e5d-3808-446b-940a-b1a788898382", "CreatedAt": "2019-07-01T20:41:47.048Z" }, { "DeploymentId": "e4aca044-bbd8-41b4-b697-930ca7c40f3e", "DeploymentType": "NewDeployment", "GroupArn": "arn:aws:greengrass:us-west-2::123456789012:/greengrass/groups/74d0b623-c2f2-4cad-9acc-ef92f61fcaf7/versions/1f3870b6-850e-4c97-8018-c872e17b235b", "CreatedAt": "2019-06-18T15:16:02.965Z" } ] }
    참고

    다음 AWS CLI 명령은 그룹 및 배포 ID에 대한 예제 값을 사용합니다. 명령을 실행할 때 이들 예제 값을 올바른 값으로 바꾸십시오.

  2. 대상 CreateDeployment배포를 재배포하는 데 사용합니다. 배포 유형을 Redeployment로 설정합니다. 예:

    aws greengrass create-deployment --deployment-type Redeployment \ --group-id 74d0b623-c2f2-4cad-9acc-ef92f61fcaf7 \ --deployment-id f8e4c455-8ac4-453a-8252-512dc3e9c596

    이 명령은 새 배포의 ARN 및 ID를 반환합니다.

    { "DeploymentId": "f9ed02b7-c28e-4df6-83b1-e9553ddd0fc2", "DeploymentArn": "arn:aws:greengrass:us-west-2::123456789012:/greengrass/groups/74d0b623-c2f2-4cad-9acc-ef92f61fcaf7/deployments/f9ed02b7-c28e-4df6-83b1-e9553ddd0fc2" }
  3. 배포 상태를 가져오는 GetDeploymentStatus데 사용합니다.

 

배포 시 403 Forbidden 오류가 로그에 나타납니다.

해결책: 클라우드 내 AWS IoT Greengrass 코어의 정책에 "greengrass:*"가 허용된 작업으로 포함되어 있는지 확인합니다.

 

create-deployment 명령을 처음 실행하면 ConcurrentDeployment 오류가 발생합니다.

해결책: 배포가 진행 중일 수 있습니다. get-deployment-status를 실행하면 배포가 생성되었는지 확인할 수 있습니다. 그렇지 않으면 배포 생성을 다시 시도하십시오.

 

오류: Greengrass is not authorized to assume the Service Role associated with this account 또는 오류: Failed: TES service role is not associated with this account.

해결책: 배포에 실패하면 이 오류가 발생할 수 있습니다. Greengrass 서비스 역할이 현재 AWS 리전의 AWS 계정 계정과 연결되어 있는지 확인합니다. 자세한 내용은 Greengrass 서비스 역할 관리(CLI) 또는 Greengrass 서비스 역할 관리(콘솔) 섹션을 참조하세요.

 

오류: unable to execute download step in deployment. error while downloading: error while downloading the Group definition file: ... x509: certificate has expired or is not yet valid

해결책: 배포에 실패하면 runtime.log에서 이 오류가 발생할 수 있습니다. x509: certificate has expired or is not yet valid 메시지가 포함된 Deployment failed 오류가 발생하면 디바이스 클록을 확인합니다. TLS 및 X.509 인증서를 사용하는 경우 안전하게 IoT 시스템을 구축할 수 있지만 서버와 클라이언트의 시간이 정확해야 합니다. IoT 디바이스가 AWS IoT Greengrass 또는 서버 인증서를 사용하는 다른 TLS 서비스에 연결하려면 시간이 정확해야(오차 15분 이내) 합니다. 자세한 내용은 AWS 공식 블로그의 사물 인터넷에서 디바이스 시간을 사용한 AWS IoT 서버 인증서 유효성 검사를 참조하십시오.

 

배포가 완료되지 않습니다.

해결책: 다음을 수행합니다.

  • 사용자의 코어 디바이스에서 AWS IoT Greengrass 데몬이 실행 중인지 확인합니다. 코어 디바이스 터미널에서 다음 명령들을 실행하여 대몬(daemon)이 실행 중인지 확인하고 필요한 경우 시작하십시오.

    1. 대몬(daemon)이 실행 중인지 확인하려면:

      ps aux | grep -E 'greengrass.*daemon'

      출력에 root에 대한 /greengrass/ggc/packages/1.11.6/bin/daemon 입력이 포함되어 있는 경우에는 대몬(daemon)이 실행 중인 것입니다.

      경로의 버전은 코어 디바이스에 설치된 AWS IoT Greengrass 코어 소프트웨어 버전에 따라 다릅니다.

    2. 대몬(daemon)을 시작하려면:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  • 코어 디바이스가 연결되어 있고 코어 연결 엔드포인트가 올바르게 구성되어 있는지 확인합니다.

 

오류: java 또는 java8 실행 파일을 찾을 수 없음 또는 오류: <deployment-id>그룹 유형 NewDeployment 배포 <group-id>실패 오류: 작업자가 <worker-id>이유 때문에 초기화에 실패했습니다. 설치된 Java 버전이 8보다 크거나 같아야 합니다.

해결 방법: AWS IoT Greengrass 코어에 대해 스트림 관리자가 활성화된 경우 그룹을 배포하기 전에 코어 디바이스에 Java 8 런타임을 설치해야 합니다. 자세한 내용은 스트림 관리자에 대한 요구 사항을 참조하십시오. AWS IoT 콘솔의 기본 그룹 생성 워크플로를 사용하여 그룹을 생성하면 스트림 관리자가 기본적으로 활성화됩니다.

또는 스트림 관리자를 비활성화한 다음 그룹을 배포합니다. 자세한 설명은 스트림 관리자 설정 구성(콘솔) 섹션을 참조하세요.

 

배포가 완료되지 않고 runtime.log에 여러 개의 "wait 1s for container to stop" 입력이 포함됩니다.

해결책: 코어 디바이스 터미널에서 다음 명령을 실행하여 AWS IoT Greengrass 데몬을 다시 시작합니다.

cd /greengrass/ggc/core/ sudo ./greengrassd stop sudo ./greengrassd start

 

배포가 완료되지 않고 runtime.log에 "[ERROR]-Greengrass deployment error: failed to report deployment status back to cloud {"deploymentId": "<deployment-id>", "errorString": "Failed to initiate PUT, endpoint: https://<deployment-status>, error: Put https://<deployment-status>: proxyconnect tcp: x509: certificate signed by unknown authority"}"가 포함되어 있습니다.

해결 방법: Greengrass 코어가 HTTPS 프록시 연결을 사용하도록 구성되어 있고 프록시 서버 인증서 체인이 시스템에서 신뢰되지 않으면 runtime.log에 이 오류가 표시될 수 있습니다. 이 문제를 해결하려면 루트 CA 인증서에 인증서 체인을 추가합니다. Greengrass 코어는 이 파일의 인증서를 AWS IoT Greengrass와의 HTTPS 및 MQTT 연결에서 TLS 인증에 사용되는 인증서 풀에 추가합니다.

다음 예에서는 루트 CA 인증서 파일에 추가된 프록시 서버 CA 인증서를 보여줍니다.

# My proxy CA -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIQWgIVAMHSAzWG/5YVRYtRQOxXUTEpHuEmApzGCSqGSIb3DQEK \nCwUAhuL9MQswCQwJVUzEPMAVUzEYMBYGA1UECgwP1hem9uLmNvbSBJbmMuMRww ... content of proxy CA certificate ... +vHIRlt0e5JAm5\noTIZGoFbK82A0/nO7f/t5PSIDAim9V3Gc3pSXxCCAQoFYnui GaPUlGk1gCE84a0X\n7Rp/lND/PuMZ/s8YjlkY2NmYmNjMCAXDTE5MTEyN2cM216 gJMIADggEPADf2/m45hzEXAMPLE= -----END CERTIFICATE----- # Amazon Root CA 1 -----BEGIN CERTIFICATE----- MIIDQTCCAimgF6AwIBAgITBmyfz/5mjAo54vB4ikPmljZKyjANJmApzyMZFo6qBg ADA5MQswCQYDVQQGEwJVUzEPMA0tMVT8QtPHRh8jrdkGA1UEChMGDV3QQDExBBKW ... content of root CA certificate ... o/ufQJQWUCyziar1hem9uMRkwFwYVPSHCb2XV4cdFyQzR1KldZwgJcIQ6XUDgHaa 5MsI+yMRQ+hDaXJiobldXgjUka642M4UwtBV8oK2xJNDd2ZhwLnoQdeXeGADKkpy rqXRfKoQnoZsG4q5WTP46EXAMPLE -----END CERTIFICATE-----

기본적으로 루트 CA 인증서 파일은 /greengrass-root/certs/root.ca.pem에 있습니다. 코어 디바이스에서 위치를 찾으려면 config.json에서 crypto.caPath 속성을 확인하세요.

참고

greengrass-root는 디바이스에서 AWS IoT Greengrass 코어 소프트웨어가 설치된 경로를 나타냅니다. 일반적으로 이는 /greengrass 디렉터리입니다.

 

<path>오류: <deployment-id>그룹 유형 배포 <group-id>실패 오류: 처리 중 오류가 발생했습니다. 그룹 구성이 잘못되었습니다. 112 또는 [119 0] 에 파일에 NewDeployment 대한 rw 권한이 없습니다.

해결책: <path> 디렉터리의 소유자 그룹이 디렉터리에 대한 읽기 및 쓰기 권한을 보유하고 있는지 확인합니다.

 

오류: < list-of-function-arns >는 루트로 실행되도록 구성되었지만 Greengrass는 루트 권한으로 Lambda 함수를 실행하도록 구성되지 않았습니다.

해결책: 배포에 실패하면 runtime.log에서 이 오류가 발생할 수 있습니다. AWS IoT Greengrass를 구성해 Lambda 함수가 루트 권한으로 실행되도록 해야 합니다. greengrass_root/config/config.json에서 allowFunctionsToRunAsRoot의 값을 yes로 바꾸거나 Lambda 함수를 변경해 다른 사용자/그룹으로서 실행합니다. 자세한 설명은 루트로서의 Lambda 함수 실행 섹션을 참조하세요.

 

오류: <deployment-id>그룹 유형 NewDeployment 배포 <group-id>실패 오류: Greengrass 배포 오류: 배포의 다운로드 단계를 실행할 수 없습니다. 처리 중 오류: 다운로드한 그룹 파일을 로드할 수 없음: 사용자 이름을 기반으로 UID를 찾을 수 없음, 사용자 이름: ggc_user: 사용자 이름: ggc_user: 사용자 이름: 알 수 없는 사용자 ggc_user.

해결 방법: AWS IoT Greengrass 그룹의 기본 액세스 ID가 표준 시스템 계정을 사용하는 경우 ggc_user 사용자 및 ggc_group 그룹이 디바이스에 있어야 합니다. 사용자 및 그룹을 추가하는 방법에 대한 지침은 이 단계를 참조하십시오. 이름을 표시된 대로 정확히 입력해야 합니다.

 

오류: [ERROR]-runtime execution error: unable to start lambda container. {"errorString": "failed to initialize container mounts: failed to mask greengrass root in overlay upper dir: failed to create mask device at directory <ggc-path>: file exists"}

해결책: 배포에 실패하면 runtime.log에서 이 오류가 발생할 수 있습니다. 그룹의 Lambda 함수가 코어의 파일 시스템에 있는 /usr 디렉터리에 액세스할 수 없는 경우 이 오류가 발생합니다. 이 문제를 해결 하려면 그룹에 로컬 볼륨 리소스를 추가하고 그룹을 배포합니다. 리소스는 다음 조건을 충족해야 합니다.

  • /usr소스 경로대상 경로로 지정

  • 리소스를 소유한 Linux 그룹의 OS 그룹 권한을 자동으로 추가

  • Lambda 함수와 연결하고 읽기 전용 액세스 허용

 

오류: <deployment-id>그룹 유형 NewDeployment 배포 <group-id>실패 오류: 프로세스 시작 실패: container_linux.go:259: 컨테이너 프로세스 시작시 “process_linux.go:250: init에 대한 exec setns 프로세스 실행 중 발생함\" 대기: 하위 프로세스 없음\ "”.

해결책: 배포에 실패하면 이 오류가 발생할 수 있습니다. 배포를 다시 시도하십시오.

 

오류: [WARN]-MQTT[client] dial tcp: lookup <host-prefix>-ats.iot.<region>.amazonaws.com: no such host ... [오류]-Greengrass 배포 오류: 클라우드에 배포 상태 보고 실패 ... net/http: 연결을 기다리는 동안 요청이 취소됨(헤더를 기다리는 동안 Client.Timeout 초과됨)

해결책: systemd-resolved를 사용하는 경우 이 오류가 발생할 수 있습니다. 이 파라미터는 기본적으로 DNSSEC 설정을 활성화합니다. 그 결과 많은 퍼블릭 도메인이 인식되지 않습니다. AWS IoT Greengrass 엔드포인트에 도달하려는 시도가 호스트를 찾지 못하고, 따라서 배포가 In Progress 상태를 지속합니다.

다음 명령 및 출력을 사용하여 이 문제를 테스트할 수 있습니다. AWS 리전 엔드포인트의 엔드포인트 자리표시자를 리전으로 바꾸십시오.

$ ping greengrass-ats.iot.region.amazonaws.com ping: greengrass-ats.iot.region.amazonaws.com: Name or service not known
$ systemd-resolve greengrass-ats.iot.region.amazonaws.com greengrass-ats.iot.region.amazonaws.com: resolve call failed: DNSSEC validation failed: failed-auxiliary

한 가지 가능한 해결책은 DNSSEC를 비활성화하는 것입니다. DNSSECfalse일 경우 DNS 조회가 DNSSEC 검증되지 않습니다. 자세한 내용은 systemd에 대한 알려진 문제를 참조하십시오.

  1. DNSSEC=false/etc/systemd/resolved.conf에 추가합니다.

  2. systemd-resolved을 다시 시작합니다.

resolved.confDNSSEC에 대한 자세한 내용은 터미널에서 man resolved.conf를 실행하십시오.

 

그룹 생성/함수 생성 관련 문제

다음 정보를 사용하면 AWS IoT Greengrass 그룹 또는 Greengrass Lambda 함수 생성과 관련된 문제 해결에 도움이 됩니다.

 

오류: 그룹의 '' 구성이 잘못되었습니다. IsolationMode

해결책: function-definition-versionDefaultConfig 내의 IsolationMode 값이 지원되지 않는 경우 이 오류가 발생합니다. 지원되는 값은 GreengrassContainerNoContainer입니다.

 

오류: arn 함수의 IsolationMode '' <function-arn>구성이 잘못되었습니다.

해결책: function-definition-version의 <function-arn> 내의 IsolationMode 값이 지원되지 않는 경우 이 오류가 발생합니다. 지원되는 값은 GreengrassContainerNoContainer입니다.

 

오류: MemorySize <function-arn>=에서는 IsolationMode arn을 사용한 함수 구성이 허용되지 않습니다. NoContainer

해결 방법: MemorySize 값을 지정하고 컨테이너화 없이 실행하도록 선택하면 이 오류가 발생합니다. 컨테이너화 없이 실행되는 Lambda 함수에는 메모리 제한이 있을 수 없습니다. 제한을 제거하거나 Lambda 함수가 AWS IoT Greengrass 컨테이너에서 실행되도록 변경할 수 있습니다.

 

오류: =에서는 arn이 있는 함수에 대한 Access Sysfs 구성이 <function-arn>허용되지 않습니다. IsolationMode NoContainer

해결 방법: AccessSysfstrue을(를) 지정하고 컨테이너화 없이 실행하도록 선택하면 이 오류가 발생합니다. 컨테이너화 없이 실행되는 Lambda 함수는 파일 시스템에 직접 액세스하도록 코드를 업데이트해야 하며 AccessSysfs을(를) 사용할 수 없습니다. AccessSysfsfalse 값으로 지정하거나 Lambda 함수가 AWS IoT Greengrass 컨테이너에서 실행되도록 변경할 수 있습니다.

 

<function-arn>오류: =에서 arn을 사용하는 함수의 MemorySize 구성이 필요합니다. IsolationMode GreengrassContainer

해결책: 이 오류는 AWS IoT Greengrass 컨테이너에서 실행 중인 Lambda 함수에 대해 MemorySize 제한을 지정하지 않았을 때 발생합니다. MemorySize 값을 지정해 오류를 해결하십시오.

 

오류: 함수는 <function-arn><resource-type> IsolationModeNoContainer=에서 허용되지 않는 유형의 리소스를 나타냅니다.

해결책: 컨테이너화하지 않고 Lambda 함수를 실행하는 경우 Local.Device, Local.Volume, ML_Model.SageMaker.Job, ML_Model.S3_Object, S3_Object.Generic_Archive 리소스 유형에 액세스할 수 없습니다. 해당 리소스 타입이 필요한 경우 AWS IoT Greengrass 컨테이너에서 실행해야 합니다. 또한 Lambda 함수의 코드를 변경함으로써 컨테이너화 없이 실행 시 로컬 디바이스에 곧바로 액세스할 수도 있습니다.

 

오류: Execution configuration for function with arn <function-arn> is not allowed.

해결책: 이 오류는 GGIPDetector 또는 GGCloudSpooler를 사용하여 시스템 Lambda 함수을 작성하거나 IsolationMode 또는 RunAs 구성을 지정했을 때 발생합니다. 이 시스템 Lambda 함수의 Execution 파라미터를 생략해야 합니다.

 

검색 문제

다음 정보를 사용하면 AWS IoT Greengrass 검색 서비스의 문제 해결에 도움이 됩니다.

 

오류: 디바이스가 너무 많은 그룹의 멤버입니다. 디바이스는 최대 10개 그룹에 속할 수 있습니다.

해결책: 이것은 알려진 문제입니다. 한 클라이언트 디바이스는 최대 10개 그룹의 멤버일 수 있습니다.

 

기계 학습 리소스 문제

다음 정보를 사용하여 기계 학습 리소스의 문제를 해결할 수 있습니다.

 

InvalidML ModelOwner - GroupOwnerSetting ML 모델 리소스에 제공되었지만 존재하지 GroupOwner 않음 GroupPermission

해결 방법: 기계 학습 리소스에 ResourceDownloadOwnerSetting개체가 포함되어 있지만 필수 GroupOwner 또는 GroupPermission 속성이 정의되지 않은 경우 이 오류가 발생합니다. 이 문제를 해결하려면 누락된 속성을 정의합니다.

 

NoContainer 함수는 Machine Learning 리소스를 연결할 때 권한을 구성할 수 없습니다. <function-arn>리소스 액세스 정책에 <resource-id>권한이 <ro/rw> 있는 기계 학습 리소스를 말합니다.

해결 방법: 컨테이너화되지 않은 Lambda 함수가 기계 학습 리소스에 대한 함수 수준 권한을 지정하는 경우 이 오류가 발생합니다. 컨테이너화되지 않은 함수는 기계 학습 리소스에 정의된 리소스 소유자 권한으로부터 권한을 상속해야 합니다. 이 문제를 해결하려면 리소스 소유자 권한(콘솔)을 상속하거나, Lambda 함수의 리소스 액세스 정책(API)에서 권한을 제거하도록 선택하십시오.

 

함수는 <function-arn><resource-id> ResourceAccessPolicy 및 리소스 모두에서 권한이 누락된 Machine Learning 리소스를 가리킵니다 OwnerSetting.

해결 방법: 기계 학습 리소스에 대한 권한이 연결된 Lambda 함수 또는 리소스에 대해 구성되지 않은 경우 이 오류가 발생합니다. 이 문제를 해결하려면 Lambda 함수의 ResourceAccessPolicy속성 또는 리소스의 속성에서 권한을 OwnerSetting구성하십시오.

 

함수는 <function-arn><resource-id>\ "rw\” 권한이 있는 Machine Learning 리소스를 가리키는 반면, 리소스 소유자 설정은\ "ro\ GroupPermission "만 허용합니다.

해결 방법: 연결된 Lambda 함수에 대해 정의된 액세스 권한이 기계 학습 리소스에 대해 정의된 리소스 소유자 권한을 초과하는 경우 이 오류가 발생합니다. 이 문제를 해결하려면 Lambda 함수에 대해 더 제한적인 권한을 설정하거나, 리소스 소유자에 대해 덜 제한적인 권한을 설정합니다.

 

NoContainer 함수는 <function-arn>중첩된 대상 경로의 리소스를 말합니다.

해결 방법: 컨테이너화되지 않은 Lambda 함수에 연결된 여러 개의 기계 학습 리소스가 동일한 대상 경로 또는 중첩된 대상 경로를 사용하는 경우 이 오류가 발생합니다. 이 문제를 해결하려면 리소스에 대해 별도의 대상 경로를 지정합니다.

 

Lambda <function-arn>은 동일한 그룹 소유자 ID를 공유하여 리소스 <resource-id>에 대한 액세스 권한을 획득합니다.

해결 방법: 동일한 OS 그룹이 Lambda 함수의 다음으로 실행 ID와 기계 학습 리소스의 리소스 소유자로 지정되었지만 리소스가 Lambda 함수에 연결되지 않은 경우 runtime.log에 이 오류가 발생합니다. 이 구성은 Lambda 함수에 AWS IoT Greengrass 인증 없이 리소스에 액세스하는 데 사용할 수 있는 암시적 권한을 부여합니다.

이 문제를 해결하려면 속성 중 하나에 대해 다른 OS 그룹을 사용하거나 기계 학습 리소스를 Lambda 함수에 연결합니다.

Docker 내 AWS IoT Greengrass 코어 문제

다음 정보를 사용하면 Docker 컨테이너에서 AWS IoT Greengrass 실행 중 발생하는 문제를 해결하는 데 도움이 됩니다.

 

오류: 알 수 없는 옵션: -no-include-email.

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

 

경고: IPv4가 비활성화되어 있습니다. 네트워킹이 작동하지 않습니다.

해결책: Linux 컴퓨터에서 AWS IoT Greengrass를 실행할 때 이 경고 또는 비슷한 메시지를 받을 수 있습니다. 이 단계의 설명에 따라 IPv4 네트워크 전달을 활성화합니다. IPv4 전달을 활성화하지 않으면 AWS IoT Greengrass 클라우드 배포 및 MQTT 통신이 작동하지 않습니다. 자세한 내용은 Docker 설명서의 런타임에 네임스페이스 커널 파라미터(sysctls) 구성을 참조하십시오.

 

오류: 방화벽이 Windows와 컨테이너 간의 파일 공유를 차단하고 있습니다.

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

 

오류: GetAuthorizationToken 작업을 호출하는 동안 오류가 발생했습니다 (AccessDeniedException). 사용자: arn:aws:iam: <account-id>::user/는 리소스에서 ecr: *를 수행할 <user-name>권한이 없습니다. GetAuthorizationToken

Amazon ECR 리포지토리에 액세스할 충분한 권한이 없는데 aws ecr get-login-password 명령을 실행할 경우 이 오류가 발생할 수 있습니다. 자세한 내용은 Amazon ECR 사용 설명서Amazon ECR 리포지토리 정책 예제하나의 Amazon ECR 리포지토리에 액세스를 참조하십시오.

 

오류: Cannot create container for the service greengrass: Conflict. 컨테이너 이름 “/”는 이미 사용 중입니다. aws-iot-greengrass

해결책: 이 문제는 이전 컨테이너에서 컨테이너 이름을 사용하는 경우 발생할 수 있습니다. 이 문제를 해결하려면 다음 명령을 실행하여 이전 Docker 컨테이너를 제거하십시오.

docker rm -f $(docker ps -a -q -f "name=aws-iot-greengrass")

 

오류: [FATAL]-Failed to reset thread's mount namespace due to an unexpected error: "operation not permitted". To maintain consistency, GGC will crash and need to be manually restarted.

해결책: runtime.log의 이 오류는 Docker 컨테이너에서 실행 중인 AWS IoT Greengrass에 GreengrassContainer Lambda 함수를 배포하려고 할 때 발생할 수 있습니다. 현재, Greengrass Docker 컨테이너에는 NoContainer Lambda함수만 배포할 수 있습니다.

이 문제를 해결하려면 모든 Lambda 함수 NoContainer 모드에 있는지 확인하고 새 배포를 시작하십시오. 그런 다음 컨테이너를 시작할 때 기존 deployment 디렉터리를 AWS IoT Greengrass Docker 컨테이너에 바인드 마운트하지 마십시오. 대신 Docker 컨테이너에 빈 deployment 디렉터리를 만들고 바인드 마운트하십시오. 이를 통해 새로운 Docker 컨테이너는 NoContainer 모드로 실행되는 Lambda 함수로 최신 배포를 수신할 수 있습니다.

자세한 설명은 도커 컨테이너에서의 AWS IoT Greengrass 실행 섹션을 참조하세요.

로그 문제 해결

로그를 로그로 보낼지, 로컬 파일 시스템에 로그를 저장할지 또는 둘 다와 같은 Greengrass 그룹의 로깅 설정을 구성할 수 있습니다. CloudWatch 문제를 해결할 때 자세한 정보를 얻으려면 일시적으로 로깅 수준을 DEBUG로 변경할 수 있습니다. 로깅 설정에 대한 변경 사항은 그룹을 배포할 때 적용됩니다. 자세한 설명은 AWS IoT Greengrass의 로깅 구성 섹션을 참조하세요.

로컬 파일 시스템에서 AWS IoT Greengrass는 다음 위치에 로그를 저장합니다. 파일 시스템에서 로그를 읽으려면 루트 권한이 필요합니다.

greengrass-root/ggc/var/log/crash.log

AWS IoT Greengrass 코어가 충돌할 때 생성되는 메시지들을 표시합니다.

greengrass-root/ggc/var/log/system/runtime.log

어떤 구성요소가 실패했는지에 관한 메시지를 표시합니다.

greengrass-root/ggc/var/log/system/

인증서 관리자 및 연결 관리자와 같은 AWS IoT Greengrass 시스템 구성 요소의 모든 로그가 포함됩니다. ggc/var/log/system/ggc/var/log/system/runtime.log의 메시지를 사용하여 AWS IoT Greengrass 시스템 구성 요소에서 어떤 오류가 발생했는지를 확인할 수 있어야 합니다.

greengrass-root/ggc/var/log/system/localwatch/

Greengrass 로그를 로그에 업로드하는 작업을 처리하는 AWS IoT Greengrass 구성 요소의 로그를 CloudWatch 포함합니다. Greengrass 로그인 정보를 볼 수 없는 경우 이러한 로그를 사용하여 문제를 해결할 수 있습니다. CloudWatch

greengrass-root/ggc/var/log/user/

사용자 정의 Lambda 함수의 모든 로그가 포함됩니다. 이 폴더를 확인하여 로컬 Lambda 함수의 오류 메시지를 찾습니다.

참고

기본적으로 greengrass-root/greengrass 디렉터리입니다. 쓰기 디렉터리가 구성되어 있는 경우에는 로그가 이 디렉터리 아래 있습니다.

로그가 클라우드에 저장되도록 구성된 경우 CloudWatch 로그를 사용하여 로그 메시지를 확인하십시오. crash.logAWS IoT Greengrass코어 디바이스의 파일 시스템 로그에서만 찾을 수 있습니다.

에 로그를 기록하도록 구성된 경우 시스템 구성 요소가 연결을 시도할 때 연결 오류가 발생하는지 확인하십시오AWS IoT. AWS IoT CloudWatch

AWS IoT Greengrass 로깅에 대한 자세한 내용은 AWS IoT Greengrass 로그를 사용하여 모니터링을 참조하십시오.

참고

AWS IoT Greengrass 코어 소프트웨어 v1.0에 대한 로그는 greengrass-root/var/log 디렉터리 아래에 저장됩니다.

스토리지 문제 해결

로컬 파일 스토리지가 가득 차면 다음과 같이 일부 구성 요소를 시작하지 못할 수도 있습니다.

  • 로컬 섀도우 업데이트가 수행되지 않습니다.

  • 새 AWS IoT Greengrass 코어 MQTT 서버 인증서를 로컬로 다운로드할 수 없습니다.

  • 배포에 실패합니다.

로컬에서 사용 가능한 여유 공간을 항상 파악하고 있어야 합니다. 이는 배포된 Lambda 함수의 크기, 로깅 구성(로그 문제 해결 참조) 및 로컬로 저장된 섀도우의 수를 기준으로 하여 여유 공간을 계산할 수 있습니다.

메시지 문제 해결

AWS IoT Greengrass에서 로컬로 보내는 모든 메시지는 QoS 0과 함께 전송됩니다. 기본적으로 AWS IoT Greengrass은(는) 인 메모리 대기열에 메시지를 저장합니다. 따라서 Greengrass 코어가 재시작되면(예: 그룹 배포 또는 디바이스 재부팅 이후) 처리되지 않은 메시지가 사라집니다. 한편, 파일 시스템의 캐시에 메시지를 저장하여 코어 재시작에도 유지되도록 AWS IoT Greengrass (v1.6 이상)을 구성할 수 있습니다. 또한 대기열 크기를 구성할 수 있습니다. 대기열 크기를 구성하는 경우에는 262144 바이트(256 KB) 이상인지 확인합니다. 이 값보다 작으면 AWS IoT Greengrass이(가) 적절하게 시작될 수 없습니다. 자세한 설명은 클라우드 대상을 위한 MQTT 메시지 대기열 섹션을 참조하세요.

참고

기본 인 메모리 대기열을 사용하는 경우에는 서비스 중단이 최소화될 때 그룹을 배포하거나 디바이스를 재시작하는 것이 좋습니다.

AWS IoT에서 영구 세션을 설정하도록 코어를 구성할 수도 있습니다. 이렇게 하면 코어가 오프라인 상태에서도 AWS 클라우드에서 전송된 메시지를 수신할 수 있습니다. 자세한 설명은 AWS IoT Core를 사용하는 MQTT 영구 세션 섹션을 참조하세요.

섀도우 동기화 제한 시간 문제 해결

Greengrass 코어 디바이스와 클라우드 간 통신에 상당한 시간 지연이 발생할 경우, 제한 시간으로 인해 섀도우 동기화에 실패할 수 있습니다. 이런 경우 다음과 유사한 로그 항목이 표시됩니다.

[2017-07-20T10:01:58.006Z][ERROR]-cloud_shadow_client.go:57,Cloud shadow client error: unable to get cloud shadow what_the_thing_is_named for synchronization. Get https://1234567890abcd.iot.us-west-2.amazonaws.com:8443/things/what_the_thing_is_named/shadow: net/http: request canceled (Client.Timeout exceeded while awaiting headers) [2017-07-20T10:01:58.006Z][WARN]-sync_manager.go:263,Failed to get cloud copy: Get https://1234567890abcd.iot.us-west-2.amazonaws.com:8443/things/what_the_thing_is_named/shadow: net/http: request canceled (Client.Timeout exceeded while awaiting headers) [2017-07-20T10:01:58.006Z][ERROR]-sync_manager.go:375,Failed to execute sync operation {what_the_thing_is_named VersionDiscontinued []}"

가능한 해결 방법은 코어 디바이스가 호스트 응답을 기다리는 시간을 구성하는 것입니다. greengrass-root/config에서 config.json 파일을 열고 제한 시간 값이 초 단위인 system.shadowSyncTimeout 필드를 추가합니다. 예:

{ "system": { "shadowSyncTimeout": 10 }, "coreThing": { "caPath": "root-ca.pem", "certPath": "cloud.pem.crt", "keyPath": "cloud.pem.key", ... }, ... }

config.json에 지정된 shadowSyncTimeout 값이 없는 경우 기본값은 5초입니다.

참고

AWS IoT Greengrass 코어 소프트웨어 v1.6 및 이전 버전의 경우 기본 shadowSyncTimeout은 1초입니다.

AWS re:Post 확인

이 주제의 문제 해결 정보를 사용해 문제를 해결할 수 없는 경우에는 관련 문제에 대해 AWS IoT Greengrass 문제 해결를 검색하거나 관련 이슈에 대한 AWS IoT GreengrassAWS re:Post 태그를 확인하거나 새 포럼 스레드를 게시할 수 있습니다. AWS IoT Greengrass 팀 구성원은 적극적으로 AWS re:Post를 모니터링합니다.