Anatomi gambar emas - AWS Bimbingan Preskriptif

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

Anatomi gambar emas

AWS IoT Greengrass Perangkat inti yang diproduksi dalam skala umumnya perangkat Linux tertanam yang memiliki distribusi Linux yang dibangun dengan menggunakan alat seperti Yocto. Biasanya, runtime Greengrass edge dimasukkan ke dalam distribusi, seperti yang ditunjukkan oleh proyek Meta AWS.

Perangkat semacam itu sering memiliki sistem file mereka yang diatur ke dalam beberapa partisi. Panduan ini menggunakan gambar emas sebagai istilah catch-all. Perangkat Anda mungkin memiliki beberapa gambar emas, untuk mem-flash berbagai partisi.

Gambar emas Anda mungkin mencakup keseluruhan sistem file perangkat atau hanya sebagian saja. Panduan ini berfokus pada bagian-bagian sistem file yang perlu Anda pertimbangkan AWS IoT Greengrass, tanpa menentukan cara merakit gambar Anda secara lebih luas.

Pohon direktori Greengrass

Untuk memahami metode gambar emas yang dibahas dalam panduan ini, tinjau struktur pohon direktori Greengrass yang ditunjukkan pada tabel berikut.

Direktori

Deskripsi

alts

Luncurkan parameter dan tautan simbolis ke versi inti Greengrass yang saat ini aktif.

bin

Binari, jika ada yang diinstal (misalnya, biner CLI Greengrass jika komponen itu diinstal). Direktori ini sering kosong.

cli_ipc_info

Scratchpad untuk komunikasi antar proses CLI Greengrass (IPC). Direktori ini kosong jika Anda belum menginstal CLI Greengrass.

config

Semua konfigurasi Greengrass, termasuk konfigurasi komponen.

deployments

Data untuk mengelola status penerapan dan rollback.

logs

Log file untuk nukleus dan komponen lainnya.

packages

Artefak dan resep untuk semua komponen.

plugins

Penyimpanan untuk komponen jenis aws.greengrass.plugin yang Anda instal secara manual. Jika tidak, direktori ini tidak menyimpan data.

telemetry

Scratchpad digunakan oleh Greengrass untuk mengumpulkan data telemetri yang siap dipublikasikan.

work

Scratchpad untuk komponen.

workDirektori logstelemetry,, dan hanya berisi data fana. Mereka tidak perlu disertakan dalam gambar emas, jadi hilangkan jika Anda ingin meminimalkan ukuran gambar.

CLI Greengrass biasanya tidak diinstal pada perangkat produksi, sehingga bin direktori cli_ipc_info dan sering kosong dan biasanya tidak perlu disertakan dalam gambar emas.

pluginsDirektori menyertakan data hanya jika Anda menginstal plugin secara manual (seperti plugin penyediaan armada atau plugin penyediaan khusus) saat Anda menginstal Greengrass.

Data dalam deployments direktori hanya digunakan ketika penerapan sedang berlangsung dan oleh karena itu tidak diperlukan dalam gambar emas.

Akibatnyaalts, config dan packages direktori adalah yang paling menarik. Terkadang ini adalah satu-satunya direktori Greengrass yang perlu Anda sertakan dalam gambar emas, jika Anda ingin meminimalkan ukuran gambar.

Isi direktori paket

Direktori paket memiliki tiga subdirektori, seperti yang ditunjukkan pada tabel berikut.

Subdirektori

Deskripsi

artifacts

Artefak komponen zip yang diunduh Greengrass selama penerapan.

artifacts-unarchived

Untuk artefak yang merupakan .zip arsip, direktori ini berisi artefak yang sama, tetapi mereka dibuka ritsleting sehingga komponen dapat menggunakan konten artefak.

recipes

File resep komponen.

artefak

Berikut contoh daftar pohon packages/artifacts menunjukkan bagaimana artefak disimpan.

user@machine:~$ sudo tree /greengrass/v2/packages/artifacts /greengrass/v2/packages/artifacts ├── aws.greengrass.DockerApplicationManager ├── aws.greengrass.LogManager │ └── 2.3.7 │ └── aws.greengrass.LogManager.jar ├── aws.greengrass.Nucleus │ └── 2.12.6 │ └── aws.greengrass.nucleus.zip ├── aws.greengrass.SecretManager │ └── 2.1.8 │ └── aws.greengrass.SecretManager.jar ├── aws.greengrass.SecureTunneling │ └── 1.0.19 │ └── GreengrassV2SecureTunnelingComponent-1.0-all.jar ├── aws.greengrass.labs.CertificateRotator │ └── 1.1.0 │ └── certificate-rotator.zip ├── aws.greengrass.labs.HomeAssistant │ └── 1.0.0 │ └── home-assistant.zip └── aws.greengrass.telemetry.NucleusEmitter └── 1.0.8 └── aws.greengrass.telemetry.NucleusEmitter.jar 15 directories, 7 files

artefak-tidak diarsipkan

Berikut contoh daftar pohon packages/artifacts-unarchived menunjukkan artefak yang diekstrak dari .zip file.

user@machine:~$ sudo tree /greengrass/v2/packages/artifacts-unarchived /greengrass/v2/packages/artifacts-unarchived ├── aws.greengrass.Nucleus │ └── 2.12.6 │ └── aws.greengrass.nucleus │ ├── LICENSE │ ├── NOTICE │ ├── README.md │ ├── THIRD-PARTY-LICENSES │ ├── bin │ │ ├── greengrass.exe │ │ ├── greengrass.service │ │ ├── greengrass.service.procd.template │ │ ├── greengrass.service.template │ │ ├── greengrass.xml.template │ │ ├── loader │ │ └── loader.cmd │ ├── conf │ │ └── recipe.yaml │ └── lib │ └── Greengrass.jar ├── aws.greengrass.SecureTunneling │ └── 1.0.19 ├── aws.greengrass.labs.CertificateRotator │ └── 1.1.0 │ └── certificate-rotator │ ├── __pycache__ │ │ ├── config.cpython-310.pyc │ │ ├── config.cpython-311.pyc │ │ ├── effective_config.cpython-310.pyc │ │ ├── effective_config.cpython-311.pyc │ │ ├── main.cpython-311.pyc │ │ ├── pki.cpython-310.pyc │ │ ├── pki.cpython-311.pyc │ │ ├── pki_file.cpython-310.pyc │ │ ├── pki_file.cpython-311.pyc │ │ ├── pki_hsm.cpython-310.pyc │ │ ├── pki_hsm.cpython-311.pyc │ │ ├── pubsub.cpython-310.pyc │ │ ├── pubsub.cpython-311.pyc │ │ ├── state.cpython-310.pyc │ │ ├── state.cpython-311.pyc │ │ ├── state_committing_certificate.cpython-310.pyc │ │ ├── state_committing_certificate.cpython-311.pyc │ │ ├── state_creating_certificate.cpython-310.pyc │ │ ├── state_creating_certificate.cpython-311.pyc │ │ ├── state_getting_job.cpython-310.pyc │ │ ├── state_getting_job.cpython-311.pyc │ │ ├── state_idle.cpython-310.pyc │ │ ├── state_idle.cpython-311.pyc │ │ ├── state_machine.cpython-310.pyc │ │ ├── state_machine.cpython-311.pyc │ │ ├── state_updating_job.cpython-310.pyc │ │ ├── state_updating_job.cpython-311.pyc │ │ ├── topic_base.cpython-310.pyc │ │ └── topic_base.cpython-311.pyc │ ├── config.py │ ├── effective_config.py │ ├── main.py │ ├── pki.py │ ├── pki_file.py │ ├── pki_hsm.py │ ├── pubsub.py │ ├── requirements.txt │ ├── scripts │ │ └── run.cmd │ ├── state.py │ ├── state_committing_certificate.py │ ├── state_creating_certificate.py │ ├── state_getting_job.py │ ├── state_idle.py │ ├── state_machine.py │ ├── state_updating_job.py │ └── topic_base.py └── aws.greengrass.labs.HomeAssistant └── 1.0.0 └── home-assistant ├── config │ ├── automations.yaml │ ├── configuration.yaml │ ├── groups.yaml │ ├── scenes.yaml │ └── scripts.yaml ├── docker-compose.yml ├── install.py └── secret.py 17 directories, 67 files

Perhatikan bahwa alts direktori menautkan ke .jar file Nucleus dipackages/artifacts-unarchived. Misalnya:

user@machine:~$ sudo ls -l /greengrass/v2/alts/init total 8 lrwxrwxrwx 1 root root 97 Jun 27 08:12 distro -> /greengrass/v2/packages/artifacts-unarchived/aws.greengrass.Nucleus/2.12.6/aws.greengrass.nucleus -rw-r--r-- 1 root root 16 Jun 27 07:07 launch.params

Karena itu, packages/artifacts-unarchived harus dimasukkan dalam gambar emas Anda.

resep

Berikut contoh daftar pohon packages/recipes menunjukkan bagaimana resep disimpan. Seperti yang ditunjukkan oleh daftar, resep disimpan dengan intisari untuk membantu Greengrass menentukan apakah sudah memiliki file yang benar saat menerima penerapan. Format yang sangat spesifik ini membuat sulit untuk membuat gambar emas. Akibatnya, mengambil snapshot dari perangkat emas adalah metode yang disarankan untuk membuat gambar emas.

user@machine:~$ sudo tree /greengrass/v2/packages/recipes /greengrass/v2/packages/recipes ├── 0ya1warrMfzlq5PUTvOgfHOununru_xCLUFACECM_R0@2.3.7.metadata.json ├── 0ya1warrMfzlq5PUTvOgfHOununru_xCLUFACECM_R0@2.3.7.recipe.yaml ├── 89r1-ak7xPauDt4O7EG03sSXVUO8ysdHTk-YdF0NAAc@2.12.6.metadata.json ├── 89r1-ak7xPauDt4O7EG03sSXVUO8ysdHTk-YdF0NAAc@2.12.6.recipe.yaml ├── VAZ-Grqe5g43yO7UtasQOR5jcQGILgPeRZQhVikLd9o@1.0.0.metadata.json ├── VAZ-Grqe5g43yO7UtasQOR5jcQGILgPeRZQhVikLd9o@1.0.0.recipe.yaml ├── ViMYPYs99-AzSt1gL2L2YD5P7sIN-yEhy23wWJK_JN8@1.0.8.metadata.json ├── ViMYPYs99-AzSt1gL2L2YD5P7sIN-yEhy23wWJK_JN8@1.0.8.recipe.yaml ├── _1hT2A6X0ZYtB_CfI_ZUOEMDV96DfQVkSmZh2bbGYXg@1.0.19.metadata.json ├── _1hT2A6X0ZYtB_CfI_ZUOEMDV96DfQVkSmZh2bbGYXg@1.0.19.recipe.yaml ├── gQWwM7MSL2kOsBADU9bOQJ1QqO8ZI3hqpbKT5Bv4Ijk@1.1.0.metadata.json ├── gQWwM7MSL2kOsBADU9bOQJ1QqO8ZI3hqpbKT5Bv4Ijk@1.1.0.recipe.yaml ├── j_j5Seyy01FOcIh95nBFy4HYf8P1kT-jW_nmV18ldbk@2.1.8.metadata.json └── j_j5Seyy01FOcIh95nBFy4HYf8P1kT-jW_nmV18ldbk@2.1.8.recipe.yaml 0 directories, 14 files

Layanan sistem

Jika Greengrass diinstal sebagai layanan sistem, seperti biasanya untuk perangkat Linux tertanam, gambar emas juga harus menyertakan direktori yang berisi skrip startup. systemd

Gambar Docker

Jika perangkat Anda menggunakan AWS IoT Greengrass komponen yang menampilkan gambar Docker sebagai artefak, artefak ini berada di luar pohon direktori Greengrass. Oleh karena itu, Anda perlu menyertakan registri gambar Docker perangkat emas dalam gambar emas Anda. Registri ini biasanya disimpan di/var/lib/docker.

Atau, Anda dapat menggunakan perintah Docker untuk membuat salinan gambar Docker yang disimpan di perangkat emas Anda, dan kemudian memuat gambar Docker tersebut ke setiap perangkat di lini manufaktur Anda. Secara umum, metode ini lebih lambat dan menjadi kurang skalabel karena jumlah gambar Docker meningkat.

Rahasia

Jika perangkat Anda menggunakan komponen pengelola rahasia untuk menyinkronkan rahasia AWS Secrets Manager, rahasia ini disimpan dalam config/config.tlog file di pohon direktori Greengrass perangkat emas Anda. Misalnya:

{"TS":1718878001465, "TP":["services","aws.greengrass.SecretManager","runtime","secretResponse"], "W":"changed", "V":"{\"secrets\":[ { \"arn\":\"arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ\", \"name\":\"greengrass-home-assistant\", \"versionId\":\"8e481177-9250-4458-9f1f-3690d28e4ae9\", \"encryptedSecretString\":\"AgV4j+We ... A7QjdE1w==\", \"versionStages\":[\"AWSCURRENT\"], \"createdDate\":1660648425915 } ] } "}

Rahasia ini juga disimpan dalam config/effectiveConfig.yaml file yang sesuai:

aws.greengrass.SecretManager: componentType: "PLUGIN" configuration: cloudSecrets: - arn: "arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ" dependencies: - "aws.greengrass.Nucleus:SOFT" lifecycle: {} runtime: secretResponse: "{\"secrets\":[{\"arn\":\"arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ\"\ ,\"name\":\"greengrass-home-assistant\",\"versionId\":\"8e481177-9250-4458-9f1f-3690d28e4ae9\"\ ,\"encryptedSecretString\":\"AgV4Rpc9 ... MYeVALYQ==\"\ ,\"versionStages\":[\"AWSCURRENT\"],\"createdDate\":1660648425915}]}" version: "2.1.8"

Bahkan jika Anda menyertakan config direktori dalam gambar emas Anda, penting untuk diingat bahwa komponen pengelola rahasia Greengrass mengenkripsi rahasia dengan kunci pribadi perangkat emas. Karena setiap perangkat memiliki kunci pribadi yang unik, kunci yang dienkripsi oleh perangkat emas Anda tidak dapat didekripsi oleh perangkat produksi Anda.

Untuk alasan ini, kami menyarankan Anda menghapus rahasia terenkripsi dari gambar emas untuk mencegah perangkat produksi Anda mendekripsi rahasia perangkat emas secara tidak benar. Komponen aplikasi Anda harus berfungsi secara memadai, atau setidaknya gagal dengan baik, ketika rahasia tidak ada di disk, sebelum perangkat memiliki komunikasi pertamanya dengan cloud.

Ketika rahasia adalah persyaratan yang sulit

Jika organisasi Anda mengharuskan perangkat produksi Anda diisi dengan rahasia selama pembuatan, lini produksi Anda memerlukan skrip atau program yang mereplikasi perilaku komponen manajer rahasia, untuk mengisi rahasia di setiap perangkat produksi. Kami tidak merekomendasikan pendekatan ini karena kompleksitasnya dan kemungkinan bahwa rahasia Anda mungkin disimpan sebentar di cleartext di stasiun pemrograman produksi Anda.