Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
aws:executeScript
– Jalankan skrip
Menjalankan Python atau PowerShell skrip yang disediakan menggunakan runtime dan handler yang ditentukan. Setiap aws:executeScript
tindakan dapat menjalankan hingga durasi maksimum 600 detik (10 menit). Anda dapat membatasi batas waktu dengan menentukan timeoutSeconds
parameter untuk aws:executeScript
langkah.
Gunakan pernyataan pengembalian dalam fungsi Anda untuk menambahkan output ke payload keluaran Anda. Untuk contoh mendefinisikan output untuk aws:executeScript
tindakan Anda, lihat. Contoh 2: Runbook berskrip Anda juga dapat mengirim output dari aws:executeScript
tindakan di runbook ke grup CloudWatch log Amazon Logs yang Anda tentukan. Untuk informasi selengkapnya, lihat Keluaran tindakan Otomasi Pencatatan dengan CloudWatch Log.
Jika Anda ingin mengirim output dari aws:executeScript
tindakan ke CloudWatch Log, atau jika skrip yang Anda tentukan untuk aws:executeScript
tindakan memanggil operasi AWS API, peran layanan AWS Identity and Access Management (IAM) (atau mengambil peran) selalu diperlukan untuk menjalankan runbook.
aws:executeScript
Tindakan ini berisi modul PowerShell Core prainstal berikut:
-
Microsoft. PowerShell.Tuan rumah
-
Microsoft. PowerShell.Manajemen
-
Microsoft. PowerShell.Keamanan
-
Microsoft. PowerShell.Utilitas
-
PackageManagement
-
PowerShellGet
Untuk menggunakan modul PowerShell Core yang tidak diinstal sebelumnya, skrip Anda harus menginstal modul dengan -Force
bendera, seperti yang ditunjukkan pada perintah berikut. AWSPowerShell.NetCore
Modul tidak didukung. Ganti ModuleName
dengan modul yang ingin Anda instal.
Install-Module
ModuleName
-Force
Untuk menggunakan cmdlet PowerShell Core dalam skrip Anda, sebaiknya gunakan AWS.Tools
modul, seperti yang ditunjukkan pada perintah berikut. Ganti masing-masing example resource placeholder
dengan informasi Anda sendiri.
-
cmdlet Amazon S3.
Install-Module AWS.Tools.S3 -Force Get-S3Bucket -BucketName
amzn-s3-demo-bucket
-
EC2 Cmdlet Amazon.
Install-Module AWS.Tools.EC2 -Force Get-EC2InstanceStatus -InstanceId
instance-id
-
Umum, atau layanan AWS Tools for Windows PowerShell cmdlet independen.
Install-Module AWS.Tools.Common -Force Get-AWSRegion
Jika skrip Anda menginisialisasi objek baru selain menggunakan cmdlet PowerShell Core, Anda juga harus mengimpor modul seperti yang ditunjukkan pada perintah berikut.
Install-Module AWS.Tools.EC2 -Force Import-Module AWS.Tools.EC2 $tag = New-Object Amazon.EC2.Model.Tag $tag.Key = "Tag" $tag.Value = "TagValue" New-EC2Tag -Resource
i-02573cafcfEXAMPLE
-Tag $tag
Untuk contoh menginstal dan mengimpor AWS.Tools
modul, dan menggunakan cmdlet PowerShell Core di runbook, lihat. Pengalaman desain visual untuk runbook Otomasi
Input
Berikan informasi yang diperlukan untuk menjalankan skrip Anda. Ganti masing-masing example resource placeholder
dengan informasi Anda sendiri.
catatan
Lampiran untuk skrip Python dapat berupa file.py atau file.zip yang berisi skrip. PowerShell skrip harus disimpan dalam file.zip.
- Waktu Aktif
-
Bahasa runtime yang akan digunakan untuk menjalankan skrip yang disediakan.
aws:executeScript
mendukung Python 3.7 ()python3.7
, Python 3.8 (), Python 3.9 (python3.8
) Python 3.10 (python3.9
), Pythonpython3.11
3.11 () Coredotnetcore2.1
6.0python3.10
(), 7.0 () skrip, dan 7.4 PowerShell () skrip. PowerShelldotnetcore3.1
PowerShelldotnet8
Nilai yang didukung:
python3.7
python3.8
|python3.9
|python3.10
|python3.11
|PowerShell Core 6.0
|PowerShell 7.0
|PowerShell 7.4
Tipe: String
Diperlukan: Ya
catatan
Untuk runtime python, lingkungan menyediakan memori 512MB dan ruang disk 512MB. Untuk PowerShell runtime, lingkungan menyediakan memori 1024MB dan ruang disk 512MB.
- Handler
-
Nama fungsi Anda. Anda harus memastikan fungsi yang didefinisikan dalam handler memiliki dua parameter,
events
dancontext
. PowerShell Runtime tidak mendukung parameter ini.Tipe: String
Diperlukan: Ya (Python) | Tidak didukung () PowerShell
- InputPayload
-
Objek JSON atau YAML yang akan diteruskan ke parameter handler pertama. Ini dapat digunakan untuk melewatkan data input ke script.
Jenis: String
Wajib: Tidak
- Skrip
-
Skrip tertanam yang ingin Anda jalankan selama otomatisasi.
Tipe: String
Wajib: Tidak (Python) | Ya () PowerShell
- Lampiran
-
Nama file skrip mandiri atau file .zip yang dapat dijalankan oleh tindakan. Tentukan nilai yang sama dengan
Name
file lampiran dokumen yang Anda tentukan dalam parameterAttachments
permintaan. Untuk informasi selengkapnya, lihat Lampiran di Referensi AWS Systems Manager API. Jika Anda menyediakan skrip menggunakan lampiran, Anda juga harus menentukanfiles
bagian di elemen tingkat atas runbook Anda. Untuk informasi selengkapnya, lihat Skema versi 0.3.Guna menjalankan file untuk Python, gunakan
filename.method_name
format dalamHandler
.catatan
Lampiran untuk skrip Python dapat berupa file.py atau file.zip yang berisi skrip. PowerShell skrip harus disimpan dalam file.zip.
Ketika menyertakan pustaka Python di lampiran anda, kami sarankan menambahkan sebuah
__init__.py
file kosong dalam setiap direktori modul. Hal ini mengizinkan Anda untuk mengimpor modul dari pustaka di lampiran dalam konten skrip Anda. Misalnya:from library import module
Jenis: String
Wajib: Tidak
Output
- Muatan
-
Representasi objek JSON dikembalikan oleh fungsi Anda. Hingga 100KB yang dikembalikan. Jika Anda menampilkan daftar, maksimal 100 item dikembalikan.
Menggunakan lampiran dengan AWS: ExecuteScript
Lampiran menyediakan cara ampuh untuk mengemas dan menggunakan kembali skrip kompleks, beberapa modul, dan dependensi eksternal dengan tindakan Anda. aws:executeScript
Gunakan lampiran saat Anda perlu:
-
Package beberapa modul Python atau PowerShell script bersama-sama.
-
Gunakan kembali logika skrip yang sama di beberapa runbook.
-
Sertakan pustaka atau dependensi eksternal dengan skrip Anda.
-
Jaga agar definisi runbook Anda tetap bersih dengan memisahkan logika skrip yang kompleks.
-
Bagikan paket skrip di seluruh tim atau alur kerja otomatisasi.
Struktur lampiran dan kemasan
Anda dapat melampirkan file tunggal atau paket zip yang berisi banyak file. Strukturnya tergantung pada kasus penggunaan Anda:
Lampiran file tunggal
Untuk skrip sederhana, Anda dapat melampirkan satu .py
file (Python) atau file .zip
yang berisi skrip tunggal PowerShell .
Paket multi-modul
Untuk otomatisasi kompleks yang memerlukan banyak modul, buat paket zip dengan struktur yang direkomendasikan berikut:
my-automation-package.zip ├── main.py # Entry point script ├── utils/ │ ├── __init__.py # Required for Python module imports │ ├── helper_functions.py # Utility functions │ └── aws_operations.py # AWS-specific operations ├── config/ │ ├── __init__.py │ └── settings.py # Configuration settings └── requirements.txt # Optional: document dependencies
penting
Untuk paket Python, Anda harus menyertakan __init__.py
file kosong di setiap direktori yang berisi modul Python. Ini memungkinkan Anda untuk mengimpor modul menggunakan sintaks impor Python standar seperti. from utils import helper_functions
PowerShell struktur paket
PowerShell lampiran harus dikemas dalam file zip dengan struktur berikut:
my-powershell-package.zip ├── Main.ps1 # Entry point script ├── Modules/ │ ├── HelperFunctions.ps1 # Utility functions │ └── AWSOperations.ps1 # AWS-specific operations └── Config/ └── Settings.ps1 # Configuration settings
Membuat runbook dengan lampiran
Ikuti langkah-langkah berikut untuk membuat runbook yang menggunakan lampiran:
-
Unggah lampiran Anda ke Amazon S3
Unggah file skrip atau paket zip Anda ke bucket S3 yang dapat diakses oleh peran otomatisasi Anda. Perhatikan URI S3 untuk digunakan pada langkah berikutnya.
aws s3 cp my-automation-package.zip s3://my-automation-bucket/scripts/
-
Hitung checksum lampiran
Hitung checksum SHA-256 dari file lampiran Anda untuk verifikasi keamanan:
# Linux/macOS shasum -a 256 my-automation-package.zip # Windows PowerShell Get-FileHash -Algorithm SHA256 my-automation-package.zip
-
Tentukan bagian file di buku runbook Anda
Tambahkan
files
bagian di tingkat atas runbook Anda untuk mereferensikan lampiran Anda:files: my-automation-package.zip: sourceType: "S3" sourceInfo: path: "s3://my-automation-bucket/scripts/my-automation-package.zip" checksums: sha256: "your-calculated-checksum-here"
-
Referensikan lampiran di langkah ExecuteScript Anda
Gunakan
Attachment
parameter untuk mereferensikan file yang Anda unggah:- name: runMyScript action: aws:executeScript inputs: Runtime: python3.11 Handler: main.process_data Attachment: my-automation-package.zip InputPayload: inputData: "{{InputParameter}}"
AWS: contoh lampiran ExecuteScript
Contoh berikut menunjukkan berbagai cara untuk menggunakan lampiran dengan aws:executeScript
tindakan.
Contoh 1: Lampiran file tunggal
Contoh ini menunjukkan bagaimana menggunakan file Python tunggal sebagai lampiran untuk memproses data EC2 instance.
File lampiran: process_instance.py
Buat file Python dengan konten berikut:
import boto3 import json def process_instance_data(events, context): """Process EC2 instance data and return formatted results.""" try: instance_id = events.get('instanceId') if not instance_id: raise ValueError("instanceId is required") ec2 = boto3.client('ec2') # Get instance details response = ec2.describe_instances(InstanceIds=[instance_id]) instance = response['Reservations'][0]['Instances'][0] # Format the response result = { 'instanceId': instance_id, 'instanceType': instance['InstanceType'], 'state': instance['State']['Name'], 'availabilityZone': instance['Placement']['AvailabilityZone'], 'tags': {tag['Key']: tag['Value'] for tag in instance.get('Tags', [])} } print(f"Successfully processed instance {instance_id}") return result except Exception as e: print(f"Error processing instance: {str(e)}") raise
Runbook lengkap
Berikut adalah runbook lengkap yang menggunakan lampiran file tunggal:
description: Process EC2 instance data using single file attachment schemaVersion: '0.3' assumeRole: '{{AutomationAssumeRole}}' parameters: AutomationAssumeRole: type: String description: (Required) IAM role for automation execution InstanceId: type: String description: (Required) EC2 instance ID to process files: process_instance.py: sourceType: "S3" sourceInfo: path: "s3://my-automation-bucket/scripts/process_instance.py" checksums: sha256: "abc123def456..." mainSteps: - name: processInstance action: aws:executeScript inputs: Runtime: python3.11 Handler: process_instance.process_instance_data Attachment: process_instance.py InputPayload: instanceId: '{{InstanceId}}' outputs: - Type: StringMap Name: InstanceData Selector: $.Payload outputs: - processInstance.InstanceData
Contoh 2: Paket multi-modul
Contoh ini menunjukkan penggunaan paket zip yang berisi beberapa modul Python untuk operasi bucket S3 yang kompleks.
Struktur Package
Buat paket zip dengan struktur berikut:
s3-operations.zip ├── main.py ├── utils/ │ ├── __init__.py │ ├── s3_helper.py │ └── validation.py └── config/ ├── __init__.py └── settings.py
main.py (titik masuk)
Skrip utama yang mengatur operasi:
from utils.s3_helper import S3Operations from utils.validation import validate_bucket_name from config.settings import get_default_settings def cleanup_s3_bucket(events, context): """Clean up S3 bucket based on specified criteria.""" try: bucket_name = events.get('bucketName') max_age_days = events.get('maxAgeDays', 30) # Validate inputs if not validate_bucket_name(bucket_name): raise ValueError(f"Invalid bucket name: {bucket_name}") # Initialize S3 operations s3_ops = S3Operations() settings = get_default_settings() # Perform cleanup deleted_objects = s3_ops.delete_old_objects( bucket_name, max_age_days, settings['dry_run'] ) result = { 'bucketName': bucket_name, 'deletedCount': len(deleted_objects), 'deletedObjects': deleted_objects[:10], # Return first 10 for brevity 'dryRun': settings['dry_run'] } print(f"Cleanup completed for bucket {bucket_name}") return result except Exception as e: print(f"Error during S3 cleanup: {str(e)}") raise
Pemecahan masalah AWS: Lampiran ExecuteScript
Gunakan panduan berikut untuk menyelesaikan masalah umum dengan aws:executeScript
lampiran:
Kesalahan impor modul
Jika Anda menerima kesalahan impor saat menggunakan paket multi-modul:
-
Pastikan Anda telah menyertakan
__init__.py
file kosong di setiap direktori yang berisi modul Python. -
Verifikasi bahwa pernyataan impor Anda cocok dengan struktur file dan direktori yang sebenarnya dalam paket zip Anda.
-
Gunakan impor relatif (misalnya,
from .utils import helper
) atau impor absolut (misalnya,from utils import helper
) secara konsisten.
Lampiran tidak ditemukan kesalahan
Jika otomatisasi Anda gagal menemukan lampiran:
-
Verifikasi bahwa nilai
Attachment
parameter sama persis dengan kunci difiles
bagian Anda. -
Periksa apakah jalur bucket S3 dan nama file Anda sudah benar di
files
bagian tersebut. -
Pastikan peran otomatisasi Anda memiliki
s3:GetObject
izin untuk lokasi lampiran S3. -
Verifikasi bahwa checksum di runbook Anda cocok dengan checksum file yang sebenarnya.
Kesalahan fungsi handler
Jika Anda menerima kesalahan terkait penangan:
-
Untuk Python: Gunakan format
filename.function_name
dalamHandler
parameter (misalnya,main.process_data
). -
Pastikan fungsi handler Anda menerima tepat dua parameter:
events
dan.context
-
Untuk PowerShell: Jangan tentukan
Handler
parameter; skrip berjalan secara langsung.
Kegagalan eksekusi skrip
Jika skrip Anda gagal selama eksekusi:
-
Periksa riwayat eksekusi otomatisasi untuk pesan kesalahan terperinci dan jejak tumpukan.
-
Gunakan
print()
pernyataan (Python) atauWrite-Information
(PowerShell) untuk menambahkan output debugging. -
Verifikasi bahwa semua AWS izin yang diperlukan diberikan ke peran otomatisasi Anda.
-
Uji logika skrip Anda secara lokal sebelum mengemasnya sebagai lampiran.
Kode keluar dan penanganan kesalahan
Untuk menangani kesalahan dengan benar dan mengembalikan kode keluar:
-
Dalam Python: Gunakan
raise Exception("error message")
untuk menunjukkan kegagalan skrip. -
Dalam PowerShell: Gunakan
throw "error message"
atauWrite-Error
untuk menunjukkan kegagalan. -
Kembalikan data terstruktur dari fungsi Anda untuk memberikan success/failure informasi terperinci.
-
Gunakan blok try-catch untuk menangani pengecualian dengan anggun dan memberikan pesan kesalahan yang berarti.