Menggunakan pernyataan bersyarat di runbook - AWS Systems Manager

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

Menggunakan pernyataan bersyarat di runbook

Secara default, langkah-langkah yang Anda tentukan di bagian mainSteps runbook yang dijalankan secara berurutan. Setelah satu tindakan selesai, tindakan berikutnya ditentukan dalam mainSteps bagian dimulai. Selain itu, jika tindakan gagal dijalankan, seluruh otomatisasi gagal (secara default). Anda dapat menggunakan aws:branch tindakan otomasi dan opsi runbook yang dijelaskan di bagian ini untuk membuat otomatisasi yang berkinerja Percabangan bersyarat. Buat otomatisasi yang melompat ke langkah yang berbeda setelah mengevaluasi pilihan yang berbeda atau yang secara dinamis menanggapi perubahan ketika langkah selesai. Berikut adalah daftar opsi yang dapat Anda gunakan untuk membuat otomatisasi dinamis:

  • aws:branch: Tindakan ini mengizinkan Anda membuat otomatisasi dinamis yang mengevaluasi pilihan yang berbeda dalam satu langkah dan kemudian melompat ke langkah di runbook yang berbeda berdasarkan hasil evaluasi tersebut.

  • nextStep: Opsi ini menentukan langkah otomatisasi mana yang harus diproses setelah berhasil menyelesaikan langkah.

  • isEnd: Opsi ini menghentikan otomatisasi pada akhir langkah tertentu. Nilai default opsi ini adalah palsu.

  • isCritical: Opsi ini menunjukkan langkah sebagai kepentingan untuk berhasil menyelesaikan otomatisasi. Jika langkah dengan penunjukan ini gagal, maka Otomatisasi melaporkan status akhir otomatisasi sebagai Failed. Nilai default opsi ini adalah true.

  • onFailure: Opsi ini menunjukkan apakah otomatisasi harus berhenti, melanjutkan, atau meneruskan ke langkah kegagalan yang berbeda. Nilai default untuk opsi ini adalah batalkan.

Bagian berikut menjelaskan aws:branch tindakan otomatisi. Untuk informasi lebih lanjut tentang pilihan nextStep, isEnd, isCritical, dan onFailure, lihat Contoh aws:branch runbook.

Bekerja dengan aws:branch tindakan

Tindakan aws:branch tersebut menawarkan opsi percabangan bersyarat yang paling dinamis untuk otomatisasi. Seperti disebutkan sebelumnya, tindakan ini mengizinkan otomatisasi Anda untuk mengevaluasi beberapa kondisi dalam satu langkah dan kemudian melompat ke langkah baru berdasarkan hasil evaluasi tersebut. Tindakan aws:branch berfungsi seperti IF-ELIF-ELSE pernyataan dalam pemrograman.

Berikut adalah contoh YAML dari aws:branch langkah.

- name: ChooseOSforCommands action: aws:branch inputs: Choices: - NextStep: runPowerShellCommand Variable: "{{GetInstance.platform}}" StringEquals: Windows - NextStep: runShellCommand Variable: "{{GetInstance.platform}}" StringEquals: Linux Default: PostProcessing

Bila Anda menentukan aws:branch tindakan untuk sebuah langkah, Anda menentukan Choices bahwa otomatisasi harus mengevaluasi. Otomatisasi dapat mengevaluasi Choices berdasarkan nilai parameter yang Anda tentukan dalam Parameters bagian runbook tersebut. Otomatisasi juga dapat mengevaluasi Choices berdasarkan output dari langkah sebelumnya.

Otomatisasi mengevaluasi setiap pilihan dengan menggunakan ekspresi Boolean. Jika evaluasi menentukan bahwa pilihan pertama adalah true, maka otomatisasi melompat ke langkah yang ditetapkan di pilihan tersebut. Jika evaluasi menentukan bahwa pilihan pertama adalah false, maka otomatisasi mengevaluasi pilihan berikutnya. Jika langkah Anda mencakup tiga atau lebih Choices, maka otomatisasi menilai setiap pilihan dalam urutan yang tepat sehingga otomatisasi menilai pilihan yang true. Selanjutnya, otomatisasi melompat ke langkah yang ditetapkan untuk pilihan true tersebut.

Jika tidak ada pilihan Choices yang true, otomatisasi memeriksa untuk melihat apakah langkah berisi Default nilai. Nilai Default menentukan langkah yang harus dilakukan otomatisasi jika tidak ada pilihan yang true. Jika tidak ada Default nilai yang ditentukan untuk langkah, otomatisasi akan memproses langkah berikutnya dalam runbook.

Berikut adalah aws:branch langkah dalam YAMAL bernama pilih OSfrom Parameter. Langkahnya mencakup dua Choices: (NextStep: runWindowsCommand) dan (NextStep: runLinuxCommand). Otomatisasi mengevaluasi ini Choices untuk menentukan perintah mana yang dijalankan untuk sistem operasi yang sesuai. Variable untuk setiap pilihan menggunakan {{OSName}}, yang merupakan parameter yang ditentukan oleh penulis runbook Parameters di bagian runbook.

mainSteps: - name: chooseOSfromParameter action: aws:branch inputs: Choices: - NextStep: runWindowsCommand Variable: "{{OSName}}" StringEquals: Windows - NextStep: runLinuxCommand Variable: "{{OSName}}" StringEquals: Linux

Berikut adalah aws:branch langkah dalam YAMAL bernama pilih OSfrom Output. Langkahnya mencakup dua Choices: (NextStep: runPowerShellCommand) dan (NextStep: runShellCommand). Otomatisasi mengevaluasi ini Choices untuk menentukan perintah mana yang dijalankan untuk sistem operasi yang sesuai. Variable untuk setiap pilihan menggunakan {{GetInstance.platform}}, yang merupakan output dari langkah sebelumnya di runbook. Contoh ini juga mencakup opsi yang disebut Default. Jika otomatisasi mengevaluasi keduanya Choices, dan tidak ada pilihan true, maka otomatisasi melompat ke langkah yang bernama PostProcessing.

mainSteps: - name: chooseOSfromOutput action: aws:branch inputs: Choices: - NextStep: runPowerShellCommand Variable: "{{GetInstance.platform}}" StringEquals: Windows - NextStep: runShellCommand Variable: "{{GetInstance.platform}}" StringEquals: Linux Default: PostProcessing

Membuat aws:branch langkah dalam runbook

Saat Anda membuat aws:branch langkah dalam runbook, Anda menentukan Choices otomatisasi harus mengevaluasi untuk menentukan langkah mana lagi yang harus dilalui otomatisasi. Seperti disebutkan sebelumnya, Choices dievaluasi dengan menggunakan ekspresi Boolean. Setiap templat menyertakan menentukan opsi berikut:

  • NextStep: Langkah selanjutnya dalam runbook untuk memproses jika pilihan yang ditunjuk adalahtrue.

  • Variabel: Tentukan nama parameter yang didefinisikan di Parameters bagian runbook, variabel yang didefinisikan di Variables bagian, atau tentukan objek keluaran dari langkah sebelumnya.

    Tentukan nilai variabel dengan menggunakan formulir berikut.

    Variable: "{{variable name}}"

    Tentukan nilai parameter dengan menggunakan formulir berikut.

    Variable: "{{parameter name}}"

    Tentukan variabel objek output dengan menggunakan formulir berikut.

    Variable: "{{previousStepName.outputName}}"

    catatan

    Membuat variabel output dijelaskan secara lebih detail pada bagian berikutnya, Tentang membuat variabel output.

  • Operasi: Kriteria yang digunakan untuk mengevaluasi pilihan, seperti StringEquals: Linux. Tindakan aws:branch tersebut mendukung operasi berikut:

    Operasi String
    • StringEquals

    • EqualsIgnoreCase

    • StartsWith

    • EndsWith

    • Berisi

    Operasi numerik
    • NumericEquals

    • NumericGreater

    • NumericLesser

    • NumericGreaterOrEquals

    • NumericLesser

    • NumericLesserOrEquals

    Operasi Boolean
    • BooleanEquals

    penting

    Ketika Anda membuat runbook, sistem memvalidasi setiap operasi di runbook. Jika operasi tidak didukung, sistem akan mengembalikan kesalahan saat Anda mencoba membuat runbook.

  • Default: Tentukan langkah mundur yang harus dilewati otomatisasi jika tidak ada Choices adalah true.

    catatan

    Jika Anda tidak ingin menentukan Default nilai, maka Anda dapat menentukan isEnd pilihan. Jika tidak ada Choices adalah true dan tidak ada Default nilai yang ditentukan, maka otomatisasi berhenti di akhir langkah.

Gunakan template berikut untuk membantu Anda membangun aws:branch langkah dalam runbook Anda. Ganti masing-masing example resource placeholder dengan informasi Anda sendiri.

YAML
mainSteps: - name: step name action: aws:branch inputs: Choices: - NextStep: step to jump to if evaluation for this choice is true Variable: "{{parameter name or output from previous step}}" Operation type: Operation value - NextStep: step to jump to if evaluation for this choice is true Variable: "{{parameter name or output from previous step}}" Operation type: Operation value Default: step to jump to if all choices are false
JSON
{ "mainSteps":[ { "name":"a name for the step", "action":"aws:branch", "inputs":{ "Choices":[ { "NextStep":"step to jump to if evaluation for this choice is true", "Variable":"{{parameter name or output from previous step}}", "Operation type":"Operation value" }, { "NextStep":"step to jump to if evaluation for this choice is true", "Variable":"{{parameter name or output from previous step}}", "Operation type":"Operation value" } ], "Default":"step to jump to if all choices are false" } } ] }

Tentang membuat variabel output

Untuk membuat aws:branch pilihan yang mereferensikan output dari langkah sebelumnya, Anda perlu mengidentifikasi nama langkah sebelumnya dan namabidang output. Anda kemudian menggabungkan nama-nama langkah dan bidang dengan menggunakan format berikut.

Variable: "{{previousStepName.outputName}}"

Sebagai contoh, langkah pertama dalam contoh berikut bernama GetInstance. Dan kemudian, di bawah outputs, terdapat sebuah bidang yang disebut platform. Pada langkah kedua (ChooseOSforCommands), penulis ingin mereferensikan output dari bidang platform sebagai variabel. Untuk membuat variabel, cukup gabungkan nama langkah (GetInstance) dan nama bidang output (platform) untuk membuatVariable: "{{GetInstance.platform}}".

mainSteps: - Name: GetInstance action: aws:executeAwsApi inputs: Service: ssm Api: DescribeInstanceInformation Filters: - Key: InstanceIds Values: ["{{ InstanceId }}"] outputs: - Name: myInstance Selector: "$.InstanceInformationList[0].InstanceId" Type: String - Name: platform Selector: "$.InstanceInformationList[0].PlatformType" Type: String - name: ChooseOSforCommands action: aws:branch inputs: Choices: - NextStep: runPowerShellCommand Variable: "{{GetInstance.platform}}" StringEquals: Windows - NextStep: runShellCommand Variable: "{{GetInstance.platform}}" StringEquals: Linux Default: Sleep

Berikut adalah contoh yang menunjukkan bagaimana "Variable": "{{ describeInstance.Platform }}" dibuat dari langkah sebelumnya dan output.

- name: describeInstance action: aws:executeAwsApi onFailure: Abort inputs: Service: ec2 Api: DescribeInstances InstanceIds: - "{{ InstanceId }}" outputs: - Name: Platform Selector: "$.Reservations[0].Instances[0].Platform" Type: String nextStep: branchOnInstancePlatform - name: branchOnInstancePlatform action: aws:branch inputs: Choices: - NextStep: runEC2RescueForWindows Variable: "{{ describeInstance.Platform }}" StringEquals: windows Default: runEC2RescueForLinux

Contoh aws:branch runbook

Berikut adalah beberapa contoh runbook yang menggunakan aws:branch.

Contoh 1: Menggunakan aws:branch dengan variabel output untuk menjalankan perintah berdasarkan jenis sistem operasi

Pada langkah pertama contoh ini (GetInstance), penulis runbook menggunakan aws:executeAwsApi tindakan untuk memanggil ssm DescribeInstanceInformation Operasi API. Penulis menggunakan tindakan ini untuk menentukan jenis sistem operasi yang digunakan oleh sebuah contoh. Tindakan aws:executeAwsApi tersebut mengeluarkan instans ID dan jenis platform.

Pada langkah kedua (ChooseOSforCommands), penulis menggunakan aws:branch tindakan dengan dua Choices (NextStep: runPowerShellCommand) dan (NextStep: runShellCommand). Otomatisasi mengevaluasi sistem operasi instans dengan menggunakan output dari langkah sebelumnya (Variable: "{{GetInstance.platform}}"). Otomatisasi melompat ke langkah untuk sistem operasi yang ditunjuk.

--- schemaVersion: '0.3' assumeRole: "{{AutomationAssumeRole}}" parameters: AutomationAssumeRole: default: "" type: String mainSteps: - name: GetInstance action: aws:executeAwsApi inputs: Service: ssm Api: DescribeInstanceInformation outputs: - Name: myInstance Selector: "$.InstanceInformationList[0].InstanceId" Type: String - Name: platform Selector: "$.InstanceInformationList[0].PlatformType" Type: String - name: ChooseOSforCommands action: aws:branch inputs: Choices: - NextStep: runPowerShellCommand Variable: "{{GetInstance.platform}}" StringEquals: Windows - NextStep: runShellCommand Variable: "{{GetInstance.platform}}" StringEquals: Linux Default: Sleep - name: runShellCommand action: aws:runCommand inputs: DocumentName: AWS-RunShellScript InstanceIds: - "{{GetInstance.myInstance}}" Parameters: commands: - ls isEnd: true - name: runPowerShellCommand action: aws:runCommand inputs: DocumentName: AWS-RunPowerShellScript InstanceIds: - "{{GetInstance.myInstance}}" Parameters: commands: - ls isEnd: true - name: Sleep action: aws:sleep inputs: Duration: PT3S

Contoh 2: Menggunakan aws:branch dengan variabel parameter untuk menjalankan perintah berdasarkan jenis sistem operasi

Penulis runbook mendefinisikan beberapa pilihan parameter pada awal runbook di parameters bagian. Satu parameter bernama OperatingSystemName. Pada langkah pertama (ChooseOS), penulis menggunakan aws:branch tindakan dengan dua Choices (NextStep: runWindowsCommand) dan (NextStep: runLinuxCommand). Variabel untuk ini Choices mereferensikan opsi parameter yang ditentukan dalam bagian parameter (Variable: "{{OperatingSystemName}}"). Ketika pengguna menjalankan runbook ini, mereka menentukan nilai pada saat waktu aktif untuk OperatingSystemName. Otomatisasi menggunakan parameter waktu aktif selama Choices evaluasi. Otomatisasi melanjutkan ke langkah untuk sistem operasi yang ditunjuk berdasarkan parameter waktu aktif yang ditentukan untuk OperatingSystemName.

--- schemaVersion: '0.3' assumeRole: "{{AutomationAssumeRole}}" parameters: AutomationAssumeRole: default: "" type: String OperatingSystemName: type: String LinuxInstanceId: type: String WindowsInstanceId: type: String mainSteps: - name: ChooseOS action: aws:branch inputs: Choices: - NextStep: runWindowsCommand Variable: "{{OperatingSystemName}}" StringEquals: windows - NextStep: runLinuxCommand Variable: "{{OperatingSystemName}}" StringEquals: linux Default: Sleep - name: runLinuxCommand action: aws:runCommand inputs: DocumentName: "AWS-RunShellScript" InstanceIds: - "{{LinuxInstanceId}}" Parameters: commands: - ls isEnd: true - name: runWindowsCommand action: aws:runCommand inputs: DocumentName: "AWS-RunPowerShellScript" InstanceIds: - "{{WindowsInstanceId}}" Parameters: commands: - date isEnd: true - name: Sleep action: aws:sleep inputs: Duration: PT3S

Membuat otomatisasi percabangan yang kompleks dengan operator

Anda dapat membuat otomatisasi percabangan kompleks dengan menggunakan And, Or, dan Not operator di aws:branch langkah.

Operator 'Dan'

Gunakan And operator ketika Anda ingin beberapa variabel menjadi true untuk sebuah pilihan. Pada contoh berikut, pilihan pertama mengevaluasi apakah instans adalah running dan menggunakanWindows sistem operasi. Jika evaluasi kedua variabel ini benar, maka otomasi melompat ke runPowerShellCommand langkah. Jika satu atau beberapa variabel tersebut false, maka otomatisasi mengevaluasi variabel untuk pilihan kedua.

mainSteps: - name: switch2 action: aws:branch inputs: Choices: - And: - Variable: "{{GetInstance.pingStatus}}" StringEquals: running - Variable: "{{GetInstance.platform}}" StringEquals: Windows NextStep: runPowerShellCommand - And: - Variable: "{{GetInstance.pingStatus}}" StringEquals: running - Variable: "{{GetInstance.platform}}" StringEquals: Linux NextStep: runShellCommand Default: sleep3
Operator 'Atau'

Gunakan Or operator ketika Anda ingin salah satu dari beberapa variabel menjadi benar untuk suatu pilihan. Pada contoh berikut, pilihan pertama mengevaluasi apakah string parameter adalah Windows dan apakah output dari AWS Lambda langkah adalah benar. Jika evaluasi menentukan bahwa salah satu dari dua variabel ini benar, maka otomasi melompat ke RunPowerShellCommand langkah. Jika kedua variabel tersebut salah, maka otomatisasi mengevaluasi variabel untuk pilihan kedua.

- Or: - Variable: "{{parameter1}}" StringEquals: Windows - Variable: "{{BooleanParam1}}" BooleanEquals: true NextStep: RunPowershellCommand - Or: - Variable: "{{parameter2}}" StringEquals: Linux - Variable: "{{BooleanParam2}}" BooleanEquals: true NextStep: RunShellScript
Operator 'Tidak'

Gunakan Not operator ketika Anda ingin melompat ke langkah yang didefinisikan ketika variabel tidak benar. Pada contoh berikut, pilihan pertama mengevaluasi apakah string parameter adalah Not Linux. Jika evaluasi menentukan bahwa itu adalah Linux, maka otomasi melompat ke sleep2 langkah. Jika evaluasi pilihan pertama menentukan bahwa itu adalah Linux, maka otomatisasi mengevaluasi pilihan berikutnya.

mainSteps: - name: switch action: aws:branch inputs: Choices: - NextStep: sleep2 Not: Variable: "{{testParam}}" StringEquals: Linux - NextStep: sleep1 Variable: "{{testParam}}" StringEquals: Windows Default: sleep3

Contoh cara menggunakan opsi bersyarat

Bagian ini mencakup contoh yang berbeda tentang cara menggunakan opsi dinamis dalam runbook. Setiap contoh di bagian ini memperluas runbook berikut. Runbook ini memiliki dua tindakan. Tindakan pertama bernama InstallMsiPackage. Ini menggunakan aws:runCommand tindakan untuk menginstal aplikasi pada Windows Server contoh. Tindakan kedua bernama TestInstall. Menggunakan aws:invokeLambdaFunction tindakan untuk melakukan tes aplikasi yang diinstal jika aplikasi berhasil diinstal. Langkah satu menentukan onFailure: Abort. Ini berarti bahwa jika aplikasi tidak berhasil diinstal, otomatisasi berhenti sebelum langkah kedua.

Contoh 1: Runbook dengan dua tindakan linier

--- schemaVersion: '0.3' description: Install MSI package and run validation. assumeRole: "{{automationAssumeRole}}" parameters: automationAssumeRole: type: String description: "(Required) Assume role." packageName: type: String description: "(Required) MSI package to be installed." instanceIds: type: String description: "(Required) Comma separated list of instances." mainSteps: - name: InstallMsiPackage action: aws:runCommand maxAttempts: 2 onFailure: Abort inputs: InstanceIds: - "{{instanceIds}}" DocumentName: AWS-RunPowerShellScript Parameters: commands: - msiexec /i {{packageName}} - name: TestInstall action: aws:invokeLambdaFunction maxAttempts: 1 timeoutSeconds: 500 inputs: FunctionName: TestLambdaFunction ...

Membuat otomatisasi dinamis yang melompat ke langkah yang berbeda dengan menggunakan opsi onFailure

Contoh berikut menggunakan onFailure: step:step name, nextStep, dan isEnd pilihan untuk membuat otomatisasi dinamis. Dengan contoh ini, jika InstallMsiPackage tindakan gagal, maka otomatisasi melompat ke tindakan yang disebut PostFailure(onFailure: step:PostFailure) untuk menjalankan AWS Lambda fungsi untuk melakukan beberapa tindakan jika penginstalan gagal. Jika instalasi berhasil, maka otomatisasi melompat ke TestInstall action ()nextStep: TestInstall. Kedua langkah TestInstall dan PostFailure menggunakan isEnd pilihan (isEnd: true) sehingga otomatisasi selesai ketika salah satu dari langkah tersebut selesai.

catatan

Menggunakan isEnd pilihan di langkah terakhir mainSteps bagian adalah opsional. Jika langkah terakhir tidak melompat ke langkah lain, maka otomatisasi berhenti setelah menjalankan tindakan di langkah terakhir.

Contoh 2: Otomatisasi dinamis yang melompat ke berbagai langkah

mainSteps - name: InstallMsiPackage action: aws:runCommand onFailure: step:PostFailure maxAttempts: 2 inputs: InstanceIds: - "{{instanceIds}}" DocumentName: AWS-RunPowerShellScript Parameters: commands: - msiexec /i {{packageName}} nextStep: TestInstall - name: TestInstall action: aws:invokeLambdaFunction maxAttempts: 1 timeoutSeconds: 500 inputs: FunctionName: TestLambdaFunction isEnd: true - name: PostFailure action: aws:invokeLambdaFunction maxAttempts: 1 timeoutSeconds: 500 inputs: FunctionName: PostFailureRecoveryLambdaFunction isEnd: true ...
catatan

Sebelum memproses runbook, sistem memverifikasi bahwa runbook tidak membuat perulangan tak terbatas. Jika perulangan tak terbatas terdeteksi, Otomatisasi mengembalikan kesalahan dan jejak lingkaran yang menunjukkan langkah mana yang membuat perulangan.

Membuat otomatisasi dinamis yang mendefinisikan langkah-langkah penting

Anda dapat menentukan bahwa langkah sangat penting untuk keberhasilan otomatisasi secara keseluruhan. Jika langkah kritis gagal, maka otomatisasi melaporkan status otomatisasi sebagai Failed, bahkan jika satu langkah atau lebih berjalan dengan sukses. Dalam contoh berikut, pengguna mengidentifikasi VerifyDependencieslangkah jika InstallMsiPackagelangkah gagal (onFailure: step:VerifyDependencies). Pengguna menentukan bahwa InstallMsiPackage langkah ini tidak penting (isCritical: false). Dalam contoh ini, jika aplikasi gagal untuk menginstal, Otomatisasi memproses VerifyDependencies langkah untuk menentukan apakah satu dependensi atau lebih hilang, yang oleh karena itu menyebabkan penginstalan aplikasi gagal.

Contoh 3: Mendefinisikan langkah-langkah penting untuk otomatisasi

--- name: InstallMsiPackage action: aws:runCommand onFailure: step:VerifyDependencies isCritical: false maxAttempts: 2 inputs: InstanceIds: - "{{instanceIds}}" DocumentName: AWS-RunPowerShellScript Parameters: commands: - msiexec /i {{packageName}} nextStep: TestPackage ...