기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
다음 위치에 저장된 이미지에서 Docker
-
Amazon Elastic Container Registry(AmazonECR)의 퍼블릭 및 프라이빗 이미지 리포지토리
-
퍼블릭 Docker Hub 리포지토리
-
퍼블릭 Docker 신뢰할 수 있는 레지스트리
-
S3 버킷
사용자 지정 구성 요소에 Docker 이미지를 URI 아티팩트로 포함시켜 이미지를 검색하고 코어 디바이스에서 실행합니다. Amazon ECR 및 Docker Hub 이미지의 경우 Docker 애플리케이션 관리자 구성 요소를 사용하여 이미지를 다운로드하고 프라이빗 Amazon ECR리포지토리의 자격 증명을 관리할 수 있습니다.
주제
요구 사항
구성 요소에서 Docker 컨테이너를 실행하려면 다음이 필요합니다.
-
Greengrass 코어 디바이스. 없으면 자습서: 시작하기 AWS IoT Greengrass V2 단원을 참조하세요.
-
Greengrass 코어 디바이스에 Docker Engine
1.9.1 이상이 설치되어 있어야 합니다. 버전 20.10은 AWS IoT Greengrass 코어 소프트웨어와 함께 작동하는 것으로 확인된 최신 버전입니다. Docker 컨테이너를 실행하는 구성 요소를 배포하기 전에 코어 디바이스에 직접 Docker를 설치해야 합니다. 작은 정보
구성 요소가 설치될 때 코어 디바이스가 Docker Engine을 설치하도록 구성할 수도 있습니다. 예를 들어 다음 설치 스크립트는 Docker 이미지를 로드하기 전에 Docker Engine을 설치합니다. 이 설치 스크립트는 Ubuntu와 같은 Debian 기반 Linux 배포에서 작동합니다. 이 명령으로 Docker Engine을 설치하도록 구성하는 경우 설치 및
docker
명령을 실행하려면 수명 주기 스크립트에서RequiresPrivilege
를true
로 설정해야 할 수 있습니다. 자세한 내용은 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
그룹에 사용자를 추가하여sudo
없이docker
명령을 직접적으로 호출할 수 있습니다. -
Windows 디바이스에서는
docker-users
그룹에 사용자를 추가하여 관리자 권한 없이docker
명령을 직접적으로 호출할 수 있습니다.
Docker 컨테이너 구성 요소를 실행하는 데 사용하는
ggc_user
또는 루트 사용자가 아닌 사용자를docker
그룹에 추가하려면 다음 명령을 실행합니다.sudo usermod -aG docker
ggc_user
자세한 내용은 루트 사용자가 아닌 사용자로 Docker 관리
를 참조하세요. -
-
Docker 컨테이너에 볼륨으로 탑재
된 Docker 컨테이너 구성 요소에서 액세스하는 파일입니다. -
네트워크 프록시를 사용하도록 AWS IoT Greengrass 코어 소프트웨어를 구성하는 경우 동일한 프록시 서버를 사용하도록 Docker를 구성
해야 합니다.
이러한 요구 사항 외에도 사용자 환경에 적용되는 경우 다음과 같은 요구 사항도 충족해야 합니다.
-
Docker Compose
를 사용하여 Docker 컨테이너를 생성하고 시작하려면 Greengrass 코어 디바이스에 Docker Compose를 설치하고 Docker Compose 파일을 S3 버킷에 업로드하세요. Compose 파일을 구성 요소와 동일한 AWS 계정 및 AWS 리전 의 S3 버킷에 저장해야 합니다. 사용자 지정 컴포넌트에서 docker-compose up
명령을 사용하는 예제는 Amazon ECR 또는 Docker Hub의 퍼블릭 이미지에서 Docker 컨테이너 실행 섹션을 참조하세요. -
네트워크 프록시 AWS IoT Greengrass 뒤에서 실행하는 경우 프록시 서버를
사용하도록 Docker 데몬을 구성합니다. -
Docker 이미지가 Amazon ECR 또는 Docker Hub에 저장된 경우 Docker 컨테이너 구성 요소에 Docker 구성 요소 관리자 구성 요소를 종속 항목으로 포함시킵니다. 구성 요소를 배포하기 전에 코어 디바이스에서 Docker 대몬을 시작해야 합니다.
또한 이미지를 URIs 구성 요소 아티팩트로 포함합니다. 이미지는 다음 예제와
docker:
같은 형식이어야 URIs 합니다.registry
/image
[:tag|@digest
]-
프라이빗 Amazon ECR 이미지:
docker:
account-id
.dkr.ecr.region
.amazonaws.com/repository
/image
[:tag|@digest
] -
퍼블릭 Amazon ECR 이미지:
docker:public.ecr.aws/
repository
/image
[:tag|@digest
] -
퍼블릭 Docker Hub 이미지:
docker:
name
[:tag|@digest
]
퍼블릭 리포지토리에 저장된 이미지에서 Docker 컨테이너를 실행하는 방법에 대한 자세한 내용은 Amazon ECR 또는 Docker Hub의 퍼블릭 이미지에서 Docker 컨테이너 실행 섹션을 참조하세요.
-
-
Docker 이미지가 Amazon ECR 프라이빗 리포지토리에 저장되는 경우 Docker 컨테이너 구성 요소에 토큰 교환 서비스 구성 요소를 종속 항목으로 포함해야 합니다. 또한 Greengrass 디바이스 역할은 다음 예제 IAM 정책에 표시된 대로
ecr:GetAuthorizationToken
ecr:BatchGetImage
, 및ecr:GetDownloadUrlForLayer
작업을 허용해야 합니다.{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
Amazon ECR 프라이빗 리포지토리에 저장된 이미지에서 Docker 컨테이너를 실행하는 방법에 대한 자세한 내용은 섹션을 참조하세요Amazon의 프라이빗 이미지에서 Docker 컨테이너 실행 ECR.
-
Amazon ECR 프라이빗 리포지토리에 저장된 Docker 이미지를 사용하려면 프라이빗 리포지토리가 코어 디바이스 AWS 리전 와 동일한에 있어야 합니다.
-
Docker 이미지 또는 Compose 파일이 S3 버킷에 저장되는 경우 다음 예제 IAM 정책에 표시된 대로 Greengrass 디바이스 역할은 코어 디바이스가 이미지를 구성 요소 아티팩트로 다운로드할 수 있는
s3:GetObject
권한을 허용해야 합니다.{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
Amazon S3에 저장된 이미지에서 Docker 컨테이너를 실행하는 방법에 대한 자세한 내용은 Amazon S3의 이미지에서 Docker 컨테이너 실행 섹션을 참조하세요.
-
Docker 컨테이너 구성 요소에서 프로세스 간 통신(IPC), AWS 자격 증명 또는 스트림 관리자를 사용하려면 Docker 컨테이너를 실행할 때 추가 옵션을 지정해야 합니다. 자세한 내용은 다음 자료를 참조하세요.
Amazon ECR 또는 Docker Hub의 퍼블릭 이미지에서 Docker 컨테이너 실행
이 섹션에서는 Docker Compose를 사용하여 Amazon ECR 및 Docker Hub에 저장된 Docker 이미지에서 Docker 컨테이너를 실행하는 사용자 지정 구성 요소를 생성하는 방법을 설명합니다.
Docker Compose를 사용하여 Docker 컨테이너를 실행하려면
-
Docker Compose 파일을 생성하고 Amazon S3 버킷에 업로드합니다. Greengrass 디바이스 역할이 디바이스에서 Compose 파일에 액세스할 수 있는
s3:GetObject
권한을 허용하는지 확인합니다. 다음 예제에 표시된 Compose 파일의 예제에는 Amazon의 Amazon CloudWatch Agent 이미지ECR와 Docker Hub의 MySQL 이미지가 포함됩니다.version: "3" services: cloudwatchagent: image: "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest" mysql: image: "mysql:8.0"
-
AWS IoT Greengrass 코어 디바이스에서 사용자 지정 구성 요소를 생성합니다. 다음 예제에 표시된 예제 레시피에는 다음 속성이 있습니다.
-
종속성으로서의 Docker 애플리케이션 관리자 구성 요소입니다. 이 구성 요소를 사용하면 AWS IoT Greengrass 가 퍼블릭 Amazon ECR 및 Docker Hub 리포지토리에서 이미지를 다운로드할 수 있습니다.
-
퍼블릭 Amazon ECR리포지토리에서 Docker 이미지를 지정하는 구성 요소 아티팩트입니다.
-
퍼블릭 Docker Hub 리포지토리에서 Docker 이미지를 지정하는 구성 요소 아티팩트입니다.
-
실행하려는 Docker 이미지의 컨테이너를 포함하는 Docker Compose 파일을 지정하는 구성 요소 아티팩트입니다.
-
지정된 이미지에서 컨테이너를 생성하고 시작하기 위해 docker-compose up
을 사용하는 수명 주기 실행 스크립트입니다.
{ "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://amzn-s3-demo-bucket
/folder
/docker-compose.yaml" } ] } ] }참고
Docker 컨테이너 구성 요소에서 프로세스 간 통신(IPC), AWS 자격 증명 또는 스트림 관리자를 사용하려면 Docker 컨테이너를 실행할 때 추가 옵션을 지정해야 합니다. 자세한 내용은 다음 자료를 참조하세요.
-
-
구성 요소를 테스트하여 예상대로 작동하는지 확인합니다.
중요
구성 요소를 배포하기 전에 Docker 대몬을 설치하고 시작해야 합니다.
구성 요소를 로컬에 배포한 후 docker container ls
명령을 실행하여 컨테이너가 실행되는지 확인할 수 있습니다. docker container ls
-
구성 요소가 준비되면 구성 요소를에 업로드 AWS IoT Greengrass 하여 다른 코어 디바이스에 배포합니다. 자세한 내용은 코어 디바이스에 배포할 구성 요소를 게시하세요. 단원을 참조하십시오.
Amazon의 프라이빗 이미지에서 Docker 컨테이너 실행 ECR
이 섹션에서는 Amazon의 프라이빗 리포지토리에 저장된 Docker 이미지에서 Docker 컨테이너를 실행하는 사용자 지정 구성 요소를 생성하는 방법을 설명합니다ECR.
Docker 컨테이너를 실행하려면
-
AWS IoT Greengrass 코어 디바이스에서 사용자 지정 구성 요소를 생성합니다. 다음 속성이 있는 다음 레시피 예제를 사용합니다.
-
종속성으로서의 Docker 애플리케이션 관리자 구성 요소입니다. 이 구성 요소를 사용하면 AWS IoT Greengrass 가 프라이빗 리포지토리에서 이미지를 다운로드하기 위한 자격 증명을 관리할 수 있습니다.
-
종속성으로서의 토큰 교환 서비스 구성 요소입니다. 이 구성 요소를 사용하면 AWS IoT Greengrass 가 Amazon와 상호 작용할 AWS 자격 증명을 검색할 수 있습니다ECR.
-
프라이빗 Amazon ECR리포지토리에서 Docker 이미지를 지정하는 구성 요소 아티팩트입니다.
-
이미지에서 컨테이너를 생성하고 시작하기 위해 docker run
을 사용하는 수명 주기 실행 스크립트입니다.
{ "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 컨테이너를 실행할 때 추가 옵션을 지정해야 합니다. 자세한 내용은 다음 자료를 참조하세요.
-
-
구성 요소를 테스트하여 예상대로 작동하는지 확인합니다.
중요
구성 요소를 배포하기 전에 Docker 대몬을 설치하고 시작해야 합니다.
구성 요소를 로컬에 배포한 후 docker container ls
명령을 실행하여 컨테이너가 실행되는지 확인할 수 있습니다. docker container ls
-
구성 요소를에 업로드 AWS IoT Greengrass 하여 다른 코어 디바이스에 배포합니다. 자세한 내용은 코어 디바이스에 배포할 구성 요소를 게시하세요. 단원을 참조하십시오.
Amazon S3의 이미지에서 Docker 컨테이너 실행
이 섹션에서는 Amazon S3에 저장된 Docker 이미지의 구성 요소에서 Docker 컨테이너를 실행하는 방법을 설명합니다.
Amazon S3의 이미지에서 구성 요소에서 Docker 컨테이너를 실행하려면
-
docker save
명령을 실행하여 Docker 컨테이너의 백업을 생성합니다. 이 백업을 구성 요소 아티팩트로 제공하여 AWS IoT Greengrass에서 컨테이너를 실행합니다. hello-world
를 이미지 이름으로 바꾸고hello-world.tar
를 생성할 아카이브 파일의 이름으로 바꿉니다.docker save
hello-world
>artifacts/com.example.MyDockerComponent/1.0.0/hello-world.tar
-
AWS IoT Greengrass 코어 디바이스에서 사용자 지정 구성 요소를 생성합니다. 다음 속성이 있는 다음 레시피 예제를 사용합니다.
-
아카이브에서 Docker 이미지를 로드하기 위해 docker load
를 사용하는 수명 주기 설치 스크립트입니다. -
이미지에서 컨테이너를 생성하고 시작하기 위해 docker run
을 사용하는 수명 주기 실행 스크립트입니다. --rm
옵션은 컨테이너가 종료될 때 컨테이너를 정리합니다.
{ "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 --rmhello-world
" } } } ] }참고
Docker 컨테이너 구성 요소에서 프로세스 간 통신(IPC), AWS 자격 증명 또는 스트림 관리자를 사용하려면 Docker 컨테이너를 실행할 때 추가 옵션을 지정해야 합니다. 자세한 내용은 다음 자료를 참조하세요.
-
-
구성 요소를 테스트하여 예상대로 작동하는지 확인합니다.
구성 요소를 로컬에 배포한 후 docker container ls
명령을 실행하여 컨테이너가 실행되는지 확인할 수 있습니다. docker container ls
-
구성 요소가 준비되면 Docker 이미지 아카이브를 S3 버킷에 업로드하고 구성 요소 레시피URI에 추가합니다. 그런 다음 구성 요소를에 업로드 AWS IoT Greengrass 하여 다른 코어 디바이스에 배포할 수 있습니다. 자세한 내용은 코어 디바이스에 배포할 구성 요소를 게시하세요. 단원을 참조하십시오.
완료되면 구성 요소 레시피는 다음 예제와 유사하게 보일 것입니다.
{ "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 --rmhello-world
" } }, "Artifacts": [ { "URI": "s3://amzn-s3-demo-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 핵은
AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT
환경 변수에 IPC 소켓 파일 경로를 제공합니다. -
SVCUID
및AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT
환경 변수를 Greengrass nucleus가 구성 요소에 제공하는 값으로 설정합니다. 구성 요소는 이러한 환경 변수를 사용하여 Greengrass nucleus에 대한 연결을 인증합니다.
예 레시피 예:에 MQTT 메시지 게시 AWS IoT Core (Python)
다음 레시피는 MQTT 메시지를 게시하는 Docker 컨테이너 구성 요소의 예를 정의합니다 AWS IoT Core. 이 레시피의 속성은 다음과 같습니다.
-
구성 요소가 모든 주제에 AWS IoT Core 메시지를 게시할 MQTT 수 있도록 허용하는 권한 부여 정책(
accessControl
)입니다. 자세한 내용은 IPC 작업을 수행하도록 구성 요소 승인 및 AWS IoT Core MQTT IPC 권한 부여를 참조하세요. -
Amazon S3에서 Docker 이미지를 TAR 아카이브로 지정하는 구성 요소 아티팩트입니다.
-
TAR 아카이브에서 Docker 이미지를 로드하는 수명 주기 설치 스크립트입니다.
-
이미지에서 Docker 컨테이너를 실행하는 수명 주기 실행 스크립트입니다. Docker 실행
명령에는 다음 인수가 있습니다. -
-v
인수는 컨테이너에 Greengrass IPC 소켓을 탑재합니다. -
처음 두
-e
인수는 Docker 컨테이너에서 필요한 환경 변수를 설정합니다. -
추가
-e
인수는 이 예제에서 사용하는 환경 변수를 설정합니다. -
--rm
인수는 컨테이너가 종료될 때 컨테이너를 정리합니다.
-
{
"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://amzn-s3-demo-bucket/artifacts/com.example.python.docker.PublishToIoTCore/1.0.0/publish-to-iot-core.tar"
}
]
}
]
}
Docker 컨테이너 구성 요소에서 AWS 자격 증명 사용(Linux)
토큰 교환 서비스 구성 요소를 사용하여 Greengrass 구성 요소의 AWS 서비스와 상호 작용할 수 있습니다. 이 구성 요소는 로컬 컨테이너 서버를 사용하여 코어 디바이스의 토큰 교환 역할에서 AWS 자격 증명을 제공합니다. 자세한 내용은 AWS 서비스와 상호 작용 단원을 참조하십시오.
참고
이 섹션의 예제는 Linux 코어 디바이스에서만 작동합니다.
Docker 컨테이너 구성 요소의 토큰 교환 서비스에서 AWS 보안 인증을 사용하려면 다음 파라미터로 Docker 컨테이너를 실행해야 합니다.
-
--network=host
인수를 사용하여 호스트 네트워크에 대한 액세스를 제공합니다. 이 옵션을 사용하면 Docker 컨테이너가 로컬 토큰 교환 서비스에 연결하여 AWS 자격 증명을 검색할 수 있습니다. 이 인수는 Linux용 Docker에서만 작동합니다.주의
이 옵션을 사용하면 컨테이너가 호스트의 모든 로컬 네트워크 인터페이스에 액세스할 수 있으므로 호스트 네트워크에 대한 액세스 권한 없이 Docker 컨테이너를 실행하는 경우보다 안전하지 않습니다. 이 옵션을 사용하는 Docker 컨테이너 구성 요소를 개발하고 실행할 때 이 점을 고려하세요. 자세한 내용은 Docker 설명서에서 네트워크: 호스트
를 참조하세요. -
AWS_CONTAINER_CREDENTIALS_FULL_URI
및AWS_CONTAINER_AUTHORIZATION_TOKEN
환경 변수를 Greengrass 핵이 구성 요소에 제공하는 값으로 설정합니다. AWS SDKs 이러한 환경 변수를 사용하여 AWS 자격 증명을 검색합니다.
예제 레시피: Docker 컨테이너 구성 요소에 S3 버킷 나열(Python)
다음 레시피는 AWS 계정에 S3 버킷을 나열하는 예제 Docker 컨테이너 구성 요소를 정의합니다. 이 레시피의 속성은 다음과 같습니다.
-
종속성으로서의 토큰 교환 서비스 구성 요소입니다. 이 종속성을 사용하면 구성 요소가 다른 AWS 서비스와 상호 작용하기 위해 AWS 자격 증명을 검색할 수 있습니다.
-
Amazon S3에서 Docker 이미지를 TAR 아카이브로 지정하는 구성 요소 아티팩트입니다.
-
TAR 아카이브에서 Docker 이미지를 로드하는 수명 주기 설치 스크립트입니다.
-
이미지에서 Docker 컨테이너를 실행하는 수명 주기 실행 스크립트입니다. Docker 실행
명령에는 다음 인수가 있습니다. -
--network=host
인수는 컨테이너가 토큰 교환 서비스에 연결할 수 있도록 호스트 네트워크에 대한 컨테이너 액세스를 제공합니다. -
-e
인수는 Docker 컨테이너에 필요한 환경 변수를 설정합니다. -
--rm
인수는 컨테이너가 종료될 때 컨테이너를 정리합니다.
-
{
"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://amzn-s3-demo-bucket/artifacts/com.example.python.docker.ListS3Buckets/1.0.0/list-s3-buckets.tar"
}
]
}
]
}
Docker 컨테이너 구성 요소에서 스트림 관리자 사용(Linux)
스트림 관리자 구성 요소를 사용하여 Greengrass 구성 요소의 데이터 스트림을 관리할 수 있습니다. 이 구성 요소를 사용하면 데이터 스트림을 처리하고 대용량 IoT 데이터를 로 전송할 수 AWS 클라우드있습니다.는 스트림 관리자 구성 요소와 상호 작용하는 데 SDK 사용하는 스트림 관리자를 AWS IoT Greengrass 제공합니다. 자세한 내용은 Greengrass 코어 디바이스에서 데이터 스트림 관리 단원을 참조하십시오.
참고
이 섹션의 예제는 Linux 코어 디바이스에서만 작동합니다.
Docker 컨테이너 구성 요소SDK에서 스트림 관리자를 사용하려면 다음 파라미터로 Docker 컨테이너를 실행해야 합니다.
-
--network=host
인수를 사용하여 호스트 네트워크에 대한 액세스를 제공합니다. 이 옵션을 사용하면 Docker 컨테이너가 로컬 TLS 연결을 통해 스트림 관리자 구성 요소와 상호 작용할 수 있습니다. 이 인수는 Linux용 Docker에서만 작동합니다.주의
이 옵션을 사용하면 컨테이너가 호스트의 모든 로컬 네트워크 인터페이스에 액세스할 수 있으므로 호스트 네트워크에 대한 액세스 권한 없이 Docker 컨테이너를 실행하는 경우보다 안전하지 않습니다. 이 옵션을 사용하는 Docker 컨테이너 구성 요소를 개발하고 실행할 때 이 점을 고려하세요. 자세한 내용은 Docker 설명서에서 네트워크: 호스트
를 참조하세요. -
기본 동작인 인증을 요구하도록 스트림 관리자 구성 요소를 구성하는 경우에는
AWS_CONTAINER_CREDENTIALS_FULL_URI
환경 변수를 Greengrass nucleus가 구성 요소에 제공하는 값으로 설정합니다. 자세한 내용은 스트림 관리자 구성을 참조하세요. -
기본 포트가 아닌 포트를 사용하도록 스트림 관리자 구성 요소를 구성하는 경우 프로세스 간 통신(IPC)을 사용하여 스트림 관리자 구성 요소 구성에서 포트를 가져옵니다. 를 사용하려면 추가 옵션과 함께 Docker 컨테이너를 실행해야 합니다IPC. 자세한 내용은 다음 자료를 참조하세요.
예제 레시피: Docker 컨테이너 구성 요소의 S3 버킷으로 파일 스트리밍(Python)
다음 레시피는 파일을 생성하여 S3 버킷으로 스트리밍하는 예제 Docker 컨테이너 컴포넌트를 정의합니다. 이 레시피의 속성은 다음과 같습니다.
-
종속성으로서의 스트림 관리자 구성 요소. 이러한 종속성을 통해 구성 요소는 스트림 관리자를 사용하여 스트림 관리자 구성 요소와 상호 작용SDK할 수 있습니다.
-
Amazon S3에서 Docker 이미지를 TAR 아카이브로 지정하는 구성 요소 아티팩트입니다.
-
TAR 아카이브에서 Docker 이미지를 로드하는 수명 주기 설치 스크립트입니다.
-
이미지에서 Docker 컨테이너를 실행하는 수명 주기 실행 스크립트입니다. Docker 실행
명령에는 다음 인수가 있습니다. -
--network=host
인수는 컨테이너가 스트림 관리자 구성 요소에 연결할 수 있도록 호스트 네트워크에 대한 컨테이너 액세스를 제공합니다. -
첫 번째
-e
인수는 Docker 컨테이너에서 필요한AWS_CONTAINER_AUTHORIZATION_TOKEN
환경 변수를 설정합니다. -
추가
-e
인수는 이 예제에서 사용하는 환경 변수를 설정합니다. -
-v
인수는 컨테이너에 구성 요소의 작업 폴더를 탑재합니다. 이 예제에서는 작업 폴더에 파일을 생성하고 스트림 관리자를 사용하여 해당 파일을 Amazon S3에 업로드합니다. -
--rm
인수는 컨테이너가 종료될 때 컨테이너를 정리합니다.
-
{
"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://amzn-s3-demo-bucket/artifacts/com.example.python.docker.StreamFileToS3/1.0.0/stream-file-to-s3.tar"
}
]
}
]
}