演練:使用文件建置器建立自訂 Runbook - AWS Systems Manager

演練:使用文件建置器建立自訂 Runbook

下列演練說明如何使用自動化主控台中的 AWS Systems Manager 文件建置器來建立自訂 Runbook,然後執行自訂 Runbook。自動化是 AWS Systems Manager 的功能。

您建立 Runbook 的第一個步驟會執行指令碼來啟動 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。第二個步驟會執行另一個指令碼來監控要變更為 ok 的執行個體狀態檢查。然後,會報告自動化的 Success 整體狀態。

開始之前

開始此演練前,請執行下列操作:

  • 確認您具有管理員許可,或已獲授與適當的許可,才能存取 AWS Identity and Access Management (IAM) 中的 Systems Manager。

    如需相關資訊,請參閱 驗證 Runbook 的使用者存取權

  • 確認您的 AWS 帳戶 帳戶中具有用於自動化的 IAM 服務角色 (也稱為擔任角色)。此角色是必要的,因為此演練使用 aws:executeScript 動作。

    如需建立此角色的詳細資訊,請參閱設定自動化的服務角色 (擔任角色) 存取權

    如需執行 aws:executeScript 之 IAM 服務角色需求的相關資訊,請參閱 使用 Runbook 的許可

  • 確認您有啟動 EC2 執行個體的許可。

    如需資訊,請參閱《Amazon EC2 Linux 執行個體使用者指南》中的 IAM 和 Amazon EC2

步驟 1:建立自訂 Runbook

使用下列程序建立自訂 Runbook,以啟動 Amazon EC2 執行個體和等待執行個體狀態檢查變更為 ok

提示

如果您將此逐步解說中的值複製並貼上到文件建置器,例如參數名稱和處理常式名稱,請務必刪除新增到您輸入的文字值中的任何前導或尾端空格。

使用文件建置器建立自訂 Runbook

  1. 開啟位於 AWS Systems Managerhttps://console.aws.amazon.com/systems-manager/ 的 主控台。https://console.aws.amazon.com/systems-manager/

  2. 在導覽窗格中,選擇 Documents (文件)

    -或-

    如果 AWS Systems Manager 首頁先開啟,選擇選單圖示 ( ) 以開啟導覽窗格,然後在導覽窗格中,選擇 Documents (文件)。

  3. 選擇 Create automation (建立自動化)

  4. 對於 Name (名稱),輸入 Runbook 的描述性名稱:LaunchInstanceAndCheckStatus

  5. (選用) 對於 Document description (文件描述),使用 Markdown,以此 Runbook 的描述取代預設文字。以下是範例。

    ##Title: LaunchInstanceAndCheckState ----- **Purpose**: This runbook first launches an EC2 instance using the AMI ID provided in the parameter ```imageId```. The second step of this runbook continuously checks the instance status check value for the launched instance until the status ```ok``` is returned. ##Parameters: ----- Name | Type | Description | Default Value ------------- | ------------- | ------------- | ------------- assumeRole | String | (Optional) The ARN of the role that allows Automation to perform the actions on your behalf. | - imageId | String | (Optional) The AMI ID to use for launching the instance. The default value uses the latest Amazon Linux AMI ID available. | {{ ssm:/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2 }}
  6. 對於 Assume role (擔任角色),輸入對於自動化執行,用於自動化 (擔任角色) 的 IAM 服務角色的 ARN,格式為 arn:aws:iam::111122223333:role/AutomationServiceRole。將您的 AWS 帳戶 ID 替代為 111122223333。

    您指定的角色是用來提供開始自動化所需的許可。

    重要

    對於使用 aws:executeScript 動作的非 Amazon 擁有的 Runbook,必須指定角色。如需相關資訊,請參閱 使用 Runbook 的許可

  7. 展開 Input parameters (輸入參數),然後執行下列動作。

    1. 對於 Parameter name (參數名稱),輸入 imageId

    2. 針對 Type (類型),選擇 String

    3. 對於 Required (必要),選擇 No

    4. 對於 Default value (預設值),輸入以下內容。

      {{ ssm:/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2 }}
      注意

      此值會使用最新的 Amazon Machine Image (AMI) ID 啟動 Amazon EC2 執行個體。如果您想使用不同的 AMI,請以您的 AMI ID 取代該值。

    5. 對於 Description (描述),輸入以下內容。

      (Optional) The AMI ID to use for launching the instance. The default value uses the latest released Amazon Linux AMI ID.
  8. 選擇 Add a parameter (新增參數) 來建立第二個參數 tagValue,然後輸入下列資訊。

    1. 對於 Parameter name (參數名稱),輸入 tagValue

    2. 針對 Type (類型),選擇 String

    3. 對於 Required (必要),選擇 No

    4. 對於 Default value (預設值),輸入 LaunchedBySsmAutomation。這會將標籤金鑰對值 Name:LaunchedBySsmAutomation 新增至該執行個體。

    5. 對於 Description (描述),輸入以下內容。

      (Optional) The tag value to add to the instance. The default value is LaunchedBySsmAutomation.
  9. 選擇 Add a parameter (新增參數) 來建立第三個參數 instanceType,然後輸入下列資訊。

    1. 對於 Parameter name (參數名稱),輸入 instanceType

    2. 針對 Type (類型),選擇 String

    3. 對於 Required (必要),選擇 No

    4. 對於 Default value (預設值),輸入 t2.micro

    5. 對於 Parameter Description (參數描述),輸入以下內容。

      (Optional) The instance type to use for the instance. The default value is t2.micro.
  10. 展開 Target type (目標類型),並選擇 "/"

  11. (選用) 展開 Document tags (文件標籤),將資源標籤套用至您的 Runbook。對於 Tag key (標籤鍵),輸入 Purpose,以及對於 Tag value (標籤值),輸入 LaunchInstanceAndCheckState

  12. Step 1 (步驟 1) 區段中,完成下列步驟。

    1. 對於 Step name (步驟名稱),輸入自動化第一個步驟的此描述性步驟名稱:LaunchEc2Instance

    2. 對於 Action type (動作類型),選擇 Run a script (執行指令碼) (aws:executeScript)。

    3. 對於 Description (描述),輸入自動化步驟的描述,如下所示。

      **About This Step** This step first launches an EC2 instance using the ```aws:executeScript``` action and the provided script.
    4. 展開 Inputs (輸入)

    5. 對於 Runtime (執行時間),選擇用於執行所提供指令碼的執行時間語言。

    6. 對於 Handler (處理常式),輸入 launch_instance。這是在以下指令碼中宣告的函數名稱。

      注意

      PowerShell 不需要用到。

    7. 對於 Script (指令碼),請以下列項目取代預設內容。請務必將指令碼與對應的執行時間值相符。

      Python
      def launch_instance(events, context): import boto3 ec2 = boto3.client('ec2') image_id = events['image_id'] tag_value = events['tag_value'] instance_type = events['instance_type'] tag_config = {'ResourceType': 'instance', 'Tags': [{'Key':'Name', 'Value':tag_value}]} res = ec2.run_instances(ImageId=image_id, InstanceType=instance_type, MaxCount=1, MinCount=1, TagSpecifications=[tag_config]) instance_id = res['Instances'][0]['InstanceId'] print('[INFO] 1 EC2 instance is successfully launched', instance_id) return { 'InstanceId' : instance_id }
      PowerShell
      Install-Module AWS.Tools.EC2 -Force Import-Module AWS.Tools.EC2 $payload = $env:InputPayload | ConvertFrom-Json $imageid = $payload.image_id $tagvalue = $payload.tag_value $instanceType = $payload.instance_type $type = New-Object Amazon.EC2.InstanceType -ArgumentList $instanceType $resource = New-Object Amazon.EC2.ResourceType -ArgumentList 'instance' $tag = @{Key='Name';Value=$tagValue} $tagSpecs = New-Object Amazon.EC2.Model.TagSpecification $tagSpecs.ResourceType = $resource $tagSpecs.Tags.Add($tag) $res = New-EC2Instance -ImageId $imageId -MinCount 1 -MaxCount 1 -InstanceType $type -TagSpecification $tagSpecs return @{'InstanceId'=$res.Instances.InstanceId}
    8. 展開 Additional inputs (其他輸入)

    9. 對於 Input name (輸入名稱),選擇 InputPayload。對於 Input value (輸入值),輸入以下 YAML 資料。

      image_id: "{{ imageId }}" tag_value: "{{ tagValue }}" instance_type: "{{ instanceType }}"
  13. 展開 Outputs (輸出),並執行下列動作:

    • 對於 Name (名稱),輸入 payload

    • 對於 Selector (選取器),輸入 $.Payload

    • 針對 Type (類型),選擇 StringMap

  14. 選擇 Add step (新增步驟),將第二個步驟新增至 Runbook。第二個步驟會查詢在步驟 1 中啟動的執行個體狀態,並等候傳回的狀態為 ok 為止。

  15. Step 2 (步驟 2) 區段中,執行下列動作。

    1. 對於 Step name (步驟名稱),輸入自動化第二個步驟的此描述性名稱:WaitForInstanceStatusOk

    2. 對於 Action type (動作類型),選擇 Run a script (執行指令碼) (aws:executeScript)。

    3. 對於 Description (描述),輸入自動化步驟的描述,如下所示。

      **About This Step** The script continuously polls the instance status check value for the instance launched in Step 1 until the ```ok``` status is returned.
    4. 對於 Runtime (執行時間),選擇用於執行所提供指令碼的執行時間語言。

    5. 對於 Handler (處理常式),輸入 poll_instance。這是在以下指令碼中宣告的函數名稱。

      注意

      PowerShell 不需要用到。

    6. 對於 Script (指令碼),請以下列項目取代預設內容。請務必將指令碼與對應的執行時間值相符。

      Python
      def poll_instance(events, context): import boto3 import time ec2 = boto3.client('ec2') instance_id = events['InstanceId'] print('[INFO] Waiting for instance status check to report ok', instance_id) instance_status = "null" while True: res = ec2.describe_instance_status(InstanceIds=[instance_id]) if len(res['InstanceStatuses']) == 0: print("Instance status information is not available yet") time.sleep(5) continue instance_status = res['InstanceStatuses'][0]['InstanceStatus']['Status'] print('[INFO] Polling to get status of the instance', instance_status) if instance_status == 'ok': break time.sleep(10) return {'Status': instance_status, 'InstanceId': instance_id}
      PowerShell
      Install-Module AWS.Tools.EC2 -Force $inputPayload = $env:InputPayload | ConvertFrom-Json $instanceId = $inputPayload.payload.InstanceId $status = Get-EC2InstanceStatus -InstanceId $instanceId while ($status.Status.Status -ne 'ok'){ Write-Host 'Polling get status of the instance', $instanceId Start-Sleep -Seconds 5 $status = Get-EC2InstanceStatus -InstanceId $instanceId } return @{Status = $status.Status.Status; InstanceId = $instanceId}
    7. 展開 Additional inputs (其他輸入)

    8. 對於 Input name (輸入名稱),選擇 InputPayload。對於 Input value (輸入值),輸入以下內容:

      {{ LaunchEc2Instance.payload }}
  16. 選擇 Create automation (建立自動化) 以儲存 Runbook。

步驟 2:執行自訂 Runbook

使用下列程序來執行在步驟 1 中建立的自訂 Runbook。自訂 Runbook 會啟動 EC2 執行個體,並等待執行個體檢查變更為 ok 狀態。

執行自訂 Runbook

  1. 開啟位於 AWS Systems Managerhttps://console.aws.amazon.com/systems-manager/ 的 主控台。https://console.aws.amazon.com/systems-manager/

  2. 在導覽窗格中,選擇 Automation (自動化),接著選擇 Execute automation (執行自動化)

  3. Automation document (自動化文件) 清單中,選擇 Owned by me (由我擁有) 索引標籤,然後選擇您建立的自訂 Runbook 旁邊的按鈕 LaunchInstanceAndCheckStatus

  4. Document details (文件詳細資訊) 部分,對於 Document version (文件版本),確認已選取 Default version at runtime (執行時間的預設版本)

  5. 選擇 Next (下一步)

  6. Execute automation document (執行自動化文件) 頁面頂端,確認已選取 Simple execution (簡單執行)

  7. 選擇 Execute (執行)

  8. 自動化中的這兩個步驟完成後,在 Executed steps (已執行的步驟) 區域中,選擇步驟的步驟 ID 以檢視步驟詳細資訊,包括任何步驟輸出。

    注意

    傳回 ok 狀態可能需要幾分鐘的時間。

  9. (選用) 除非您打算將此演練建立的 EC2 執行個體用於其他用途,否則您可以終止該執行個體。如需資訊,請參閱《Amazon EC2 Linux 執行個體使用者指南》中的終止執行個體

    您可以透過您在 步驟 1:建立自訂 Runbook 中將其標記為 LaunchedBySsmAutomation 的名稱識別執行個體。