Tindakan bootstrap kustom - AWS ParallelCluster

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

Tindakan bootstrap kustom

Jika Anda menentukan pengaturan OnNodeStartkonfigurasi HeadNodeCustomActions//, AWS ParallelCluster jalankan kode arbitrer segera setelah node dimulai. Jika Anda menentukan pengaturan OnNodeConfiguredkonfigurasi HeadNodeCustomActions//, AWS ParallelCluster jalankan kode setelah konfigurasi node selesai dengan benar.

Dimulai dengan AWS ParallelCluster versi 3.4.0, kode dapat dijalankan setelah pembaruan node kepala, jika Anda menentukan pengaturan OnNodeUpdatedkonfigurasi HeadNodeCustomActions//.

Dalam kebanyakan kasus, kode ini disimpan di Amazon Simple Storage Service (Amazon S3) dan diakses melalui koneksi HTTPS. Kode dijalankan sebagai root dan dapat dalam bahasa skrip apa pun yang didukung oleh OS cluster. Seringkali kode dalam Bash atau Python.

catatan

Dimulai dengan AWS ParallelCluster versi 3.7.0, ImdsSupportpengaturan klaster Imds/default adalah. v2.0

Saat Anda membuat cluster baru untuk meningkatkan ke versi 3.7.0 dan versi yang lebih baru, perbarui skrip tindakan bootstrap kustom Anda agar kompatibel dengan IMDSv2 atau atur Imds/ImdsSupportke v1.0 dalam file konfigurasi cluster Anda.

Awas

Anda bertanggung jawab untuk mengonfigurasi skrip dan argumen kustom seperti yang dijelaskan dalam model tanggung jawab bersama. Verifikasi bahwa skrip dan argumen bootstrap kustom Anda berasal dari sumber yang Anda percayai memiliki akses penuh ke node cluster Anda.

Awas

AWS ParallelClustertidak mendukung penggunaan variabel internal yang disediakan melalui /etc/parallelcluster/cfnconfig file. File ini mungkin akan dihapus sebagai bagian dari rilis future.

OnNodeStarttindakan dipanggil sebelum tindakan bootstrap penerapan node dimulai, seperti mengonfigurasi NAT, Amazon Elastic Block Store (Amazon EBS) atau penjadwal. OnNodeStartTindakan bootstrap mungkin termasuk memodifikasi penyimpanan, menambahkan pengguna tambahan, dan menambahkan paket.

catatan

Jika Anda mengkonfigurasi DirectoryServicedan OnNodeStartskrip HeadNodeCustomActions//untuk cluster Anda, AWS ParallelCluster mengkonfigurasi DirectoryService dan memulai ulangsssd, sebelum menjalankan skrip. OnNodeStart

OnNodeConfiguredtindakan dipanggil setelah proses bootstrap node selesai. OnNodeConfiguredtindakan melayani tindakan terakhir yang terjadi sebelum sebuah instance dianggap sepenuhnya dikonfigurasi dan selesai. Beberapa OnNodeConfigured tindakan termasuk mengubah pengaturan penjadwal, memodifikasi penyimpanan, dan memodifikasi paket. Anda dapat meneruskan argumen ke skrip dengan menentukannya selama konfigurasi.

OnNodeUpdatedtindakan dipanggil setelah pembaruan node kepala selesai dan penjadwal dan penyimpanan bersama diselaraskan dengan perubahan konfigurasi cluster terbaru.

Kapan OnNodeStart atau tindakan OnNodeConfigured kustom berhasil, keberhasilan ditunjukkan dengan kode keluar nol (0). Kode keluar lainnya menunjukkan instance bootstrap gagal.

Ketika tindakan OnNodeUpdated kustom berhasil, keberhasilan ditandai dengan kode keluar nol (0). Kode keluar lainnya menunjukkan pembaruan gagal.

catatan

Jika Anda mengkonfigurasi OnNodeUpdated, Anda harus mengembalikan OnNodeUpdated tindakan secara manual ke keadaan sebelumnya pada kegagalan pembaruan.

Jika tindakan OnNodeUpdated kustom gagal, pembaruan akan kembali ke status sebelumnya. Namun, OnNodeUpdated tindakan ini hanya dijalankan pada waktu pembaruan dan bukan pada waktu rollback stack.

Anda dapat menentukan skrip yang berbeda untuk node kepala dan untuk setiap antrian, di bagian CustomActionskonfigurasi HeadNode/CustomActionsdan SchedulingSlurmQueues/. OnNodeUpdatedhanya dapat dikonfigurasi di HeadNode bagian.

catatan

Sebelum AWS ParallelCluster versi 3.0, tidak mungkin untuk menentukan skrip yang berbeda untuk node head dan compute. Silakan merujuk kePindah dari AWS ParallelCluster 2.x ke 3.x.

Konfigurasi

Pengaturan konfigurasi berikut digunakan untuk mendefinisikan HeadNode/CustomActions/OnNodeStart& OnNodeConfigured& OnNodeUpdateddan Scheduling/CustomActions/OnNodeStart& OnNodeConfiguredtindakan dan argumen.

HeadNode: [...] CustomActions: OnNodeStart: # Script URL. This is run before any of the bootstrap scripts are run Script: s3://bucket-name/on-node-start.sh Args: - arg1 OnNodeConfigured: # Script URL. This is run after all the bootstrap scripts are run Script: s3://bucket-name/on-node-configured.sh Args: - arg1 OnNodeUpdated: # Script URL. This is run after the head node update is completed. Script: s3://bucket-name/on-node-updated.sh Args: - arg1 # Bucket permissions Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false Scheduling: Scheduler: slurm [...] SlurmQueues: - Name: queue1 [...] CustomActions: OnNodeStart: Script: s3://bucket-name/on-node-start.sh Args: - arg1 OnNodeConfigured: Script: s3://bucket-name/on-node-configured.sh Args: - arg1 Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false

Menggunakan Sequence pengaturan (ditambahkan dalam AWS ParallelCluster versi 3.6.0):

HeadNode: [...] CustomActions: OnNodeStart: # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run. Sequence: - Script: s3://bucket-name/on-node-start1.sh Args: - arg1 - Script: s3://bucket-name/on-node-start2.sh Args: - arg1 [...] OnNodeConfigured: # Script URLs. The scripts are run in the same order as listed in the configuration, after all the bootstrap scripts are run. Sequence: - Script: s3://bucket-name/on-node-configured1.sh Args: - arg1 - Script: s3://bucket-name/on-node-configured2.sh Args: - arg1 [...] OnNodeUpdated: # Script URLs. The scripts are run in the same order as listed in the configuration, after the head node update is completed. Sequence: - Script: s3://bucket-name/on-node-updated1.sh Args: - arg1 - Script: s3://bucket-name/on-node-updated2.sh Args: - arg1 [...] # Bucket permissions Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false Scheduling: Scheduler: slurm [...] SlurmQueues: - Name: queue1 [...] CustomActions: OnNodeStart: # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run Sequence: - Script: s3://bucket-name/on-node-start1.sh Args: - arg1 - Script: s3://bucket-name/on-node-start2.sh Args: - arg1 [...] OnNodeConfigured: # Script URLs. The scripts are run in the same order as listed in the configuration, after all the bootstrap scripts are run Sequence: - Script: s3://bucket-name/on-node-configured1.sh Args: - arg1 - Script: s3://bucket-name/on-node-configured2.sh Args: - arg1 [...] Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false

SequencePengaturan ditambahkan dimulai dengan AWS ParallelCluster versi 3.6.0. Saat Anda menentukanSequence, Anda dapat membuat daftar beberapa skrip untuk tindakan kustom. AWS ParallelClusterterus mendukung konfigurasi tindakan khusus dengan satu skrip, tanpa menyertakanSequence.

AWS ParallelClustertidak mendukung termasuk skrip tunggal dan Sequence untuk tindakan kustom yang sama. Misalnya, AWS ParallelCluster gagal jika Anda menentukan konfigurasi berikut.

[...] CustomActions: OnNodeStart: # Script URL. This is run before any of the bootstrap scripts are run Script: s3://bucket-name/on-node-start.sh Args: - arg1 # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run. Sequence: - Script: s3://bucket-name/on-node-start1.sh Args: - arg1 - Script: s3://bucket-name/on-node-start2.sh Args: - arg1 [...]

Argumen

catatan

Dalam AWS ParallelCluster 2.x $1 argumennya adalah yang dicadangkan, untuk menyimpan URL skrip kustom. Jika Anda ingin menggunakan kembali skrip bootstrap khusus yang dibuat untuk AWS ParallelCluster 2.x dengan AWS ParallelCluster 3.x, Anda perlu menyesuaikannya dengan mempertimbangkan pergeseran argumen. Silakan merujuk kePindah dari AWS ParallelCluster 2.x ke 3.x.

Contoh cluster dengan tindakan bootstrap kustom

Langkah-langkah berikut membuat skrip sederhana untuk dieksekusi setelah node dikonfigurasi, yang menginstal R, curl dan wget paket di node cluster.

  1. Membuat skrip.

    #!/bin/bash echo "The script has $# arguments" for arg in "$@" do echo "arg: ${arg}" done yum -y install "${@:1}"
  2. Unggah skrip dengan izin yang benar ke Amazon S3. Jika izin baca publik tidak sesuai untuk Anda, gunakan bagian SlurmQueueskonfigurasi HeadNodeIam//S3Accessdan Scheduling/. Untuk informasi selengkapnya, lihat Bekerja dengan Amazon S3.

    $ aws s3 cp --acl public-read /path/to/myscript.sh s3://<bucket-name>/myscript.sh
    penting

    Jika skrip diedit di Windows, akhiran baris harus diubah dari CRLF ke LF sebelum skrip diunggah ke Amazon S3.

  3. Perbarui AWS ParallelCluster konfigurasi untuk menyertakan OnNodeConfigured tindakan baru.

    CustomActions: OnNodeConfigured: Script: https://<bucket-name>.s3.<region>.amazonaws.com/myscript.sh Args: - "R" - "curl" - "wget"

    Jika bucket tidak memiliki izin baca publik, gunakan s3 sebagai protokol URL.

    CustomActions: OnNodeConfigured: Script: s3://<bucket-name>/myscript.sh Args: - "R" - "curl" - "wget"
  4. Luncurkan cluster.

    $ pcluster create-cluster --cluster-name mycluster \ --region <region> --cluster-configuration config-file.yaml
  5. Verifikasi output.

    • Jika Anda menambahkan tindakan kustom ke HeadNode konfigurasi, masuk ke node kepala dan periksa cfn-init.log file yang terletak di /var/log/cfn-init.log dengan menjalankan perintah berikut:

      $ less /var/log/cfn-init.log 2021-09-03 10:43:54,588 [DEBUG] Command run postinstall output: The script has 3 arguments arg: R arg: curl arg: wget Loaded plugins: dkms-build-requires, priorities, update-motd, upgrade-helper Package R-3.4.1-1.52.amzn1.x86_64 already installed and latest version Package curl-7.61.1-7.91.amzn1.x86_64 already installed and latest version Package wget-1.18-4.29.amzn1.x86_64 already installed and latest version Nothing to do
    • Jika Anda menambahkan tindakan kustom ke SlurmQueues pengaturan, periksa cloud-init.log lokasi di /var/log/cloud-init.log dalam node komputasi. Gunakan CloudWatch untuk melihat log ini.

    Anda dapat melihat kedua log ini di CloudWatch konsol Amazon. Untuk informasi selengkapnya, lihat Integrasi dengan Amazon CloudWatch Logs.

Contoh memperbarui skrip bootstrap kustom untuk IMDSv2

Dalam contoh berikut, kami memperbarui skrip tindakan bootstrap kustom yang digunakan dengan IMDSv1 untuk digunakan dengan IMDSv2. Skrip IMDSv1 mengambil metadata ID AMI instans EC2.

#!/bin/bash AMI_ID=$(curl http://169.254.169.254/latest/meta-data/ami-id) echo $AMI_ID >> /home/ami_id.txt

Berikut ini menunjukkan skrip tindakan bootstrap kustom yang dimodifikasi agar kompatibel dengan IMDSv2.

#!/bin/bash AMI_ID=$(TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id) echo $AMI_ID >> /home/ami_id.txt

Untuk informasi selengkapnya, lihat Mengambil metadata instans di Panduan Pengguna EC2 untuk Instans Linux.

Contoh memperbarui konfigurasi untuk IMDSv1

Berikut ini adalah contoh konfigurasi cluster yang mendukung IMDSv1 saat menggunakan AWS ParallelCluster versi 3.7.0 dan yang lebih lama.

Region: us-east-1 Imds: ImdsSupport: v1.0 Image: Os: alinux2 HeadNode: InstanceType: t2.micro Networking: SubnetId: subnet-abcdef01234567890 Ssh KeyName: key-name CustomActions: OnNodeConfigured: Script: Script-path Scheduling: Scheduler: slurm SlurmQueues: - Name: queue1 CustomActions: OnNodeConfigured: Script: Script-path ComputeResources: - Name: t2micro Instances: - InstanceType: t2.micro MinCount: 11 Networking: SubnetIds: - subnet-abcdef01234567890