View a markdown version of this page

Menerapkan aplikasi kontainer saat AWS IoT Greengrass V2 berjalan sebagai wadah Docker - AWS Prescriptive Guidance

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

Menerapkan aplikasi kontainer saat AWS IoT Greengrass V2 berjalan sebagai wadah Docker

Salih Bakir, Giuseppe Di Bella, dan Gustav Svalander, Amazon Web Services

Ringkasan

AWS IoT Greengrass Version 2, saat diterapkan sebagai wadah Docker, secara native tidak mendukung menjalankan wadah aplikasi Docker. Pola ini menunjukkan kepada Anda cara membuat gambar kontainer khusus berdasarkan versi terbaru AWS IoT Greengrass V2 yang mengaktifkan fungsionalitas Docker-in-Docker (DiND). Dengan DiND, Anda dapat menjalankan aplikasi kontainer dalam lingkungan. AWS IoT Greengrass V2

Anda dapat menerapkan pola ini sebagai solusi yang berdiri sendiri atau mengintegrasikannya dengan platform orkestrasi kontainer seperti Amazon ECS Anywhere. Di salah satu model penerapan, Anda mempertahankan AWS IoT Greengrass V2 fungsionalitas penuh termasuk kemampuan pemrosesan AWS IoT SiteWise Edge, sekaligus mengaktifkan penerapan berbasis container yang dapat diskalakan.

Prasyarat dan batasan

Prasyarat

  • Aktif Akun AWS.

  • Untuk AWS IoT Greengrass Version 2 prasyarat umum, lihat Prasyarat dalam dokumentasi. AWS IoT Greengrass Version 2

  • Docker Engine, diinstal dan dikonfigurasi di Linux, macOS, atau Windows.

  • Docker Compose (jika Anda menggunakan antarmuka baris perintah Docker Compose (CLI) untuk menjalankan image Docker).

  • Sebuah sistem operasi Linux.

  • Hypervisor dengan server host yang mendukung virtualisasi.

  • Persyaratan sistem:

    • 2 GB RAM (minimum)

    • 5 GB ruang disk yang tersedia (minimum)

    • Untuk AWS IoT SiteWise Edge, CPU quad-core x86_64 dengan RAM 16 GB dan ruang disk yang tersedia 50 GB. Untuk informasi selengkapnya tentang pemrosesan AWS IoT SiteWise data, lihat Persyaratan paket pemrosesan data dalam AWS IoT SiteWise dokumentasi.

Versi produk

  • AWS IoT Greengrass Version 2 versi 2.5.3 atau yang lebih baru

  • Docker-in-Docker versi 1.0.0 atau yang lebih baru

  • Docker Compose versi 1.22 atau yang lebih baru

  • Docker Engine versi 20.10.12 atau yang lebih baru

Batasan

Arsitektur

Tumpukan teknologi target

  • Sumber data — Perangkat IoT, sensor, atau peralatan industri yang menghasilkan data untuk diproses

  • AWS IoT Greengrass V2— Berjalan sebagai wadah Docker dengan D-in-D kemampuan, diterapkan pada infrastruktur tepi

  • Aplikasi kontainer - Aplikasi khusus yang berjalan di dalam AWS IoT Greengrass V2 lingkungan sebagai wadah Docker bersarang

  • (Opsional) Amazon ECS Anywhere — Orkestrasi kontainer yang mengelola penerapan kontainer AWS IoT Greengrass V2

  • Lainnya Layanan AWS - AWS IoT Core, AWS IoT SiteWise, dan lainnya Layanan AWS untuk pemrosesan dan manajemen data

Arsitektur target

Diagram berikut menunjukkan contoh arsitektur penerapan target yang menggunakan Amazon ECS Anywhere, yang merupakan alat manajemen kontainer.

Arsitektur penerapan menggunakan Amazon ECS Anywhere.

Diagram menunjukkan alur kerja berikut:

1: Penyimpanan gambar kontainer - Amazon ECR menyimpan gambar AWS IoT Greengrass kontainer dan wadah aplikasi khusus apa pun yang diperlukan untuk pemrosesan tepi.

2 dan 3: Penerapan kontainer — Amazon ECS Anywhere menyebarkan AWS IoT Greengrass image container dari Amazon ECR ke lokasi edge, mengelola siklus hidup kontainer dan proses penerapan.

4: Penerapan komponen — AWS IoT Greengrass Inti yang digunakan secara otomatis menyebarkan komponen yang relevan berdasarkan konfigurasinya. Komponen termasuk AWS IoT SiteWise Edge dan komponen pemrosesan tepi lain yang diperlukan dalam lingkungan kontainer.

5: Penyerapan data — Setelah sepenuhnya dikonfigurasi, AWS IoT Greengrass mulailah menelan telemetri dan data sensor dari berbagai sumber data IoT di lokasi tepi.

6: Pemrosesan data dan integrasi cloud — AWS IoT Greengrass Inti kontainer memproses data secara lokal menggunakan komponen yang digunakan (termasuk AWS IoT SiteWise Edge untuk data industri). Kemudian, ia mengirimkan data yang diproses ke AWS Cloud layanan untuk analisis dan penyimpanan lebih lanjut.

Alat

Layanan AWS

  • Amazon ECS Anywhere membantu Anda menerapkan, menggunakan, dan mengelola tugas dan layanan Amazon ECS di infrastruktur Anda sendiri.

  • Amazon Elastic Compute Cloud (Amazon EC2) menyediakan kapasitas komputasi yang dapat diskalakan di. AWS Cloud Anda dapat meluncurkan server virtual sebanyak yang Anda butuhkan dan dengan cepat meningkatkannya ke atas atau ke bawah.

  • Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.

  • AWS IoT Greengrass adalah waktu aktif edge Internet untuk Segala (IoT) sumber terbuka dan layanan cloud yang membantu Anda membangun, men-deploy, dan mengelola aplikasi IoT pada perangkat Anda.

  • AWS IoT SiteWisemembantu Anda mengumpulkan, memodelkan, menganalisis, dan memvisualisasikan data dari peralatan industri dalam skala besar.

Alat lainnya

  • Docker adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah.

  • Docker Compose adalah alat untuk mendefinisikan dan menjalankan aplikasi multi-container.

  • Docker Engine adalah teknologi kontainerisasi open source untuk membangun dan mengkontainerisasi aplikasi.

Repositori kode

Kode untuk pola ini tersedia di Docker-in-Docker repositori GitHub AWS IoT Greengrass v2.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Kloning dan arahkan ke repositori.

Untuk mengkloning repositori, gunakan perintah berikut:

git clone https://github.com/aws-samples/aws-iot-greengrass-v2-docker-in-docker.git

Untuk menavigasi ke docker direktori, gunakan perintah berikut:

cd aws-iot-greengrass-v2-docker-in-docker/docker

DevOps insinyur, AWS DevOps

membuat gambar Docker.

Untuk membuat image Docker dengan versi default (terbaru), jalankan perintah berikut:

docker build -t x86_64/aws-iot-greengrass:latest .

Atau, untuk membangun image Docker dengan versi tertentu, jalankan perintah berikut:

docker build --build-arg GREENGRASS_RELEASE_VERSION=2.12.0 -t x86_64/aws-iot-greengrass:2.12.0 .

Untuk memverifikasi build, jalankan perintah berikut:

docker images | grep aws-iot-greengrass

 

AWS DevOps, DevOps insinyur, Pengembang aplikasi

(Opsional) Dorong ke Amazon ECR.

  1. Untuk membuat repositori, jalankan perintah berikut:

    aws ecr create-repository --repository-name aws-iot-greengrass-dind --region us-east-1

  2. Untuk mengautentikasi, jalankan perintah berikut:

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <ACCOUNT-ID>.dkr.ecr.us-east-1.amazonaws.com

  3. Untuk menandai dan mendorong, jalankan perintah berikut:

    docker tag x86_64/aws-iot-greengrass:latest <ACCOUNT-ID>.dkr.ecr.us-east-1.amazonaws.com/aws-iot-greengrass-dind:latest

    docker push <ACCOUNT_ID>.dkr.ecr.us-east-1.amazonaws.com/aws-iot-greengrass-dind:latest

Pengembang aplikasi, AWS DevOps, DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Pilih metode otentikasi.

Pilih salah satu opsi berikut:

  • Opsi 1 (Disarankan): Peran IAM - Gunakan jika berjalan di Amazon EC2, Amazon ECS, atau Amazon EKS dengan peran IAM yang tepat. Tidak diperlukan konfigurasi tambahan.

  • Opsi 2: Variabel lingkungan - Untuk pengujian dan pengembangan.

  • Opsi 3: File kredensial - Tidak direkomendasikan untuk produksi.

  • Opsi 4: env.cfg File lama.

Administrator AWS

Konfigurasikan metode otentikasi.

Untuk metode otentikasi yang Anda pilih, gunakan panduan konfigurasi berikut:

  • Opsi 2 (Variabel lingkungan) - MempersiapkanAWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY, dan secara opsionalAWS_SESSION_TOKEN.

  • Opsi 3 (File kredensial) - Buat direktori dan file kredensil:

    • (a) Jalankan perintah berikut:

      mkdir -p ~/greengrass-v2-credentials

    • (b) Buat file berikut di~/greengrass-v2-credentials/credentials:

      [default]

      aws_access_key_id=YourAccessKey

      aws_secret_access_key=YourSecretKey

    • (c) Amankan file sebagai berikut:

      chmod 600 ~/greengrass-v2-credentials/credentials

  • Opsi 4 (env.cfg) - Buat env.cfg file di docker direktori sebagai berikut:

    GGC_ROOT_PATH=/greengrass/v2

    AWS_REGION=us-east-1

    PROVISION=true

    THING_NAME=MyGreengrassCore

    THING_GROUP_NAME=MyGreengrassCoreGroup

    TES_ROLE_NAME=GreengrassV2TokenExchangeRole

    TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias

    COMPONENT_DEFAULT_USER=ggc_user:ggc_group

Administrator AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Konfigurasi docker-compose.yml.

Perbarui docker-compose.yml file dengan variabel lingkungan sebagai berikut:

  • Variabel kunci: PROVISION,AWS_REGION,THING_NAME,THING_GROUP_NAME,TES_ROLE_NAME, TES_ROLE_ALIAS_NAME

  • Untuk kredensi melalui variabel lingkungan, hapus komentar berikut ini:

    environment:

    - AWS_ACCESS_KEY_ID=YourKey

    - AWS_SECRET_ACCESS_KEY=YourSecret

  • Untuk file kredensial, hapus komentar berikut ini:

    volumes:

    - ~/greengrass-v2-credentials:/root/.aws/:ro

  • Untuk persistensi log, tambahkan yang berikut ini:

    volumes:

    - ./logs:/greengrass/v2/logs

DevOps insinyur

Mulai dan verifikasi wadah.

Untuk memulai di latar depan, jalankan perintah berikut:

docker-compose up --build

Atau, untuk memulai di latar belakang, jalankan perintah berikut:

docker-compose up --build -d

Untuk memverifikasi status, jalankan perintah berikut:

docker-compose ps

Untuk memantau log, jalankan perintah berikut:

docker-compose logs -f

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Jalankan kontainer dengan Docker CLI.

  • Untuk memulai proses dasar tanpa penyediaan, jalankan perintah berikut:

    docker run --init --privileged -it --name aws-iot-greengrass x86_64/aws-iot-greengrass:latest

  • Untuk memulai menjalankan dengan variabel lingkungan, jalankan perintah berikut:

    docker run --init --privileged -it --name aws-iot-greengrass -e PROVISION=true -e AWS_REGION=us-east-1 -e AWS_ACCESS_KEY_ID=YourKey -e AWS_SECRET_ACCESS_KEY=YourSecret -e THING_NAME=MyGreengrassCore -e THING_GROUP_NAME=MyGreengrassCoreGroup -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • Untuk memulai proses dengan file kredensial, jalankan perintah berikut:

    docker run --init --privileged -it --name aws-iot-greengrass -v ~/greengrass-v2-credentials:/root/.aws:ro -e PROVISION=true -e AWS_REGION=us-east-1 -e THING_NAME=MyGreengrassCore -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • Untuk memulai run dengan env.cfg file, jalankan perintah berikut:

    docker run --init --privileged -it --name aws-iot-greengrass -v ~/greengrass-v2-credentials:/root/.aws:ro --env-file env.cfg -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • Untuk memulai proses dengan log persisten, jalankan perintah berikut:

    docker run --init --privileged -it --name aws-iot-greengrass -v \$(pwd)/logs:/greengrass/v2/logs x86_64/aws-iot-greengrass:latest

DevOps insinyur

Verifikasi wadah.

  • Untuk memeriksa status kontainer, jalankan perintah berikut:

    docker ps | grep aws-iot-greengrass

  • Untuk memantau log, jalankan perintah berikut:

    docker logs -f aws-iot-greengrass

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Menyebarkan aplikasi.

  • Untuk menyebarkan wadah aplikasi, jalankan perintah berikut:

    docker run -d --name my-app nginx:alpine

  • Untuk memverifikasi penerapan, jalankan perintah berikut:

    docker ps

  • Untuk mengakses log, jalankan perintah berikut:

    cd /greengrass/v2/logs && cat greengrass.log

Pengembang aplikasi

Akses dan uji Docker-in-Docker.

  1. Untuk membuka shell dalam wadah, jalankan perintah berikut:

    docker exec -it aws-iot-greengrass sh

  2. Untuk memverifikasi Docker, jalankan perintah berikut:

    docker --version

    docker ps

  3. Untuk menguji Docker-in-Docker, jalankan perintah berikut:

    docker run --rm hello-world

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan cluster Amazon ECS.

  • Untuk membuat cluster Amazon ECS, jalankan perintah berikut:

    aws ecs create-cluster --cluster-name greengrass-cluster --region us-east-1

  • Untuk membuat aktivasi SSM, jalankan perintah berikut:

    aws ssm create-activation --default-instance-name greengrass-edge --iam-role GreengrassECSAnywhereRole --registration-limit 10 --region us-east-1

  • Untuk menginstal Agen SSM pada perangkat edge, jalankan perintah berikut:

    curl -o install.sh https://s3.amazonaws.com/aws-ssm-downloads/latest/linux_amd64/install.sh

    chmod +x install.sh

    ./install.sh activation-code activation-id us-east-1

Administrator AWS

Menerapkan tugas Amazon ECS.

  • Buat greengrass-task-definition.json dengan konfigurasi tugas termasuk containerDefinitions denganprivileged:true, variabel lingkungan, dan volume mount untuk /var/lib/docker dan /greengrass/v2.Register tugas. Jalankan perintah berikut:

    aws ecs register-task-definition --cli-input-json file://greengrass-task-definition.json

  • Untuk membuat layanan, jalankan perintah berikut:

    aws ecs create-service --cluster greengrass-cluster --service-name greengrass-service --task-definition greengrass-dind --desired-count 1 --launch-type EXTERNAL --region us-east-1

  • Untuk memverifikasi penerapan, jalankan perintah berikut:

    aws ecs describe-services --cluster greengrass-cluster --services greengrass-service --region us-east-1

Administrator AWS
TugasDeskripsiKeterampilan yang dibutuhkan

Hentikan wadah.

  • Untuk menghentikan container menggunakan Docker Compose, jalankan perintah berikut:

    docker-compose stop

    docker-compose down

    docker-compose down -v

  • Untuk menghentikan penampung (menghapus volume) dengan menggunakan Docker CLI, jalankan perintah berikut:

    docker stop aws-iot-greengrass

    docker rm aws-iot-greengrass

  • Untuk menghentikan wadah dengan menggunakan force remove, jalankan perintah berikut:

    docker rm -f aws-iot-greengrass

DevOps insinyur

Pemecahan masalah

IsuSolusi

Penampung gagal memulai dengan kesalahan izin.

  1. Untuk memastikan bahwa container berjalan dengan --privileged flag yang diperlukan Docker-in-Docker, jalankan perintah berikut:

    docker run --init --privileged -it --name aws-iot-greengrass x86_64/aws-iot-greengrass:latest

  2. Dalam docker-compose.yml file, atur yang berikut ini:

    privileged: true

Awas

--privilegedmemberikan hak istimewa yang diperluas ke wadah.

Penyediaan gagal dengan kesalahan kredensi.

Untuk memverifikasi kredenal dikonfigurasi dengan benar, gunakan langkah-langkah berikut:

  1. Periksa peran IAM:

    aws sts get-caller-identity

  2. Verifikasi variabel lingkungan:

    docker exec -it aws-iot-greengrass sh -c 'echo \$AWS_ACCESS_KEY_ID'

  3. Periksa file kredensional:

    docker exec -it aws-iot-greengrass sh -c 'cat /root/.aws/credentials'

Pastikan bahwa izin IAM mencakupiot:CreateThing,,, iot:CreatePolicy iot:AttachPolicyiam:CreateRole, dan. iam:AttachRolePolicy

Tidak dapat terhubung ke daemon Docker di dalam wadah.

  1. Periksa status daemon Docker:

    docker exec -it aws-iot-greengrass sh -c 'ps aux | grep dockerd'

  2. Verifikasi bahwa soket Docker ada:

    docker exec -it aws-iot-greengrass sh -c 'ls -la /var/run/docker.sock'

  3. Mulai secara manual jika diperlukan:

    docker exec -it aws-iot-greengrass sh -c 'dockerd > /var/log/docker.log 2>&1 &'

Kontainer kehabisan ruang disk.

  1. Periksa ruang disk:

    df -h

  2. Bersihkan sumber daya Docker:

    docker system prune -a --volumes

  3. Hapus artefak Greengrass lama:

    docker exec -it aws-iot-greengrass sh -c 'rm -rf /greengrass/v2/work/*'

Pastikan ruang disk minimum: 5 GB untuk operasi dasar dan 50 GB untuk AWS IoT SiteWise Edge

Membangun masalah.

  1. Pastikan Anda berada di docker direktori:

    cd docker && pwd

  2. Verifikasi yang Dockerfile ada:

    ls -la Dockerfile

  3. Periksa apakah Docker diinstal dan dijalankan:

    docker --version && docker ps

Masalah konektivitas jaringan.

  1. Uji resolusi DNS:

    docker exec -it aws-iot-greengrass sh -c 'nslookup google.com'

  2. Uji AWS konektivitas:

    docker exec -it aws-iot-greengrass sh -c 'curl https://iot.us-east-1.amazonaws.com'

Verifikasi bahwa firewall memungkinkan lalu lintas HTTPS (443) dan MQTT (8883) keluar.

Komponen Greengrass gagal diterapkan.

  1. Periksa log Greengrass:

    docker exec -it aws-iot-greengrass sh -c 'cat /greengrass/v2/logs/greengrass.log'

  2. Verifikasi konfigurasi peran TES:

    aws iot describe-role-alias --role-alias TES_ROLE_ALIAS_NAME

Periksa log khusus komponen di direktori. /greengrass/v2/logs/

Kontainer keluar segera setelah memulai.

  1. Periksa log kontainer untuk kesalahan:

    docker logs aws-iot-greengrass

  2. Jalankan dengan shell interaktif untuk debugging:

    docker run --init --privileged -it --entrypoint sh x86_64/aws-iot-greengrass:latest

Verifikasi semua variabel lingkungan yang diperlukan diatur dengan benar jikaPROVISION=true. Pastikan --init bendera digunakan saat memulai wadah.

Sumber daya terkait

AWS sumber daya

Sumber daya lainnya

Informasi tambahan

  • Untuk pemrosesan data AWS IoT SiteWise Edge, Docker harus tersedia di AWS IoT Greengrass lingkungan.

  • Untuk menjalankan kontainer bersarang, Anda harus menjalankan AWS IoT Greengrass kontainer dengan kredensi tingkat administrator.