Jalankan kontainer Docker - AWS IoT Greengrass

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Jalankan kontainer Docker

Anda dapat mengonfigurasi AWS IoT Greengrass komponen untuk menjalankan wadah Docker dari gambar yang disimpan di lokasi berikut:

  • Repositori gambar publik dan pribadi di Amazon Elastic Container Registry (Amazon) ECR

  • Repositori Hub Docker publik

  • Registri Terpercaya Docker publik

  • Bucket S3

Dalam komponen kustom Anda, sertakan image Docker URI sebagai artefak untuk mengambil gambar dan menjalankannya di perangkat inti. Untuk gambar Amazon ECR dan Docker Hub, Anda dapat menggunakan komponen pengelola aplikasi Docker untuk mengunduh gambar dan mengelola kredensional untuk repositori Amazon pribadi. ECR

Persyaratan

Untuk menjalankan kontainer Docker dalam komponen, Anda memerlukan hal berikut:

  • Sebuah perangkat inti Greengrass. Jika Anda tidak memilikinya, lihat Tutorial: Memulai dengan AWS IoT Greengrass V2.

  • Docker Engine 1.9.1 atau yang lebih baru diinstal pada perangkat inti Greengrass. Versi 20.10 adalah versi terbaru yang diverifikasi untuk bekerja dengan perangkat lunak AWS IoT Greengrass Core. Anda harus menginstal Docker langsung pada perangkat inti sebelum Anda menyebarkan komponen yang menjalankan kontainer Docker.

    Tip

    Anda juga dapat mengonfigurasi perangkat inti untuk menginstal Docker Engine saat komponen diinstal. Sebagai contoh, script install berikut menginstal Docker Engine sebelum memuat gambar Docker. Skrip install ini bekerja pada distribusi Linux berbasis Debian, seperti Ubuntu. Jika Anda mengonfigurasi komponen untuk menginstal Docker Engine dengan perintah ini, Anda mungkin perlu mengatur RequiresPrivilege ke true dalam skrip siklus hidup untuk menjalankan instalasi dan perintah. docker Untuk informasi selengkapnya, lihat AWS IoT Greengrass referensi resep komponen.

    apt-get install docker-ce docker-ce-cli containerd.io && docker load -i {artifacts:path}/hello-world.tar
  • Pengguna sistem yang menjalankan komponen kontainer Docker harus memiliki izin root atau administrator, atau Anda harus mengonfigurasi Docker untuk menjalankannya sebagai pengguna non-root atau non-admistrator.

    • Pada perangkat Linux, Anda dapat menambahkan pengguna ke docker grup untuk memanggil docker perintah tanpasudo.

    • Pada perangkat Windows, Anda dapat menambahkan pengguna ke docker-users grup untuk memanggil docker perintah tanpa hak istimewa adminstrator.

    Linux or Unix

    Untuk menambahkanggc_user, atau pengguna non-root yang Anda gunakan untuk menjalankan komponen kontainer Docker, ke docker grup, jalankan perintah berikut.

    sudo usermod -aG docker ggc_user

    Untuk informasi selengkapnya, lihat Mengelola Docker sebagai pengguna non-root.

    Windows Command Prompt (CMD)

    Untuk menambahkanggc_user, atau pengguna yang Anda gunakan untuk menjalankan komponen kontainer Docker, ke docker-users grup, jalankan perintah berikut sebagai administrator.

    net localgroup docker-users ggc_user /add
    Windows PowerShell

    Untuk menambahkanggc_user, atau pengguna yang Anda gunakan untuk menjalankan komponen kontainer Docker, ke docker-users grup, jalankan perintah berikut sebagai administrator.

    Add-LocalGroupMember -Group docker-users -Member ggc_user
  • File diakses oleh komponen kontainer Docker yang dipasang sebagai volume dalam kontainer Docker.

  • Jika Anda mengkonfigurasi perangkat lunak AWS IoT Greengrass Core untuk menggunakan proxy jaringan, Anda harus mengkonfigurasi Docker untuk menggunakan server proxy yang sama.

Selain persyaratan ini, Anda juga harus memenuhi persyaratan berikut jika hal itu berlaku pada lingkungan Anda:

Jalankan wadah Docker dari citra publik di Amazon ECR atau Docker Hub

Bagian ini menjelaskan cara membuat komponen kustom yang menggunakan Docker Compose untuk menjalankan container Docker dari image Docker yang disimpan Amazon ECR dan Docker Hub.

Untuk menjalankan kontainer Docker menggunakan Docker Compose
  1. Buat dan unggah file Docker Compose ke bucket Amazon S3. Pastikan bahwa peran perangkat Greengrass memungkinkan izin s3:GetObject untuk mengaktifkan perangkat untuk mengakses file Compose. Contoh file Compose yang ditampilkan dalam contoh berikut mencakup image CloudWatch Agen Amazon dari Amazon ECR dan SQL gambar Saya dari Docker Hub.

    version: "3" services: cloudwatchagent: image: "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest" mysql: image: "mysql:8.0"
  2. Buat komponen khusus di perangkat AWS IoT Greengrass inti Anda. Contoh resep yang ditunjukkan dalam contoh berikut memiliki sifat berikut:

    • Komponen manajer aplikasi Docker sebagai dependensi. Komponen ini memungkinkan AWS IoT Greengrass untuk mengunduh gambar dari repositori Amazon ECR dan Docker Hub publik.

    • Artefak komponen yang menentukan image Docker di repositori Amazon publik. ECR

    • Artefak komponen yang menentukan gambar Docker dalam repositori Docker Hub publik.

    • Komponen artefak yang menentukan file Docker Compose yang mencakup kontainer untuk gambar Docker yang ingin Anda jalankan.

    • Skrip lifecycle run yang menggunakan docker-compose up untuk membuat dan memulai sebuah kontainer dari citra yang ditentukan.

    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://amzn-s3-demo-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://amzn-s3-demo-bucket/folder/docker-compose.yaml"
    catatan

    Untuk menggunakan interprocess communication (IPC), AWS credentials, atau stream manager dalam komponen container Docker Anda, Anda harus menentukan opsi tambahan saat menjalankan container Docker. Untuk informasi selengkapnya, lihat berikut ini:

  3. Uji komponen untuk memverifikasi bahwa ia bekerja seperti yang diharapkan.

    penting

    Anda harus memulai daemon Docker sebelum Anda men-deploy komponen.

    Setelah Anda men-deploy komponen lokal, Anda dapat menjalankan perintah kontainer docker ls untuk memverifikasi bahwa kontainer Anda berjalan.

    docker container ls
  4. Saat komponen sudah siap, unggah komponen untuk digunakan AWS IoT Greengrass ke perangkat inti lainnya. Untuk informasi selengkapnya, lihat Publikasikan komponen untuk diterapkan ke perangkat inti Anda.

Jalankan wadah Docker dari gambar pribadi di Amazon ECR

Bagian ini menjelaskan cara membuat komponen kustom yang menjalankan container Docker dari image Docker yang disimpan di repositori pribadi di Amazon. ECR

Untuk menjalankan kontainer Docker
  1. Buat komponen khusus di perangkat AWS IoT Greengrass inti Anda. Gunakan contoh berikut resep, yang memiliki properti berikut:

    • Komponen manajer aplikasi Docker sebagai dependensi. Komponen ini memungkinkan AWS IoT Greengrass untuk mengelola kredensial untuk mengunduh gambar dari repositori privat.

    • Komponen layanan pertukaran token sebagai dependensi. Komponen ini memungkinkan AWS IoT Greengrass untuk mengambil AWS kredensil untuk berinteraksi dengan Amazon. ECR

    • Artefak komponen yang menentukan image Docker di repositori Amazon pribadi. ECR

    • Skrip lifecycle run yang menggunakan docker run untuk membuat dan memulai sebuah kontainer dari gambar.

    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]"
    catatan

    Untuk menggunakan interprocess communication (IPC), AWS credentials, atau stream manager dalam komponen container Docker Anda, Anda harus menentukan opsi tambahan saat menjalankan container Docker. Untuk informasi selengkapnya, lihat berikut ini:

  2. Uji komponen untuk memverifikasi bahwa ia bekerja seperti yang diharapkan.

    penting

    Anda harus memulai daemon Docker sebelum Anda men-deploy komponen.

    Setelah Anda men-deploy komponen lokal, Anda dapat menjalankan perintah kontainer docker ls untuk memverifikasi bahwa kontainer Anda berjalan.

    docker container ls
  3. Unggah komponen AWS IoT Greengrass untuk digunakan ke perangkat inti lainnya. Untuk informasi selengkapnya, lihat Publikasikan komponen untuk diterapkan ke perangkat inti Anda.

Jalankan kontainer Docker dari gambar di Amazon S3

Bagian ini menjelaskan bagaimana Anda dapat menjalankan kontainer Docker dalam komponen dari gambar Docker yang disimpan di Amazon S3.

Jalankan kontainer Docker dalam komponen dari gambar di Amazon S3
  1. Jalankan perintah docker save untuk membuat cadangan kontainer Docker. Anda menyediakan cadangan ini sebagai artefak komponen untuk menjalankan kontainer pada AWS IoT Greengrass. Ganti hello-world dengan nama gambar, dan ganti hello-world.tar dengan nama file arsip yang akan dibuat.

    docker save hello-world > artifacts/com.example.MyDockerComponent/1.0.0/hello-world.tar
  2. Buat komponen khusus di perangkat AWS IoT Greengrass inti Anda. Gunakan contoh resep berikut, yang memiliki properti berikut:

    • Skrip lifecycle install yang menggunakan docker load untuk memuat gambar Docker dari arsip.

    • Skrip lifecycle run yang menggunakan docker run untuk membuat dan memulai sebuah kontainer dari gambar. Opsi --rm membersihkan kontainer ketika keluar.

    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
    catatan

    Untuk menggunakan interprocess communication (IPC), AWS credentials, atau stream manager dalam komponen container Docker Anda, Anda harus menentukan opsi tambahan saat menjalankan container Docker. Untuk informasi selengkapnya, lihat berikut ini:

  3. Uji komponen untuk memverifikasi bahwa ia bekerja seperti yang diharapkan.

    Setelah Anda men-deploy komponen lokal, Anda dapat menjalankan perintah kontainer docker ls untuk memverifikasi bahwa kontainer Anda berjalan.

    docker container ls
  4. Saat komponen sudah siap, unggah arsip gambar Docker ke bucket S3, dan tambahkan URI ke resep komponen. Kemudian, Anda dapat mengunggah komponen AWS IoT Greengrass untuk menyebarkan ke perangkat inti lainnya. Untuk informasi selengkapnya, lihat Publikasikan komponen untuk diterapkan ke perangkat inti Anda.

    Setelah selesai, resep komponen akan terlihat seperti contoh berikut.

    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://amzn-s3-demo-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://amzn-s3-demo-bucket/artifacts/com.example.MyDockerComponent/1.0.0/hello-world.tar

Gunakan interprocess communication dalam komponen kontainer Docker

Anda dapat menggunakan perpustakaan komunikasi interproses Greengrass IPC () AWS IoT Device SDK untuk berkomunikasi dengan inti Greengrass, komponen Greengrass lainnya, dan. AWS IoT Core Untuk informasi selengkapnya, lihat Gunakan AWS IoT Device SDK untuk berkomunikasi dengan inti Greengrass, komponen lain, dan AWS IoT Core.

Untuk digunakan IPC dalam komponen kontainer Docker, Anda harus menjalankan wadah Docker dengan parameter berikut:

  • Pasang IPC soket di wadah. Inti Greengrass menyediakan jalur file soket IPC dalam variabel lingkungan. AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT

  • Atur variabel SVCUID dan AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT lingkungan ke nilai yang disediakan oleh inti Greengrass ke komponen. Komponen Anda menggunakan variabel lingkungan ini untuk mengautentikasi koneksi ke inti Greengrass.

contoh Contoh resep: Publikasikan MQTT pesan ke AWS IoT Core (Python)

Resep berikut mendefinisikan contoh komponen kontainer Docker yang menerbitkan pesan ke. MQTT AWS IoT Core Resep ini memiliki sifat-sifat berikut:

  • Kebijakan otorisasi (accessControl) yang memungkinkan komponen untuk mempublikasikan MQTT pesan AWS IoT Core pada semua topik. Untuk informasi lebih lanjut, lihat Otorisasi komponen untuk melakukan operasi IPC dan AWS IoT Core MQTTIPCotorisasi.

  • Artefak komponen yang menentukan image Docker sebagai TAR arsip di Amazon S3.

  • Skrip penginstalan siklus hidup yang memuat gambar Docker dari arsip. TAR

  • Skrip proses siklus hidup yang menjalankan wadah Docker dari gambar. Perintah Docker run memiliki argumen berikut:

    • -vArgumen memasang soket IPC Greengrass di wadah.

    • Dua -e argumen pertama mengatur variabel lingkungan yang diperlukan dalam wadah Docker.

    • -eArgumen tambahan mengatur variabel lingkungan yang digunakan oleh contoh ini.

    • --rmArgumen membersihkan wadah saat keluar.

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://amzn-s3-demo-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://amzn-s3-demo-bucket/artifacts/com.example.python.docker.PublishToIoTCore/1.0.0/publish-to-iot-core.tar

Gunakan AWS kredensil dalam komponen wadah Docker (Linux)

Anda dapat menggunakan komponen layanan pertukaran token untuk berinteraksi dengan AWS layanan di komponen Greengrass. Komponen ini menyediakan AWS kredensil dari peran pertukaran token perangkat inti menggunakan server kontainer lokal. Untuk informasi selengkapnya, lihat Berinteraksilah dengan layanan AWS.

catatan

Contoh di bagian ini hanya berfungsi pada perangkat inti Linux.

Untuk menggunakan AWS kredensil dari layanan pertukaran token dalam komponen kontainer Docker, Anda harus menjalankan container Docker dengan parameter berikut:

  • Berikan akses ke jaringan host menggunakan --network=host argumen. Opsi ini memungkinkan kontainer Docker untuk terhubung ke layanan pertukaran token lokal untuk mengambil kredensil AWS . Argumen ini hanya berfungsi pada Docker untuk Linux.

    Awas

    Opsi ini memberikan akses kontainer ke semua antarmuka jaringan lokal pada host, jadi opsi ini kurang aman daripada jika Anda menjalankan kontainer Docker tanpa akses ini ke jaringan host. Pertimbangkan ini saat Anda mengembangkan dan menjalankan komponen kontainer Docker yang menggunakan opsi ini. Untuk informasi selengkapnya, lihat Jaringan: host di Dokumentasi Docker.

  • Atur variabel AWS_CONTAINER_CREDENTIALS_FULL_URI dan AWS_CONTAINER_AUTHORIZATION_TOKEN lingkungan ke nilai yang disediakan oleh inti Greengrass ke komponen. AWS SDKsgunakan variabel lingkungan ini untuk mengambil AWS kredensil.

contoh Contoh resep: Daftar bucket S3 dalam komponen wadah Docker (Python)

Resep berikut mendefinisikan contoh komponen kontainer Docker yang mencantumkan bucket S3 di bucket Anda. Akun AWS Resep ini memiliki sifat-sifat berikut:

  • Komponen layanan pertukaran token sebagai dependensi. Ketergantungan ini memungkinkan komponen untuk mengambil AWS kredensi untuk berinteraksi dengan layanan lain. AWS

  • Artefak komponen yang menentukan image Docker sebagai arsip tar di Amazon S3.

  • Skrip penginstalan siklus hidup yang memuat gambar Docker dari arsip. TAR

  • Skrip proses siklus hidup yang menjalankan wadah Docker dari gambar. Perintah Docker run memiliki argumen berikut:

    • --network=hostArgumen menyediakan akses kontainer ke jaringan host, sehingga wadah dapat terhubung ke layanan pertukaran token.

    • -eArgumen menetapkan variabel lingkungan yang diperlukan dalam wadah Docker.

    • --rmArgumen membersihkan wadah saat keluar.

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://amzn-s3-demo-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://amzn-s3-demo-bucket/artifacts/com.example.python.docker.ListS3Buckets/1.0.0/list-s3-buckets.tar

Gunakan pengelola aliran di komponen wadah Docker (Linux)

Anda dapat menggunakan komponen pengelola aliran untuk mengelola aliran data di komponen Greengrass. Komponen ini memungkinkan Anda untuk memproses aliran data dan mentransfer data IoT volume tinggi ke file. AWS Cloud AWS IoT Greengrass menyediakan pengelola aliran SDK yang Anda gunakan untuk berinteraksi dengan komponen pengelola aliran. Untuk informasi selengkapnya, lihat Kelola aliran data di perangkat inti Greengrass.

catatan

Contoh di bagian ini hanya berfungsi pada perangkat inti Linux.

Untuk menggunakan pengelola aliran SDK dalam komponen kontainer Docker, Anda harus menjalankan wadah Docker dengan parameter berikut:

  • Berikan akses ke jaringan host menggunakan --network=host argumen. Opsi ini memungkinkan wadah Docker untuk berinteraksi dengan komponen pengelola aliran melalui TLS koneksi lokal. Argumen ini hanya berfungsi pada Docker untuk Linux

    Awas

    Opsi ini memberikan akses kontainer ke semua antarmuka jaringan lokal pada host, jadi opsi ini kurang aman daripada jika Anda menjalankan kontainer Docker tanpa akses ini ke jaringan host. Pertimbangkan ini saat Anda mengembangkan dan menjalankan komponen kontainer Docker yang menggunakan opsi ini. Untuk informasi selengkapnya, lihat Jaringan: host di Dokumentasi Docker.

  • Jika Anda mengonfigurasi komponen pengelola aliran agar memerlukan otentikasi, yang merupakan perilaku default, setel variabel AWS_CONTAINER_CREDENTIALS_FULL_URI lingkungan ke nilai yang disediakan inti Greengrass ke komponen. Untuk informasi selengkapnya, lihat konfigurasi manajer aliran.

  • Jika Anda mengonfigurasi komponen pengelola aliran untuk menggunakan port non-default, gunakan interprocess communication (IPC) untuk mendapatkan port dari konfigurasi komponen manajer aliran. Anda harus menjalankan wadah Docker dengan opsi tambahan untuk digunakanIPC. Untuk informasi selengkapnya, lihat berikut ini:

contoh Contoh resep: Streaming file ke bucket S3 dalam komponen wadah Docker (Python)

Resep berikut mendefinisikan contoh komponen kontainer Docker yang membuat file dan mengalirkannya ke bucket S3. Resep ini memiliki sifat-sifat berikut:

  • Komponen stream manager sebagai dependensi. Ketergantungan ini memungkinkan komponen untuk menggunakan manajer aliran SDK untuk berinteraksi dengan komponen manajer aliran.

  • Artefak komponen yang menentukan image Docker sebagai TAR arsip di Amazon S3.

  • Skrip penginstalan siklus hidup yang memuat gambar Docker dari arsip. TAR

  • Skrip proses siklus hidup yang menjalankan wadah Docker dari gambar. Perintah Docker run memiliki argumen berikut:

    • --network=hostArgumen menyediakan akses kontainer ke jaringan host, sehingga kontainer dapat terhubung ke komponen manajer aliran.

    • -eArgumen pertama menetapkan variabel AWS_CONTAINER_AUTHORIZATION_TOKEN lingkungan yang diperlukan dalam wadah Docker.

    • -eArgumen tambahan mengatur variabel lingkungan yang digunakan oleh contoh ini.

    • -vArgumen memasang folder kerja komponen di wadah. Contoh ini membuat file di folder kerja untuk mengunggah file itu ke Amazon S3 menggunakan pengelola aliran.

    • --rmArgumen membersihkan wadah saat keluar.

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://amzn-s3-demo-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://amzn-s3-demo-bucket/artifacts/com.example.python.docker.StreamFileToS3/1.0.0/stream-file-to-s3.tar