AWS IoT Greengrass Version 1 memasuki fase umur panjang pada 30 Juni 2023. Untuk informasi selengkapnya, lihat kebijakan AWS IoT Greengrass V1 pemeliharaan. Setelah tanggal ini, tidak AWS IoT Greengrass V1 akan merilis pembaruan yang menyediakan fitur, penyempurnaan, perbaikan bug, atau patch keamanan. Perangkat yang berjalan AWS IoT Greengrass V1 tidak akan terganggu dan akan terus beroperasi dan terhubung ke cloud. Kami sangat menyarankan Anda bermigrasi ke AWS IoT Greengrass Version 2, yang menambahkan fitur baru yang signifikan dan dukungan untuk platform tambahan.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konektor deployment aplikasi docker
Konektor deployment aplikasi Docker Greengrass membuatnya lebih mudah untuk menjalankan gambar Docker Anda pada AWS IoT Greengrass core. Konektor menggunakan Docker Compose untuk memulai aplikasi Docker multi-kontainer dari docker-compose.yml
file. Khususnya, konektor menjalankan docker-compose
perintah untuk mengelola kontainer Docker pada perangkat core tunggal. Untuk informasi lebih lanjut, lihat Gambaran umum Docker Compose
Setelah Anda menerapkan grup Greengrass, konektor menarik gambar terbaru dan mulai kontainer Docker. Ini menjalankan docker-compose pull
dan docker-compose
up
perintah. Kemudian, konektor menerbitkan status perintah ke topik MQTT output. Ini juga log informasi status tentang menjalankan kontainer Docker. Ini memungkinkan Anda untuk memantau log aplikasi Anda di Amazon CloudWatch. Untuk informasi selengkapnya, lihat Pemantauan dengan AWS IoT Greengrass log. Konektor juga mulai kontainer Docker setiap kali Greengrass daemon restart. Jumlah kontainer Docker yang dapat berjalan pada core tergantung pada hardware Anda.
Kontainer Docker berjalan dalam luar domain Greengrass pada perangkat core, sehingga mereka tidak dapat mengakses inter-process communication (IPC) core. Namun, Anda dapat mengonfigurasi beberapa saluran komunikasi dengan komponen Greengrass, seperti fungsi Lambda lokal. Untuk informasi lebih lanjut, lihat Berkomunikasi dengan kontainer Docker.
Anda dapat menggunakan konektor untuk skenario seperti hosting web server atau server MySQL pada perangkat core Anda. Layanan lokal dalam aplikasi Docker Anda dapat berkomunikasi satu sama lain, proses lain dalam lingkungan lokal, dan layanan cloud. Sebagai contoh, Anda dapat menjalankan server web pada core yang mengirimkan permintaan dari fungsi Lambda ke layanan web dalam cloud.
Konektor ini berjalan dalam mode isolasi Tanpa kontainer ini, sehingga Anda dapat men-deploy ke grup Greengrass yang berjalan tanpa kontainerisasi Docker.
Konektor ini memiliki versi berikut.
Versi |
ARN |
---|---|
7 |
|
6 |
|
5 |
|
4 |
|
3 |
|
2 |
|
1 |
|
Untuk informasi tentang perubahan versi, lihat Changelog.
Persyaratan
Konektor ini memiliki persyaratan sebagai berikut:
-
AWS IoT Greengrass perangkat lunak Core v1.10 atau yang lebih baru.
catatan
Konektor ini tidak didukung pada OpenWrt distribusi.
-
Python
versi 3.7 atau 3.8 diinstal pada perangkat core dan ditambahkan ke variabel lingkungan PATH. catatan
Untuk menggunakan Python 3.8, jalankan perintah berikut untuk membuat link simbolik dari folder instalasi default Python 3.7 ke binari Python 3.8 yang diinstal.
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7Ini mengonfigurasi perangkat Anda untuk memenuhi persyaratan Python untuk AWS IoT Greengrass.
-
Minimal 36 MB RAM pada core Greengrass untuk konektor untuk memantau menjalankan kontainer Docker. Kebutuhan memori total tergantung pada jumlah kontainer Docker yang berjalan pada core.
-
Mesin Docker
1.9.1 atau yang lebih baru dipasang pada core Greengrass. Versi 19.0.3 adalah versi terkini yang disahkan untuk berfungsi dengan konektor. Executable
docker
harus berada dalam direktori/usr/bin
atau/usr/local/bin
ini.penting
Kami sarankan Anda menginstal toko kredensial untuk mengamankan salinan lokal kredensial Docker Anda. Untuk informasi lebih lanjut, lihat Catatan keamanan.
Untuk informasi tentang menginstal Docker pada distribusi Amazon Linux, lihat Dasar-dasar Docker untuk Amazon ECS dalam Panduan Pengembang Layanan Kontainer Amazon Elastic.
-
Docker Compose
dipasang pada core Greengrass. Executable docker-compose
harus berada dalam direktori/usr/bin
atau/usr/local/bin
ini.Versi Docker Compose berikut diverifikasi untuk bekerja dengan konektor.
Versi konektor
Versi Docker Diverifikasi
7
1.25.4
6
1.25.4
5
1.25.4
4
1.25.4
3
1.25.4
2
1.25.1
1
1.24.1
-
Satu Docker Compose file (sebagai contoh,
docker-compose.yml
), dipertahankan dalam Amazon Simple Storage Service (Amazon S3). Format harus kompatibel dengan versi Docker Compose diinstal pada core. Anda harus menguji file sebelum Anda menggunakannya pada core Anda. Jika Anda mengedit file setelah Anda menerapkan grup Greengrass, Anda harus terapkan ulang grup untuk memperbarui salinan lokal Anda pada core. -
Pengguna Linux dengan izin untuk memanggil daemon Docker lokal dan menulis ke direktori yang menyimpan salinan lokal file Compose Anda. Untuk informasi selengkapnya, lihat Mengatur pengguna Docker pada core.
-
Peran grup Greengrass dikonfigurasi untuk mengizinkan
s3:GetObject
tindakan pada bucket S3 yang berisi file Compose Anda. Izin ini ditampilkan dalam kebijakan IAM contoh berikut.{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToComposeFileS3Bucket", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Effect": "Allow", "Resource": "arn:aws:s3:::
bucket-name
/*" } ] }catatan
Jika bucket S3 adalah versioning diaktifkan, maka peran harus dikonfigurasi untuk mengizinkan
s3:GetObjectVersion
tindakan juga. Untuk informasi selengkapnya, lihat Menggunakan versi di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.Untuk persyaratan peran grup, Anda harus mengonfigurasi peran untuk memberikan izin yang diperlukan dan memastikan peran telah ditambahkan ke grup. Untuk informasi lebih lanjut, lihat Mengelola peran grup Greengrass (konsol) atau Mengelola peran grup Greengrass (CLI).
-
Jika Docker Compose file Anda mereferensikan citra Docker dipertahankan dalam Amazon ECR, peran grup Greengrass dikonfigurasi untuk mengizinkan berikut ini:
-
ecr:GetDownloadUrlForLayer
danecr:BatchGetImage
tindakan pada repositori Amazon ECR yang berisi gambar Docker. -
ecr:GetAuthorizationToken
tindakan pada sumber daya Anda.
Repositori harus sama Akun AWS dan Wilayah AWS sebagai konektor.
penting
Izin dalam peran grup dapat diasumsikan oleh semua fungsi Lambda dan konektor dalam grup Greengrass. Untuk informasi selengkapnya, lihat Catatan keamanan.
Izin-izin ini ditunjukkan pada kebijakan contoh berikut.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGetEcrRepositories", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": [ "arn:aws:ecr:
region
:account-id
:repository/repository-name
" ] }, { "Sid": "AllowGetEcrAuthToken", "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" } ] }Untuk informasi lebih lanjut, lihat Contoh kebijakan repositori Amazon ECR dalam Panduan Pengguna Amazon ECR.
Untuk persyaratan peran grup, Anda harus mengonfigurasi peran untuk memberikan izin yang diperlukan dan memastikan peran telah ditambahkan ke grup. Untuk informasi lebih lanjut, lihat Mengelola peran grup Greengrass (konsol) atau Mengelola peran grup Greengrass (CLI).
-
-
Jika file Docker Compose Anda mereferensikan gambar Docker dari AWS Marketplace
, konektor juga memiliki persyaratan sebagai berikut: -
Anda harus berlangganan AWS Marketplace produk kontainer. Untuk informasi lebih lanjut, lihat Menemukan dan berlangganan produk kontainer dalam AWS Marketplace Panduan Pelanggan.
-
AWS IoT Greengrass harus dikonfigurasi untuk mendukung rahasia lokal, seperti yang dijelaskan dalam Persyaratan Rahasia. Konektor menggunakan fitur ini hanya untuk mengambil rahasia Anda dari AWS Secrets Manager, bukan untuk menyimpannya.
-
Anda harus membuat rahasia dalam Secrets Manager untuk setiap registri AWS Marketplace yang menyimpan citra Docker direferensikan dalam file Compose Anda. Untuk informasi selengkapnya, lihat Mengakses gambar Docker dari repositori pribadi.
-
-
Jika file Docker Compose Anda mereferensikan gambar Docker dari repositori pribadi dalam pendaftar selain Amazon ECR, seperti Docker Hub, konektor juga memiliki persyaratan sebagai berikut:
-
AWS IoT Greengrass harus dikonfigurasi untuk mendukung rahasia lokal, seperti yang dijelaskan dalam Persyaratan Rahasia. Konektor menggunakan fitur ini hanya untuk mengambil rahasia Anda dari AWS Secrets Manager, bukan untuk menyimpannya.
-
Anda harus membuat rahasia dalam Secrets Manager untuk setiap repositori pribadi yang menyimpan gambar Docker direferensikan dalam file Compose Anda. Untuk informasi selengkapnya, lihat Mengakses gambar Docker dari repositori pribadi.
-
-
Docker daemon harus berjalan ketika Anda menerapkan grup Greengrass yang berisi konektor ini.
Mengakses gambar Docker dari repositori pribadi
Jika Anda menggunakan kredensial untuk mengakses gambar Docker Anda, maka Anda harus mengizinkan konektor untuk mengaksesnya. Cara Anda melakukannya tergantung dalam mana gambar Docker berada.
Untuk gambar Docker dipertahankan Amazon ECR, Anda memberikan izin untuk mendapatkan token otorisasi Anda dalam peran grup Greengrass. Untuk informasi selengkapnya, lihat Persyaratan.
Untuk gambar Docker yang dipertahankan dalam repositori atau pendaftar pribadi lainnya, Anda harus membuat rahasia dalam AWS Secrets Manager untuk menyimpan informasi login Anda. Ini termasuk gambar Docker yang Anda langgani dalam AWS Marketplace. Buat satu rahasia untuk setiap repositori. Jika Anda memperbarui rahasia Anda dalam Secrets Manager, perubahan menyebar ke core waktu berikutnya bahwa Anda men-deploy grup.
catatan
Secrets Manager adalah layanan yang dapat Anda gunakan untuk aman menyimpan dan mengelola kredensial, kunci, dan rahasia lainnya dalam AWS Cloud. Untuk informasi lebih lanjut, lihat Apa AWS Secrets Manager? dalam AWS Secrets Manager Panduan Pengguna.
Setiap rahasia harus berisi kunci berikut:
Kunci |
Nilai |
---|---|
|
Nama pengguna yang digunakan untuk mengakses repositori atau registri. |
|
Kata sandi yang digunakan untuk mengakses repositori atau registri. |
|
Titik akhir registri. Ini harus cocok dengan URL registri yang sesuai dalam file Compose. |
catatan
Mengizinkan AWS IoT Greengrass untuk mengakses rahasia secara default, nama rahasia harus dimulai dengan Greengrass-. Jika tidak, peran layanan Greengrass Anda harus memberikan akses. Untuk informasi selengkapnya, lihat Mengizinkan AWS IoT Greengrass untuk mendapatkan nilai rahasia.
- Untuk mendapatkan informasi login untuk gambar Docker dari AWS Marketplace
-
-
Dapatkan kata sandi untuk gambar Docker darid AWS Marketplace dengan menggunakan
aws ecr get-login-password
perintah. Untuk informasi selengkapnya, lihat get-login-password dalam AWS CLI Referensi Perintah.aws ecr get-login-password
-
Mengambil URL registri untuk gambar Docker. Buka situs AWS Marketplace web, dan buka halaman peluncuran produk kontainer. Di bawah Citra Kontainer, pilih Melihat detail gambar kontainer untuk menemukan nama pengguna dan URL registri.
Gunakan nama pengguna, sandi, dan URL registri yang diambil untuk membuat rahasia untuk setiap AWS Marketplace registri yang menyimpan gambar Docker direferensikan dalam file Compose Anda.
-
- Untuk membuat rahasia (konsol)
-
Di AWS Secrets Manager konsol, pilih Jenis rahasia lainnya. Di bawah Tentukan pasangan nilai kunci yang akan dipertahankan untuk rahasia ini, tambahkan baris untuk
username
,password
, danregistryUrl
. Untuk informasi lebih lanjut, lihat Membuat rahasia dasar dalam AWS Secrets Manager Panduan Pengguna. - Untuk membuat rahasia (CLI)
-
Di AWS CLI, gunakan perintah
create-secret
Secrets Manager, seperti yang ditunjukkan dalam contoh berikut. Untuk informasi lebih lanjut, lihat buat-bucket dalam AWS CLI Referensi Perintah.aws secretsmanager create-secret --name greengrass-MySecret --secret-string [{"username":"Mary_Major"},{"password":"abc123xyz456"},{"registryUrl":"https://docker.io"}]
penting
Ini adalah tanggung jawab Anda untuk mengamankan DockerComposeFileDestinationPath
direktori yang menyimpan file Docker Compose dan kredensial untuk gambar Docker Anda dari repositori pribadi. Untuk informasi selengkapnya, lihat Catatan keamanan.
Parameter
Konektor ini menyediakan parameter berikut:
Buat Contoh Konektor (AWS CLI)
Perintah CLI berikut membuat ConnectorDefinition
dengan versi awal yang berisi konektor deployment aplikasi Docker Greengrass.
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyDockerAppplicationDeploymentConnector", "ConnectorArn": "arn:aws:greengrass:
region
::/connectors/DockerApplicationDeployment/versions/5", "Parameters": { "DockerComposeFileS3Bucket": "myS3Bucket", "DockerComposeFileS3Key": "production-docker-compose.yml", "DockerComposeFileS3Version": "123", "DockerComposeFileDestinationPath": "/home/username/myCompose", "DockerUserId": "1000", "AWSSecretsArnList": "[\"arn:aws:secretsmanager:region
:account-id
:secret:greengrass-secret1-hash
\",\"arn:aws:secretsmanager:region
:account-id
:secret:greengrass-secret2-hash
\"]", "DockerContainerStatusLogFrequency": "30", "ForceDeploy": "True", "DockerPullBeforeUp": "True" } } ] }'
catatan
Fungsi Lambda dalam konektor mempunyai siklus hidup yang berumur panjang ini.
Data input
Konektor ini tidak memerlukan atau menerima data input.
Data output
Konektor ini menerbitkan status docker-compose up
perintah sebagai data output.
- Filter topik dalam langganan
-
dockerapplicationdeploymentconnector/message/status
- Contoh keluaran: Sukses
-
{ "status":"success", "GreengrassDockerApplicationDeploymentStatus":"Successfully triggered docker-compose up", "S3Bucket":"myS3Bucket", "ComposeFileName":"production-docker-compose.yml", "ComposeFileVersion":"123" }
- Contoh keluaran: Kegagalan
-
{ "status":"fail", "error_message":"
description of error
", "error":"InvalidParameter" }Jenis kesalahan dapat berupa
InvalidParameter
atauInternalError
.
Mengatur pengguna Docker pada core AWS IoT Greengrass ini
Konektor deployment aplikasi Docker Greengrass berjalan sebagai pengguna yang Anda tentukan untuk DockerUserId
parameter. Jika Anda tidak menentukan nilai, konektor berjalan sebagai ggc_user
, yang merupakan default identitas akses Greengrass.
Untuk mengizinkan konektor berinteraksi dengan Docker daemon, pengguna Docker harus milik grup Linux docker
pada core. Pengguna Docker juga harus memiliki izin menulis ke direktori DockerComposeFileDestinationPath
ini. Di sinilah konektor menyimpan file lokal docker-compose.yml
dan kredensial Docker Anda.
catatan
-
Kami merekomendasikan Anda membuat pengguna Linux daripada menggunakan default
ggc_user
. Jika tidak, fungsi Lambda dalam grup Greengrass dapat mengakses file Compose dan kredensial Docker. -
Kami merekomendasikan bahwa Anda menghindari berjalan sebagai root kecuali benar-benar diperlukan. Jika Anda menentukan pengguna root, Anda harus mengizinkan fungsi Lambda untuk menjalankan sebagai root pada AWS IoT Greengrass core. Untuk informasi selengkapnya, lihat Menjalankan fungsi Lambda sebagai root.
-
Buat pengguna. Anda dapat menjalankan perintah
useradd
dan termasuk opsional pada pilihan-u
untuk menetapkan UID. Sebagai contoh:sudo useradd -u
1234
user-name
-
Tambahkan pengguna ke
docker
grup pada core. Sebagai contoh:sudo usermod -aG docker
user-name
Untuk informasi lebih lanjut, termasuk cara membuat
docker
grup, lihat Mengelola Docker sebagai pengguna non-rootdalam dokumentasi Docker. -
Berikan izin pengguna untuk menulis ke direktori yang ditentukan untuk
DockerComposeFileDestinationPath
parameter. Sebagai contoh:-
Untuk mengatur pengguna sebagai pemilik direktori. Contoh ini menggunakan UID dari langkah 1.
chown
1234
docker-compose-file-destination-path
-
Untuk memberikan izin baca dan tulis kepada pemilik.
chmod 700
docker-compose-file-destination-path
Untuk informasi lebih lanjut, lihat Cara mengelola File dan Folder Izin dalam Linux
dalam dokumentasi Linux Foundation. -
Jika Anda tidak menetapkan UID ketika membuat pengguna, atau jika Anda menggunakan pengguna yang sudah ada, jalankan
id
perintah untuk mencari UID.id -u
user-name
Anda menggunakan UID untuk mengonfigurasi
DockerUserId
parameter untuk konektor.
-
Informasi penggunaan
Ketika Anda menggunakan konektor deployment aplikasi Docker Greengrass, Anda harus mengetahui informasi penggunaan spesifik implementasi berikut.
-
Awalan tetap untuk nama proyek. Konektor prepends
greengrassdockerapplicationdeployment
awalan untuk nama-nama kontainer Docker yang memulai. Konektor menggunakan awalan ini sebagai nama proyek dalam perintahdocker-compose
yang berjalan. -
Perilaku logging. Konektor menulis informasi status dan informasi penyelesaian masalah ke file log. Anda dapat mengonfigurasi AWS IoT Greengrass untuk mengirim CloudWatch log ke Log dan menulis log secara lokal. Untuk informasi selengkapnya, lihat Pencatatan untuk konektor. Ini adalah jalur ke log lokal untuk konektor:
/
greengrass-root
/ggc/var/log/user/region
/aws/DockerApplicationDeployment.logAnda harus memiliki izin root untuk mengakses log lokal.
-
Memperbarui gambar Docker. Docker menyimpan gambar pada perangkat core. Jika Anda memperbarui gambar Docker dan ingin menerapkankan perubahan ke perangkat core, pastikan untuk mengubah tag untuk gambar dalam file Compose. Perubahan membawa efek setelah grup Greengrass diterapkan.
-
Batas waktu 10 menit untuk operasi pembersihan. Ketika Greengrass daemon berhenti selama restart,
docker-compose down
perintah dimulai. Semua kontainer Docker memiliki maksimum 10 menit setelahdocker-compose down
dimulai untuk melakukan operasi pembersihan apa pun. Jika pembersihan tidak selesai dalam 10 menit, Anda harus membersihkan kontainer yang tersisa secara manual. Untuk informasi lebih lanjut, lihat docker rmdalam dokumentasi Docker CLI. -
Menjalankan perintah Docker. Untuk menyelesaikan masalah, Anda dapat menjalankan perintah Docker dalam jendela terminal pada perangkat core. Sebagai contoh, jalankan perintah berikut untuk melihat Docker kontainer yang dimulai oleh konektor:
docker ps --filter name="greengrassdockerapplicationdeployment"
-
ID sumber daya yang dicadangkan. Konektor menggunakan
DOCKER_DEPLOYER_SECRET_RESOURCE_RESERVED_ID_
ID untuk sumber daya Greengrass me buat dalam grup Greengrass. ID sumber daya harus unik dalam grup, jadi jangan tetapkan ID sumber daya yang mungkin bertentangan dengan ID sumber daya cadangan.index
-
Mode offline. Ketika Anda mengatur
DockerOfflineMode
parameter konfigurasi untukTrue
, maka konektor Docker dapat beroperasi dalam mode offline. Hal ini dapat terjadi ketika deployment grup Greengrass restart sementara perangkat core offline, dan konektor tidak dapat membuat koneksi ke Amazon S3 atau Amazon ECR untuk mengambil file Docker Compose.Dengan mode offline diaktifkan, konektor akan mencoba mengunduh file Compose, dan menjalankan
docker login
perintah seperti itu akan untuk restart normal. Jika upaya ini gagal, maka konektor mencari dipertahankan secara lokal file Compose dalam folder yang ditentukan menggunakanDockerComposeFileDestinationPath
parameter. Jika ada file Compose lokal, maka konektor mengikuti urutan normaldocker-compose
perintah dan menarik dari gambar lokal. Jika menulis file atau gambar lokal tidak ada, maka konektor gagal. Perilaku parameterForceDeploy
danStopContainersOnNewDeployment
tetap sama dalam mode offline.
Berkomunikasi dengan kontainer Docker
AWS IoT Greengrass mendukung saluran komunikasi berikut antara komponen Greengrass dan kontainer Docker:
-
Fungsi Greengrass Lambda dapat menggunakan API REST untuk berkomunikasi dengan proses dalam kontainer Docker. Anda dapat mengatur server dalam kontainer Docker yang membuka port. Fungsi Lambda dapat berkomunikasi dengan kontainer dalam port ini.
-
Proses dalam kontainer Docker dapat bertukar pesan MQTT melalui broker pesan Greengrass lokal. Anda dapat mengatur wadah Docker sebagai perangkat klien di grup Greengrass dan kemudian membuat langganan untuk memungkinkan penampung berkomunikasi dengan fungsi Greengrass Lambda, perangkat klien, dan konektor lain dalam grup, atau dengan dan layanan bayangan lokal. AWS IoT Untuk informasi selengkapnya, lihat Mengonfigurasi komunikasi MQTT dengan kontainer Docker.
-
Fungsi Greengrass Lambda dapat memperbarui file bersama untuk menyampaikan informasi ke kontainer Docker. Anda dapat menggunakan file menulis untuk mengikat mount jalur file bersama untuk kontainer Docker.
Mengonfigurasi komunikasi MQTT dengan kontainer Docker
Anda dapat mengonfigurasi wadah Docker sebagai perangkat klien dan menambahkannya ke grup Greengrass. Kemudian, Anda dapat membuat langganan yang mengizinkan komunikasi MQTT antara kontainer Docker dan komponen Greengrass atau AWS IoT. Dalam prosedur berikut, Anda membuat langganan yang mengizinkan perangkat kontainer Docker untuk menerima bayangan pembaruan pesan dari layanan bayangan lokal. Anda dapat mengikuti pola ini untuk membuat langganan lainnya.
catatan
Prosedur ini mengasumsikan bahwa Anda telah membuat grup Greengrass dan core Greengrass (v1.10 atau yang lebih baru). Untuk informasi tentang pembuatan grup dan core Greengrass, lihat Memulai dengan AWS IoT Greengrass.
Untuk mengonfigurasi wadah Docker sebagai perangkat klien dan menambahkannya ke grup Greengrass
-
Buat folder pada perangkat inti untuk menyimpan sertifikat dan kunci yang digunakan untuk mengautentikasi perangkat Greengrass.
Jalur file harus dipasang pada kontainer Docker Anda ingin memulai. Potongan berikut menunjukkan cara me-mount jalur file dalam file Compose Anda. Dalam contoh ini,
path-to-device-certs
mewakili folder yang Anda buat di langkah ini.version: '3.3' services: myService: image:
user-name
/repo
:image-tag
volumes: - /path-to-device-certs
/:/path-accessible-in-container
Di panel navigasi AWS IoT konsol, di bawah Kelola, perluas perangkat Greengrass, lalu pilih Grup (V1).
Pilih grup target.
-
Pada halaman konfigurasi grup, pilih Perangkat klien, lalu pilih Associate.
-
Di Mengaitkan perangkat klien dengan modal grup ini, pilih Buat AWS IoT hal baru.
Halaman Create things terbuka di tab baru.
-
Pada halaman Create things, pilih Create single thing, lalu pilih Next.
-
Pada halaman Tentukan properti benda, masukkan nama untuk perangkat, lalu pilih Berikutnya.
-
Pada halaman Konfigurasi sertifikat perangkat, pilih Berikutnya.
-
Pada halaman Lampirkan kebijakan ke sertifikat, lakukan salah satu hal berikut:
-
Pilih kebijakan yang ada yang memberikan izin yang diperlukan perangkat klien, lalu pilih Buat sesuatu.
Modal terbuka di mana Anda dapat mengunduh sertifikat dan kunci yang digunakan perangkat untuk terhubung ke AWS Cloud dan inti.
-
Buat dan lampirkan kebijakan baru yang memberikan izin perangkat klien. Lakukan hal-hal berikut:
-
Pilih Buat kebijakan.
Halaman Buat kebijakan terbuka di tab baru.
-
Pada halaman Buat kebijakan, lakukan hal berikut:
-
Untuk nama Kebijakan, masukkan nama yang menjelaskan kebijakan, seperti
GreengrassV1ClientDevicePolicy
. -
Pada tab Pernyataan kebijakan, di bawah Dokumen kebijakan, pilih JSON.
-
Masukkan dokumen kebijakan berikut. Kebijakan ini memungkinkan perangkat klien untuk menemukan inti Greengrass dan berkomunikasi pada semua topik MQTT. Untuk informasi tentang cara membatasi akses kebijakan ini, lihatAutentikasi dan otorisasi perangkat untuk AWS IoT Greengrass.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Connect", "iot:Receive" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:*" ], "Resource": [ "*" ] } ] }
-
Pilih Buat untuk membuat kebijakan.
-
-
Kembali ke tab browser dengan halaman Lampirkan kebijakan ke sertifikat terbuka. Lakukan hal-hal berikut:
-
Dalam daftar Kebijakan, pilih kebijakan yang Anda buat, seperti GreengrassV1ClientDevicePolicy.
Jika Anda tidak melihat kebijakan, pilih tombol segarkan.
-
Pilih Buat sesuatu.
Modal terbuka di mana Anda dapat mengunduh sertifikat dan kunci yang digunakan perangkat untuk terhubung ke AWS Cloud dan inti.
-
-
-
-
Dalam modal Unduh sertifikat dan kunci, unduh sertifikat perangkat.
penting
Sebelum Anda memilih Selesai, unduh sumber daya keamanan.
Lakukan hal-hal berikut:
-
Untuk sertifikat Perangkat, pilih Unduh untuk mengunduh sertifikat perangkat.
-
Untuk file kunci Publik, pilih Unduh untuk mengunduh kunci publik untuk sertifikat.
-
Untuk file kunci pribadi, pilih Unduh untuk mengunduh file kunci pribadi untuk sertifikat.
-
Review Autentikasi Server dalam AWS IoT Panduan Developer dan memilih root sertifikat CA yang sesuai. Kami merekomendasikan Anda menggunakan Amazon Trust Services (ATS) titik akhir dan ATS root sertifikat CA. Di bawah sertifikat Root CA, pilih Unduh untuk sertifikat CA root.
-
Pilih Selesai.
Catat ID sertifikat yang umum dalam nama file untuk sertifikat dan kunci perangkat. Anda membutuhkannya nanti.
-
-
Salin sertifikat dan kunci ke folder yang Anda buat di langkah 1.
Selanjutnya, buat langganan dalam grup. Untuk contoh ini, Anda buat langganan mengizinkan perangkat kontainer Docker untuk menerima pesan MQTT dari layanan bayangan lokal.
catatan
Ukuran maksimum dokumen bayangan adalah 8 KB. Untuk informasi lebih lanjut, lihat AWS IoT kuota dalam AWS IoT Panduan Developer.
Untuk membuat langganan yang mengizinkan perangkat kontainer Docker menerima pesan MQTT dari layanan bayangan lokal
-
Pada halaman Pilih sumber dan target Anda ini, konfigurasikan sumber dan target, sebagai berikut:
-
Untuk Pilihan sumber, pilih Layanan, dan kemudian pilih Layanan Bayangan Lokal.
-
Untuk Pilih target, pilih Perangkat, kemudian pilih perangkat Anda.
-
Pilih Berikutnya.
-
Pada halaman Filter data Anda dengan topik ini, untuk Filter topik, pilih
$aws/things/
, kemudian pilih Selanjutnya. GantiMyDockerDevice
/shadow/update/acceptedMyDockerDevice
dengan nama perangkat yang Anda buat sebelumnya. -
Pilih Selesai.
-
Sertakan potongan kode berikut dalam gambar Docker yang Anda referensi dalam file Compose. Ini adalah kode perangkat Greengrass. Juga, tambahkan kode dalam kontainer Docker Anda memulai perangkat Greengrass dalam kontainer. Ini dapat berjalan sebagai proses terpisah dalam gambar atau dalam thread terpisah.
import os import sys import time import uuid from AWSIoTPythonSDK.core.greengrass.discovery.providers import DiscoveryInfoProvider from AWSIoTPythonSDK.exception.AWSIoTExceptions import DiscoveryInvalidRequestException from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient # Replace thingName with the name you registered for the Docker device. thingName = "MyDockerDevice" clientId = thingName # Replace host with the IoT endpoint for your &AWS-account;. host = "myPrefix.iot.region.amazonaws.com" # Replace topic with the topic where the Docker container subscribes. topic = "$aws/things/MyDockerDevice/shadow/update/accepted" # Replace these paths based on the download location of the certificates for the Docker container. rootCAPath = "/path-accessible-in-container/AmazonRootCA1.pem" certificatePath = "/path-accessible-in-container/certId-certificate.pem.crt" privateKeyPath = "/path-accessible-in-container/certId-private.pem.key" # Discover Greengrass cores. discoveryInfoProvider = DiscoveryInfoProvider() discoveryInfoProvider.configureEndpoint(host) discoveryInfoProvider.configureCredentials(rootCAPath, certificatePath, privateKeyPath) discoveryInfoProvider.configureTimeout(10) # 10 seconds. GROUP_CA_PATH = "./groupCA/" MQTT_QOS = 1 discovered = False groupCA = None coreInfo = None try: # Get discovery info from AWS IoT. discoveryInfo = discoveryInfoProvider.discover(thingName) caList = discoveryInfo.getAllCas() coreList = discoveryInfo.getAllCores() # Use first discovery result. groupId, ca = caList[0] coreInfo = coreList[0] # Save the group CA to a local file. groupCA = GROUP_CA_PATH + groupId + "_CA_" + str(uuid.uuid4()) + ".crt" if not os.path.exists(GROUP_CA_PATH): os.makedirs(GROUP_CA_PATH) groupCAFile = open(groupCA, "w") groupCAFile.write(ca) groupCAFile.close() discovered = True except DiscoveryInvalidRequestException as e: print("Invalid discovery request detected!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") except BaseException as e: print("Error in discovery!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId) myAWSIoTMQTTClient.configureCredentials(groupCA, privateKeyPath, certificatePath) # Try to connect to the Greengrass core. connected = False for connectivityInfo in coreInfo.connectivityInfoList: currentHost = connectivityInfo.host currentPort = connectivityInfo.port myAWSIoTMQTTClient.configureEndpoint(currentHost, currentPort) try: myAWSIoTMQTTClient.connect() connected = True except BaseException as e: print("Error in connect!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) if connected: break if not connected: print("Cannot connect to core %s. Exiting..." % coreInfo.coreThingArn) sys.exit(-2) # Handle the MQTT message received from GGShadowService. def customCallback(client, userdata, message): print("Received an MQTT message") print(message) # Subscribe to the MQTT topic. myAWSIoTMQTTClient.subscribe(topic, MQTT_QOS, customCallback) # Keep the process alive to listen for messages. while True: time.sleep(1)
Catatan keamanan
Ketika Anda menggunakan konektor deployment aplikasi Docker Greengrass, perhatikan pertimbangan keamanan berikut.
-
Penyimpanan lokal file Docker Compose
Konektor menyimpan salinan file Compose Anda dalam direktori yang ditentukan untuk
DockerComposeFileDestinationPath
parameter.Ini adalah tanggung jawab Anda untuk mengamankan direktori ini. Anda harus menggunakan izin sistem file untuk membatasi akses ke direktori.
-
Penyimpanan lokal kredenal Docker
Jika citra Docker Anda dipertahankan dalam repositori privat, konektor menyimpan kredensial Docker Anda dalam direktori yang ditentukan untuk
DockerComposeFileDestinationPath
Parameter.Ini adalah tanggung jawab Anda untuk mengamankan kredensial ini. Sebagai contoh, Anda harus menggunakan pembantu-kredensial
pada perangkat core ketika Anda menginstal Docker Engine. -
Instal Docker Engine dari sumber tepercaya
Anda bertanggung jawab untuk menginstal Docker Engine dari sumber terpercaya. Konektor ini menggunakan Docker daemon pada perangkat core untuk mengakses aset Docker Anda dan mengelola kontainer Docker.
-
Lingkup izin peran grup Greengrass
Izin yang Anda tambahkan dalam peran grup Greengrass dapat diasumsikan oleh semua fungsi Lambda dan konektor dalam grup Greengrass. Konektor ini memerlukan akses ke file Docker Anda yang dipertahankan dalam bucket S3. Hal ini juga membutuhkan akses ke token otorisasi Amazon ECR Anda jika gambar Docker Anda dipertahankan dalam repositori pribadi dalam Amazon ECR.
Lisensi
Konektor deployment aplikasi Docker Greengrass termasuk perangkat lunak/lisensi pihak ketiga berikut:
-
AWS SDK for Python (Boto3)
/Lisensi 2.0 Apache -
botocore
/Apache License 2.0 -
dateutil
/PSF License -
docutils
/BSD License, Lisensi Publik Umum (GPL) GNU, Lisensi Dasar Perangkat Lunak Python, Domain Publik -
jmespath
/MIT License -
s3transfer
/Apache License 2.0 -
urllib3
/Lisensi MIT
Konektor ini dirilis di bawah Perjanjian Lisensi Perangkat lunak core Greengrass
Changelog
Tabel berikut menjelaskan perubahan dalam setiap versi konektor.
Versi |
Perubahan |
---|---|
7 |
Ditambahkan |
6 |
Ditambahkan |
5 |
Gambar ditarik sebelum menjalankan |
4 |
Menambahkan pull-before-up perilaku untuk memperbarui gambar Docker. |
3 |
Diperbaiki masalah dengan menemukan variabel lingkungan. |
2 |
Ditambahkan |
1 |
Pelepasan awal. |
Sebuah grup Greengrass dapat berisi hanya satu versi konektor pada suatu waktu. Untuk informasi lebih lanjut tentang pembaruan versi konektor, lihat Versi upgrade konektor.