도커 컨테이너 실행 - AWS IoT Greengrass

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

도커 컨테이너 실행

다음 위치에 저장된 이미지에서 Docker 컨테이너를 실행하도록 AWS IoT Greengrass 구성 요소를 구성할 수 있습니다.

  • 아마존 Elastic 컨테이너 레지스트리 (Amazon ECR) 의 퍼블릭 및 프라이빗 이미지 리포지토리

  • 퍼블릭 도커 허브 리포지토리

  • 퍼블릭 도커 신뢰할 수 있는 레지스트리

  • S3 버킷

사용자 지정 구성 요소에 Docker 이미지 URI를 아티팩트로 포함하여 이미지를 검색하고 코어 디바이스에서 실행하십시오. Amazon ECR 및 Docker Hub 이미지의 경우 Docker 애플리케이션 관리자 구성 요소를 사용하여 프라이빗 Amazon ECR 리포지토리의 이미지를 다운로드하고 자격 증명을 관리할 수 있습니다.

요구 사항

구성 요소에서 Docker 컨테이너를 실행하려면 다음이 필요합니다.

  • 그린그래스 코어 디바이스. 계정이 없는 경우 자습서: AWS IoT Greengrass V2 시작하기 단원을 참조하십시오.

  • 도커 엔진 1.9.1 이상이 그린그래스 코어 디바이스에 설치되었습니다. 버전 20.10은 Core 소프트웨어와 함께 작동하는 것으로 검증된 최신 버전입니다. AWS IoT Greengrass Docker 컨테이너를 실행하는 구성 요소를 배포하려면 먼저 코어 디바이스에 Docker를 직접 설치해야 합니다.

    작은 정보

    구성 요소가 설치될 때 Docker Engine을 설치하도록 코어 디바이스를 구성할 수도 있습니다. 예를 들어 다음 설치 스크립트는 Docker 이미지를 로드하기 전에 Docker 엔진을 설치합니다. 이 설치 스크립트는 Ubuntu와 같은 데비안 기반 Linux 배포판에서 작동합니다. 이 명령으로 Docker Engine을 설치하도록 구성 요소를 구성하는 경우 설치 및 명령을 실행하려면 라이프사이클 true 스크립트에서 RequiresPrivilege 로 설정해야 할 수 있습니다. docker 자세한 정보는 AWS IoT Greengrass 컴포넌트 레시피 참조을 참조하세요.

    apt-get install docker-ce docker-ce-cli containerd.io && docker load -i {artifacts:path}/hello-world.tar
  • Docker 컨테이너 구성 요소를 실행하는 시스템 사용자에게 루트 또는 관리자 권한이 있거나 루트 또는 관리자가 아닌 사용자로 실행하도록 Docker를 구성해야 합니다.

    • Linux 디바이스에서는 docker 그룹에 사용자를 추가하여 없이 docker sudo 명령을 호출할 수 있습니다.

    • Windows 장치에서는 관리자 권한 없이 docker 명령을 호출할 사용자를 docker-users 그룹에 추가할 수 있습니다.

    Linux or Unix

    Docker 컨테이너 구성 요소를 실행하는 데 사용하는 사용자 또는 루트가 아닌 사용자를 docker 그룹에 추가하려면 ggc_user 다음 명령어를 실행합니다.

    sudo usermod -aG docker ggc_user

    자세한 내용은 루트가 아닌 사용자로 Docker 관리를 참조하십시오.

    Windows Command Prompt (CMD)

    Docker 컨테이너 구성 요소를 실행하는 데 사용하는 사용자 또는 사용자를 docker-users 그룹에 추가하려면 ggc_user 관리자로 다음 명령을 실행합니다.

    net localgroup docker-users ggc_user /add
    Windows PowerShell

    그룹에 Docker 컨테이너 구성 요소를 실행하는 데 사용하는 사용자 또는 사용자를 docker-users 그룹에 추가하려면 ggc_user 관리자로 다음 명령을 실행합니다.

    Add-LocalGroupMember -Group docker-users -Member ggc_user
  • Docker 컨테이너 구성 요소에서 액세스한 파일은 Docker 컨테이너에 볼륨으로 마운트됩니다.

  • 네트워크 프록시를 사용하도록 AWS IoT Greengrass Core 소프트웨어를 구성하는 경우 동일한 프록시 서버를 사용하도록 Docker를 구성해야 합니다.

환경에 적용되는 경우 이러한 요구 사항 외에도 다음 요구 사항도 충족해야 합니다.

Amazon ECR 또는 Docker Hub의 공개 이미지에서 도커 컨테이너 실행

이 섹션에서는 Amazon ECR 및 Docker Hub에 저장된 Docker 이미지에서 Docker Compose를 사용하여 Docker 컨테이너를 실행하는 사용자 지정 구성 요소를 생성하는 방법을 설명합니다.

Docker Compose를 사용하여 Docker 컨테이너를 실행하려면
  1. Docker Compose 파일을 생성하여 Amazon S3 버킷에 업로드합니다. Greengrass 장치 역할이 장치가 Compose 파일에 액세스할 수 있도록 하는 s3:GetObject 권한을 허용하는지 확인하세요. 다음 예제에 표시된 예제 작성 파일에는 Amazon ECR의 Amazon CloudWatch 에이전트 이미지와 Docker Hub의 MySQL 이미지가 포함되어 있습니다.

    version: "3" services: cloudwatchagent: image: "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest" mysql: image: "mysql:8.0"
  2. 코어 디바이스에 사용자 지정 구성 요소를 생성합니다. AWS IoT Greengrass 다음 예제에 표시된 예제 레시피에는 다음과 같은 속성이 있습니다.

    • 종속성으로서의 Docker 애플리케이션 관리자 구성 요소. 이 구성 요소를 사용하면 AWS IoT Greengrass 퍼블릭 Amazon ECR 및 Docker Hub 리포지토리에서 이미지를 다운로드할 수 있습니다.

    • 퍼블릭 Amazon ECR 리포지토리의 Docker 이미지를 지정하는 구성 요소 아티팩트입니다.

    • 퍼블릭 Docker Hub 리포지토리의 Docker 이미지를 지정하는 구성 요소 아티팩트입니다.

    • 실행하려는 Docker 이미지의 컨테이너가 포함된 Docker Compose 파일을 지정하는 구성 요소 아티팩트입니다.

    • docker-compose up을 사용하여 지정된 이미지에서 컨테이너를 만들고 시작하는 라이프사이클 실행 스크립트입니다.

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.MyDockerComposeComponent", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that uses Docker Compose to run images from public Amazon ECR and Docker Hub.", "ComponentPublisher": "Amazon", "ComponentDependencies": { "aws.greengrass.DockerApplicationManager": { "VersionRequirement": "~2.0.0" } }, "Manifests": [ { "Platform": { "os": "all" }, "Lifecycle": { "run": "docker-compose -f {artifacts:path}/docker-compose.yaml up" }, "Artifacts": [ { "URI": "docker:public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest" }, { "URI": "docker:mysql:8.0" }, { "URI": "s3://DOC-EXAMPLE-BUCKET/folder/docker-compose.yaml" } ] } ] }
    YAML
    --- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.MyDockerComposeComponent ComponentVersion: '1.0.0' ComponentDescription: 'A component that uses Docker Compose to run images from public Amazon ECR and Docker Hub.' ComponentPublisher: Amazon ComponentDependencies: aws.greengrass.DockerApplicationManager: VersionRequirement: ~2.0.0 Manifests: - Platform: os: all Lifecycle: run: docker-compose -f {artifacts:path}/docker-compose.yaml up Artifacts: - URI: "docker:public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest" - URI: "docker:mysql:8.0" - URI: "s3://DOC-EXAMPLE-BUCKET/folder/docker-compose.yaml"
    참고

    Docker 컨테이너 구성 요소에서 IPC (프로세스 간 통신), AWS 자격 증명 또는 스트림 관리자를 사용하려면 Docker 컨테이너를 실행할 때 추가 옵션을 지정해야 합니다. 자세한 내용은 다음을 참조하십시오.

  3. 구성 요소를 테스트하여 예상대로 작동하는지 확인합니다.

    중요

    구성 요소를 배포하기 전에 Docker 데몬을 설치하고 시작해야 합니다.

    구성 요소를 로컬에 배포한 후 docker container ls 명령을 실행하여 컨테이너가 실행되는지 확인할 수 있습니다.

    docker container ls
  4. 구성 요소가 준비되면 구성 요소를 AWS IoT Greengrass 업로드하여 다른 코어 장치에 배포하십시오. 자세한 정보는 코어 디바이스에 배포할 구성 요소를 게시하세요.을 참조하세요.

Amazon ECR의 프라이빗 이미지에서 Docker 컨테이너 실행

이 단원에서는 Amazon ECR의 프라이빗 리포지토리에 저장된 Docker 이미지에서 Docker 컨테이너를 실행하는 사용자 지정 구성 요소를 생성하는 방법을 설명합니다.

Docker 컨테이너를 실행하려면
  1. AWS IoT Greengrass 코어 디바이스에서 사용자 지정 구성 요소를 만드세요. 다음과 같은 속성을 가진 다음 예제 레시피를 사용하세요.

    • Docker 애플리케이션 관리자 구성 요소를 종속성으로 사용합니다. 이 구성 요소를 사용하면 개인 AWS IoT Greengrass 리포지토리에서 이미지를 다운로드하기 위한 자격 증명을 관리할 수 있습니다.

    • 토큰 교환 서비스 구성 요소는 종속성입니다. 이 구성 요소를 사용하면 AWS 자격 증명을 AWS IoT Greengrass 검색하여 Amazon ECR과 상호 작용할 수 있습니다.

    • 프라이빗 Amazon ECR 리포지토리의 Docker 이미지를 지정하는 구성 요소 아티팩트입니다.

    • docker run을 사용하여 이미지에서 컨테이너를 만들고 시작하는 라이프사이클 실행 스크립트입니다.

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.MyPrivateDockerComponent", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that runs a Docker container from a private Amazon ECR image.", "ComponentPublisher": "Amazon", "ComponentDependencies": { "aws.greengrass.DockerApplicationManager": { "VersionRequirement": "~2.0.0" }, "aws.greengrass.TokenExchangeService": { "VersionRequirement": "~2.0.0" } }, "Manifests": [ { "Platform": { "os": "all" }, "Lifecycle": { "run": "docker run account-id.dkr.ecr.region.amazonaws.com/repository[:tag|@digest]" }, "Artifacts": [ { "URI": "docker:account-id.dkr.ecr.region.amazonaws.com/repository[:tag|@digest]" } ] } ] }
    YAML
    --- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.MyPrivateDockerComponent ComponentVersion: '1.0.0' ComponentDescription: 'A component that runs a Docker container from a private Amazon ECR image.' ComponentPublisher: Amazon ComponentDependencies: aws.greengrass.DockerApplicationManager: VersionRequirement: ~2.0.0 aws.greengrass.TokenExchangeService: VersionRequirement: ~2.0.0 Manifests: - Platform: os: all Lifecycle: run: docker run account-id.dkr.ecr.region.amazonaws.com/repository[:tag|@digest] Artifacts: - URI: "docker:account-id.dkr.ecr.region.amazonaws.com/repository[:tag|@digest]"
    참고

    Docker 컨테이너 구성 요소에서 IPC (프로세스 간 통신), AWS 자격 증명 또는 스트림 관리자를 사용하려면 Docker 컨테이너를 실행할 때 추가 옵션을 지정해야 합니다. 자세한 내용은 다음을 참조하십시오.

  2. 구성 요소를 테스트하여 예상대로 작동하는지 확인합니다.

    중요

    구성 요소를 배포하기 전에 Docker 데몬을 설치하고 시작해야 합니다.

    구성 요소를 로컬에 배포한 후 docker container ls 명령을 실행하여 컨테이너가 실행되는지 확인할 수 있습니다.

    docker container ls
  3. 구성 요소를 AWS IoT Greengrass 업로드하여 다른 코어 디바이스에 배포합니다. 자세한 정보는 코어 디바이스에 배포할 구성 요소를 게시하세요.을 참조하세요.

Amazon S3의 이미지에서 도커 컨테이너 실행

이 단원에서는 Amazon S3에 저장된 Docker 이미지를 사용하여 구성 요소에서 Docker 컨테이너를 실행하는 방법을 설명합니다.

Amazon S3의 이미지에서 구성 요소의 Docker 컨테이너를 실행하려면
  1. docker save 명령을 실행하여 도커 컨테이너의 백업을 생성합니다. 이 백업을 컨테이너를 실행할 구성 요소 아티팩트로 제공합니다. AWS IoT Greengrasshello-world를 이미지 이름으로 바꾸고 hello-world.tar 를 생성할 아카이브 파일 이름으로 바꾸십시오.

    docker save hello-world > artifacts/com.example.MyDockerComponent/1.0.0/hello-world.tar
  2. 코어 디바이스에서 사용자 지정 구성 요소를 만드세요. AWS IoT Greengrass 다음과 같은 속성을 가진 다음 예제 레시피를 사용하세요.

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.MyS3DockerComponent", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that runs a Docker container from an image in an S3 bucket.", "ComponentPublisher": "Amazon", "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "install": { "Script": "docker load -i {artifacts:path}/hello-world.tar" }, "run": { "Script": "docker run --rm hello-world" } } } ] }
    YAML
    --- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.MyS3DockerComponent ComponentVersion: '1.0.0' ComponentDescription: 'A component that runs a Docker container from an image in an S3 bucket.' ComponentPublisher: Amazon Manifests: - Platform: os: linux Lifecycle: install: Script: docker load -i {artifacts:path}/hello-world.tar run: Script: docker run --rm hello-world
    참고

    Docker 컨테이너 구성 요소에서 IPC (프로세스 간 통신), AWS 자격 증명 또는 스트림 관리자를 사용하려면 Docker 컨테이너를 실행할 때 추가 옵션을 지정해야 합니다. 자세한 내용은 다음을 참조하십시오.

  3. 구성 요소를 테스트하여 예상대로 작동하는지 확인합니다.

    구성 요소를 로컬에 배포한 후 docker container ls 명령을 실행하여 컨테이너가 실행되는지 확인할 수 있습니다.

    docker container ls
  4. 구성 요소가 준비되면 Docker 이미지 아카이브를 S3 버킷에 업로드하고 해당 URI를 구성 요소 레시피에 추가합니다. 그런 다음 구성 요소를 업로드하여 다른 코어 AWS IoT Greengrass 디바이스에 배포할 수 있습니다. 자세한 정보는 코어 디바이스에 배포할 구성 요소를 게시하세요.을 참조하세요.

    완료하면 구성 요소 레시피가 다음 예제와 같아야 합니다.

    JSON
    { "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.MyS3DockerComponent", "ComponentVersion": "1.0.0", "ComponentDescription": "A component that runs a Docker container from an image in an S3 bucket.", "ComponentPublisher": "Amazon", "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "install": { "Script": "docker load -i {artifacts:path}/hello-world.tar" }, "run": { "Script": "docker run --rm hello-world" } }, "Artifacts": [ { "URI": "s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.MyDockerComponent/1.0.0/hello-world.tar" } ] } ] }
    YAML
    --- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.MyS3DockerComponent ComponentVersion: '1.0.0' ComponentDescription: 'A component that runs a Docker container from an image in an S3 bucket.' ComponentPublisher: Amazon Manifests: - Platform: os: linux Lifecycle: install: Script: docker load -i {artifacts:path}/hello-world.tar run: Script: docker run --rm hello-world Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.MyDockerComponent/1.0.0/hello-world.tar

Docker 컨테이너 구성 요소에서 프로세스 간 통신을 사용하십시오.

의 Greengrass 프로세스 간 통신 (IPC) 라이브러리를 사용하여 Greengrass 핵, 기타 Greengrass 구성 요소 등과 AWS IoT Device SDK 통신할 수 있습니다. AWS IoT Core자세한 정보는 AWS IoT Device SDK 를 사용하여 Greengrass 핵, 기타 구성 요소와 통신하고 AWS IoT Core을 참조하세요.

Docker 컨테이너 구성 요소에서 IPC를 사용하려면 다음 파라미터를 사용하여 Docker 컨테이너를 실행해야 합니다.

  • IPC 소켓을 컨테이너에 마운트합니다. Greengrass 핵은 환경 변수에 IPC 소켓 파일 경로를 제공합니다. AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT

  • SVCUIDAWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT 환경 변수를 Greengrass 핵이 구성요소에 제공하는 값으로 설정합니다. 구성 요소는 이러한 환경 변수를 사용하여 Greengrass 핵에 대한 연결을 인증합니다.

예제 레시피: MQTT 메시지를 AWS IoT Core (Python) 에 게시하기

다음 레시피는 MQTT 메시지를 게시하는 예제 Docker 컨테이너 구성 요소를 정의합니다. AWS IoT Core이 레시피의 속성은 다음과 같습니다.

  • 구성 요소가 모든 주제에 대해 MQTT 메시지를 게시할 수 있도록 하는 권한 부여 정책 (accessControl). AWS IoT Core 자세한 내용은 AWS IoT Core MQTT IPC 인증을 참조하십시오구성 요소가 IPC 작업을 수행할 수 있도록 승인하십시오..

  • Docker 이미지를 Amazon S3의 TAR 아카이브로 지정하는 구성 요소 아티팩트입니다.

  • TAR 아카이브에서 Docker 이미지를 로드하는 수명 주기 설치 스크립트입니다.

  • 이미지에서 Docker 컨테이너를 실행하는 라이프사이클 실행 스크립트. Docker 실행 명령에는 다음과 같은 인수가 포함됩니다.

    • -v인수는 그린그래스 IPC 소켓을 컨테이너에 마운트합니다.

    • 처음 두 -e 인수는 Docker 컨테이너에 필요한 환경 변수를 설정합니다.

    • 추가 -e 인수는 이 예제에서 사용하는 환경 변수를 설정합니다.

    • --rm인수는 컨테이너가 종료될 때 컨테이너를 정리합니다.

JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.python.docker.PublishToIoTCore", "ComponentVersion": "1.0.0", "ComponentDescription": "Uses interprocess communication to publish an MQTT message to IoT Core.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "topic": "test/topic/java", "message": "Hello, World!", "qos": "1", "accessControl": { "aws.greengrass.ipc.mqttproxy": { "com.example.python.docker.PublishToIoTCore:pubsub:1": { "policyDescription": "Allows access to publish to IoT Core on all topics.", "operations": [ "aws.greengrass#PublishToIoTCore" ], "resources": [ "*" ] } } } } }, "Manifests": [ { "Platform": { "os": "all" }, "Lifecycle": { "install": "docker load -i {artifacts:path}/publish-to-iot-core.tar", "run": "docker run -v $AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT:$AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT -e SVCUID -e AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT -e MQTT_TOPIC=\"{configuration:/topic}\" -e MQTT_MESSAGE=\"{configuration:/message}\" -e MQTT_QOS=\"{configuration:/qos}\" --rm publish-to-iot-core" }, "Artifacts": [ { "URI": "s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.python.docker.PublishToIoTCore/1.0.0/publish-to-iot-core.tar" } ] } ] }
YAML
RecipeFormatVersion: '2020-01-25' ComponentName: com.example.python.docker.PublishToIoTCore ComponentVersion: 1.0.0 ComponentDescription: Uses interprocess communication to publish an MQTT message to IoT Core. ComponentPublisher: Amazon ComponentConfiguration: DefaultConfiguration: topic: 'test/topic/java' message: 'Hello, World!' qos: '1' accessControl: aws.greengrass.ipc.mqttproxy: 'com.example.python.docker.PublishToIoTCore:pubsub:1': policyDescription: Allows access to publish to IoT Core on all topics. operations: - 'aws.greengrass#PublishToIoTCore' resources: - '*' Manifests: - Platform: os: all Lifecycle: install: 'docker load -i {artifacts:path}/publish-to-iot-core.tar' run: | docker run \ -v $AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT:$AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT \ -e SVCUID \ -e AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT \ -e MQTT_TOPIC="{configuration:/topic}" \ -e MQTT_MESSAGE="{configuration:/message}" \ -e MQTT_QOS="{configuration:/qos}" \ --rm publish-to-iot-core Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.python.docker.PublishToIoTCore/1.0.0/publish-to-iot-core.tar

Docker 컨테이너 구성 요소 (Linux) 에서 AWS 자격 증명 사용

토큰 교환 서비스 구성 요소를 사용하여 Greengrass 구성 요소의 AWS 서비스와 상호 작용할 수 있습니다. 이 구성 요소는 로컬 컨테이너 서버를 사용하는 코어 디바이스의 토큰 교환 역할의 AWS 자격 증명을 제공합니다. 자세한 정보는 AWS서비스와 상호작용을 참조하세요.

참고

이 섹션의 예제는 Linux 코어 디바이스에서만 작동합니다.

Docker 컨테이너 구성 요소에서 토큰 교환 서비스의 AWS 자격 증명을 사용하려면 다음 매개 변수를 사용하여 Docker 컨테이너를 실행해야 합니다.

  • 인수를 사용하여 호스트 네트워크에 대한 액세스를 제공합니다. --network=host 이 옵션을 사용하면 Docker 컨테이너를 로컬 토큰 교환 서비스에 연결하여 AWS 자격 증명을 검색할 수 있습니다. 이 인수는 리눅스용 Docker에서만 작동합니다.

    주의

    이 옵션을 사용하면 컨테이너가 호스트의 모든 로컬 네트워크 인터페이스에 액세스할 수 있으므로 이 옵션은 호스트 네트워크에 대한 액세스 권한 없이 Docker 컨테이너를 실행하는 경우보다 덜 안전합니다. 이 옵션을 사용하는 Docker 컨테이너 구성 요소를 개발하고 실행할 때는 이 점을 고려하세요. 자세한 내용은 Docker 설명서의 네트워크: 호스트를 참조하십시오.

  • AWS_CONTAINER_CREDENTIALS_FULL_URIAWS_CONTAINER_AUTHORIZATION_TOKEN 환경 변수를 Greengrass 핵이 구성요소에 제공하는 값으로 설정합니다. AWS SDK는 이러한 환경 변수를 사용하여 자격 증명을 검색합니다. AWS

예제 레시피: Docker 컨테이너 구성 요소의 S3 버킷 나열 (Python)

다음 레시피는 사용자의 S3 버킷을 나열하는 예제 Docker 컨테이너 구성 요소를 정의합니다. AWS 계정이 레시피의 속성은 다음과 같습니다.

  • 토큰 교환 서비스 구성 요소는 종속성입니다. 이러한 종속성을 통해 구성 요소는 AWS 자격 증명을 검색하여 다른 AWS 서비스와 상호 작용할 수 있습니다.

  • Amazon S3의 Docker 이미지를 tar 아카이브로 지정하는 구성 요소 아티팩트입니다.

  • TAR 아카이브에서 Docker 이미지를 로드하는 수명 주기 설치 스크립트입니다.

  • 이미지에서 Docker 컨테이너를 실행하는 라이프사이클 실행 스크립트. Docker 실행 명령에는 다음과 같은 인수가 포함됩니다.

    • --network=host인수는 컨테이너가 호스트 네트워크에 액세스할 수 있도록 하므로 컨테이너가 토큰 교환 서비스에 연결할 수 있습니다.

    • -e인수는 Docker 컨테이너에 필요한 환경 변수를 설정합니다.

    • --rm인수는 컨테이너가 종료될 때 컨테이너를 정리합니다.

JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.python.docker.ListS3Buckets", "ComponentVersion": "1.0.0", "ComponentDescription": "Uses the token exchange service to lists your S3 buckets.", "ComponentPublisher": "Amazon", "ComponentDependencies": { "aws.greengrass.TokenExchangeService": { "VersionRequirement": "^2.0.0", "DependencyType": "HARD" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "install": "docker load -i {artifacts:path}/list-s3-buckets.tar", "run": "docker run --network=host -e AWS_CONTAINER_AUTHORIZATION_TOKEN -e AWS_CONTAINER_CREDENTIALS_FULL_URI --rm list-s3-buckets" }, "Artifacts": [ { "URI": "s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.python.docker.ListS3Buckets/1.0.0/list-s3-buckets.tar" } ] } ] }
YAML
RecipeFormatVersion: '2020-01-25' ComponentName: com.example.python.docker.ListS3Buckets ComponentVersion: 1.0.0 ComponentDescription: Uses the token exchange service to lists your S3 buckets. ComponentPublisher: Amazon ComponentDependencies: aws.greengrass.TokenExchangeService: VersionRequirement: ^2.0.0 DependencyType: HARD Manifests: - Platform: os: linux Lifecycle: install: 'docker load -i {artifacts:path}/list-s3-buckets.tar' run: | docker run \ --network=host \ -e AWS_CONTAINER_AUTHORIZATION_TOKEN \ -e AWS_CONTAINER_CREDENTIALS_FULL_URI \ --rm list-s3-buckets Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.python.docker.ListS3Buckets/1.0.0/list-s3-buckets.tar

Docker 컨테이너 구성 요소 (Linux) 에서 스트림 관리자 사용

스트림 관리자 구성 요소를 사용하여 Greengrass 구성 요소의 데이터 스트림을 관리할 수 있습니다. 이 구성 요소를 사용하면 데이터 스트림을 처리하고 대용량 IoT 데이터를 로 전송할 수 있습니다. AWS 클라우드 AWS IoT Greengrass 스트림 관리자 구성 요소와 상호 작용하는 데 사용하는 스트림 관리자 SDK를 제공합니다. 자세한 정보는 Greengrass 코어 디바이스의 데이터 스트림 관리을 참조하세요.

참고

이 섹션의 예제는 Linux 코어 디바이스에서만 작동합니다.

Docker 컨테이너 구성 요소에서 스트림 관리자 SDK를 사용하려면 다음 매개 변수를 사용하여 Docker 컨테이너를 실행해야 합니다.

  • 인수를 사용하여 호스트 네트워크에 대한 액세스를 제공합니다. --network=host 이 옵션을 사용하면 Docker 컨테이너가 로컬 TLS 연결을 통해 스트림 관리자 구성 요소와 상호 작용할 수 있습니다. 이 인수는 리눅스용 Docker에서만 작동합니다.

    주의

    이 옵션을 사용하면 컨테이너가 호스트의 모든 로컬 네트워크 인터페이스에 액세스할 수 있으므로 이 옵션은 호스트 네트워크에 대한 액세스 권한 없이 Docker 컨테이너를 실행하는 경우보다 덜 안전합니다. 이 옵션을 사용하는 Docker 컨테이너 구성 요소를 개발하고 실행할 때는 이 점을 고려하세요. 자세한 내용은 Docker 설명서의 네트워크: 호스트를 참조하십시오.

  • 인증을 요구하도록 스트림 관리자 구성 요소를 구성하는 경우 (기본 동작), AWS_CONTAINER_CREDENTIALS_FULL_URI 환경 변수를 Greengrass nucleus가 구성 요소에 제공하는 값으로 설정합니다. 자세한 내용은 스트림 관리자 구성을 참조하십시오.

  • 기본이 아닌 포트를 사용하도록 스트림 관리자 구성 요소를 구성하는 경우 IPC (프로세스 간 통신) 를 사용하여 스트림 관리자 구성 요소 구성에서 포트를 가져오십시오. IPC를 사용하려면 추가 옵션을 사용하여 Docker 컨테이너를 실행해야 합니다. 자세한 내용은 다음을 참조하십시오.

예제 레시피: Docker 컨테이너 구성 요소 (Python) 의 S3 버킷으로 파일 스트리밍

다음 레시피는 파일을 생성하여 S3 버킷으로 스트리밍하는 예제 Docker 컨테이너 구성 요소를 정의합니다. 이 레시피의 속성은 다음과 같습니다.

  • 스트림 관리자 구성 요소는 종속성입니다. 이러한 종속성을 통해 구성 요소는 스트림 관리자 SDK를 사용하여 스트림 관리자 구성 요소와 상호 작용할 수 있습니다.

  • Docker 이미지를 Amazon S3의 TAR 아카이브로 지정하는 구성 요소 아티팩트입니다.

  • TAR 아카이브에서 Docker 이미지를 로드하는 수명 주기 설치 스크립트입니다.

  • 이미지에서 Docker 컨테이너를 실행하는 라이프사이클 실행 스크립트. Docker 실행 명령에는 다음과 같은 인수가 포함됩니다.

    • --network=host인수는 호스트 네트워크에 대한 컨테이너 액세스를 제공하므로 컨테이너를 스트림 관리자 구성 요소에 연결할 수 있습니다.

    • 첫 번째 -e 인수는 Docker 컨테이너에 필요한 AWS_CONTAINER_AUTHORIZATION_TOKEN 환경 변수를 설정합니다.

    • 추가 -e 인수는 이 예제에서 사용하는 환경 변수를 설정합니다.

    • -v인수는 구성 요소의 작업 폴더를 컨테이너에 마운트합니다. 이 예제에서는 스트림 관리자를 사용하여 작업 폴더에 파일을 생성하여 Amazon S3에 해당 파일을 업로드합니다.

    • --rm인수는 컨테이너가 종료될 때 컨테이너를 정리합니다.

JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.python.docker.StreamFileToS3", "ComponentVersion": "1.0.0", "ComponentDescription": "Creates a text file and uses stream manager to stream the file to S3.", "ComponentPublisher": "Amazon", "ComponentDependencies": { "aws.greengrass.StreamManager": { "VersionRequirement": "^2.0.0", "DependencyType": "HARD" } }, "ComponentConfiguration": { "DefaultConfiguration": { "bucketName": "" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "install": "docker load -i {artifacts:path}/stream-file-to-s3.tar", "run": "docker run --network=host -e AWS_CONTAINER_AUTHORIZATION_TOKEN -e BUCKET_NAME=\"{configuration:/bucketName}\" -e WORK_PATH=\"{work:path}\" -v {work:path}:{work:path} --rm stream-file-to-s3" }, "Artifacts": [ { "URI": "s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.python.docker.StreamFileToS3/1.0.0/stream-file-to-s3.tar" } ] } ] }
YAML
RecipeFormatVersion: '2020-01-25' ComponentName: com.example.python.docker.StreamFileToS3 ComponentVersion: 1.0.0 ComponentDescription: Creates a text file and uses stream manager to stream the file to S3. ComponentPublisher: Amazon ComponentDependencies: aws.greengrass.StreamManager: VersionRequirement: ^2.0.0 DependencyType: HARD ComponentConfiguration: DefaultConfiguration: bucketName: '' Manifests: - Platform: os: linux Lifecycle: install: 'docker load -i {artifacts:path}/stream-file-to-s3.tar' run: | docker run \ --network=host \ -e AWS_CONTAINER_AUTHORIZATION_TOKEN \ -e BUCKET_NAME="{configuration:/bucketName}" \ -e WORK_PATH="{work:path}" \ -v {work:path}:{work:path} \ --rm stream-file-to-s3 Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/artifacts/com.example.python.docker.StreamFileToS3/1.0.0/stream-file-to-s3.tar