Data Lifecycle Manager の事前スクリプトと事後スクリプトのその他のユースケース - Amazon EBS

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Data Lifecycle Manager の事前スクリプトと事後スクリプトのその他のユースケース

事前スクリプトと事後スクリプトを使用してアプリケーション整合性のあるスナップショットを自動化するだけでなく、事前スクリプトと事後スクリプトを一緒に、または個別に使用して、スナップショット作成前または作成後の他の管理タスクを自動化できます。以下に例を示します。

  • スナップショットを作成する前に、事前スクリプトを使用してパッチを適用します。これにより、毎週または毎月の定期的なソフトウェアアップデートを適用した後にスナップショットを作成できます。

    注記

    事前スクリプトのみを実行することを選択した場合は、[Crash-consistent スナップショットをデフォルトで作成] がデフォルトで有効になります。

  • スナップショットを作成した後に、事後スクリプトを使用してパッチを適用します。これにより、毎週または毎月の定期的なソフトウェアアップデートを適用する前にスナップショットを作成できます。

他のユースケースで使用を開始する

このセクションでは、アプリケーション整合性のあるスナップショット以外のユースケースで事前スクリプトまたは事後スクリプトを使用する場合に実行する必要がある手順について説明します。

ターゲットインスタンスを事前スクリプトまたは事後スクリプト用に準備するには
  1. まだインストールされていない場合は、ターゲットインスタンスに SSM エージェントをインストールします。SSM エージェントがすでにターゲットインスタンスにインストールされている場合は、このステップをスキップします。

  2. SSM エージェントが実行されていることを確認します。詳細については、SSM「エージェントステータスの確認とエージェントの起動」を参照してください。

  3. Amazon EC2インスタンスの Systems Manager をセットアップします。詳細については、「 AWS Systems Manager ユーザーガイド」の「Amazon EC2インスタンス用の Systems Manager のセットアップ」を参照してください。

実行するSSMコマンドを含む事前スクリプトや事後スクリプトを含む コマンドドキュメントを作成する必要があります。

以下の空のSSMドキュメントテンプレートを使用して SSMドキュメントを作成し、適切なドキュメントセクションに事前スクリプトコマンドと事後スクリプトコマンドを追加できます。

次の点に注意してください:
  • SSM ドキュメントがワークロードに対して適切で必要なアクションを実行することを確認するのはお客様の責任です。

  • SSM ドキュメントには、allowedValues、、 pre-script post-scriptなどの の必須フィールドが含まれている必要がありますdry-run。Amazon Data Lifecycle Manager は、これらのセクションのコンテンツに基づいてインスタンス上でコマンドを実行します。SSM ドキュメントにこれらのセクションがない場合、Amazon Data Lifecycle Manager はそのセクションを失敗した実行として扱います。

###===============================================================================### # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # Permission is hereby granted, free of charge, to any person obtaining a copy of this # software and associated documentation files (the "Software"), to deal in the Software # without restriction, including without limitation the rights to use, copy, modify, # merge, publish, distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, # INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A # PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ###===============================================================================### schemaVersion: '2.2' description: SSM Document Template for Amazon Data Lifecycle Manager Pre/Post script feature parameters: executionId: type: String default: None description: (Required) Specifies the unique identifier associated with a pre and/or post execution allowedPattern: ^(None|[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})$ command: # Data Lifecycle Manager will trigger the pre-script and post-script actions during policy execution. # 'dry-run' option is intended for validating the document execution without triggering any commands # on the instance. The following allowedValues will allow Data Lifecycle Manager to successfully # trigger pre and post script actions. type: String default: 'dry-run' description: (Required) Specifies whether pre-script and/or post-script should be executed. allowedValues: - pre-script - post-script - dry-run mainSteps: - action: aws:runShellScript description: Run Database freeze/thaw commands name: run_pre_post_scripts precondition: StringEquals: - platformType - Linux inputs: runCommand: - | #!/bin/bash ###===============================================================================### ### Error Codes ###===============================================================================### # The following Error codes will inform Data Lifecycle Manager of the type of error # and help guide handling of the error. # The Error code will also be emitted via AWS Eventbridge events in the 'cause' field. # 1 Pre-script failed during execution - 201 # 2 Post-script failed during execution - 202 # 3 Auto thaw occurred before post-script was initiated - 203 # 4 Pre-script initiated while post-script was expected - 204 # 5 Post-script initiated while pre-script was expected - 205 # 6 Application not ready for pre or post-script initiation - 206 ###===============================================================================### ### Global variables ###===============================================================================### START=$(date +%s) # For testing this script locally, replace the below with OPERATION=$1. OPERATION={{ command }} # Add all pre-script actions to be performed within the function below execute_pre_script() { echo "INFO: Start execution of pre-script" } # Add all post-script actions to be performed within the function below execute_post_script() { echo "INFO: Start execution of post-script" } # Debug logging for parameters passed to the SSM document echo "INFO: ${OPERATION} starting at $(date) with executionId: ${EXECUTION_ID}" # Based on the command parameter value execute the function that supports # pre-script/post-script operation case ${OPERATION} in pre-script) execute_pre_script ;; post-script) execute_post_script ;; dry-run) echo "INFO: dry-run option invoked - taking no action" ;; *) echo "ERROR: Invalid command parameter passed. Please use either pre-script, post-script, dry-run." exit 1 # return failure ;; esac END=$(date +%s) # Debug Log for profiling the script time echo "INFO: ${OPERATION} completed at $(date). Total runtime: $((${END} - ${START})) seconds."
注記

このステップは次の場合に必要です。

  • カスタムIAMロールを使用する事前/事後スクリプト対応スナップショットポリシーを作成または更新します。

  • コマンドラインを使用して、デフォルトを使用する、事前/事後スクリプト対応のスナップショットポリシーを作成または更新します。

コンソールを使用して、スナップショットの管理にデフォルトのロール (AWSDataLifecycleManagerDefaultRole) を使用する事前/事後スクリプト対応スナップショットポリシーを作成または更新する場合は、このステップをスキップします。この場合、そのロールにAWSDataLifecycleManagerSSMFullAccessポリシーが自動的にアタッチされます。

ポリシーに使用するIAMロールが、ポリシーの対象となるインスタンスで事前スクリプトと事後スクリプトを実行するために必要なSSMアクションを実行するアクセス許可を Amazon Data Lifecycle Manager に付与していることを確認する必要があります。

Amazon Data Lifecycle Manager は、必要なアクセス許可を含む管理ポリシー (AWSDataLifecycleManagerSSMFullAccess) を提供します。このポリシーを IAM ロールにアタッチしてスナップショットを管理し、アクセス許可が含まれていることを確認できます。

重要

AWSDataLifecycleManagerSSMFullAccess 管理ポリシーは、 aws:ResourceTag条件キーを使用して、事前スクリプトと事後スクリプトを使用するときに特定のSSMドキュメントへのアクセスを制限します。Amazon Data Lifecycle Manager がSSMドキュメントにアクセスできるようにするには、SSMドキュメントに がタグ付けされていることを確認する必要がありますDLMScriptsAccess:true

または、カスタムポリシーを手動で作成したり、使用するIAMロールに必要なアクセス許可を直接割り当てたりすることもできます。 AWSDataLifecycleManagerSSMFullAccess 管理ポリシーで定義されているのと同じアクセス許可を使用できますが、 aws:ResourceTag 条件キーはオプションです。その条件キーを使用しない場合は、SSMドキュメントに をタグ付けする必要はありませんDLMScriptsAccess:true

次のいずれかの方法を使用して、AWSDataLifecycleManagerSSMFullAccessポリシーをIAMロールに追加します。

Console
マネージドポリシーをカスタムロールにアタッチするには
  1. https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

  2. ナビゲーションパネルで [Roles (ロール) ] を選択します。

  3. スナップショットを管理するためのカスタムロールを検索し、選択します。

  4. [アクセス許可] タブで、[アクセス許可の追加][ポリシーをアタッチ] の順に選択します。

  5. AWSDataLifecycleManagerSSMFullAccess 管理ポリシーを検索して選択し、アクセス許可の追加を選択します。

AWS CLI
マネージドポリシーをカスタムロールにアタッチするには

attach-role-policy コマンドを実行します。---role-name には、カスタムロールの名前を指定します。--policy-arn の場合、arn:aws:iam::aws:policy/AWSDataLifecycleManagerSSMFullAccess を指定します。

$ aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AWSDataLifecycleManagerSSMFullAccess \ --role-name your_role_name
Console
スナップショットライフサイクルポリシーを作成するには
  1. で Amazon EC2コンソールを開きますhttps://console.aws.amazon.com/ec2/

  2. ナビゲーションペインで、[Elastic Block Store]、[ライフサイクルマネージャー]、[ライフサイクルポリシーの作成] の順に選択します。

  3. ポリシータイプの選択 画面で、EBSスナップショットポリシーを選択し、次を選択します。

  4. [Target resources] (ターゲットリソース) セクションで、以下の操作を行います。

    1. [ターゲットリソースタイプ] で、[Instance] を選択します。

    2. [ターゲットリソースタグ] で、バックアップするインスタンスを識別するリソースタグを指定します。指定したタグを持つリソースのみがバックアップされます。

  5. IAM ロールの場合は、 AWSDataLifecycleManagerDefaultRole (スナップショットを管理するためのデフォルトロール) を選択するか、事前スクリプトと事後スクリプト用に作成して準備したカスタムロールを選択します。

  6. 必要に応じて、スケジュールと追加のオプションを設定します。メンテナンスウィンドウ中など、ワークロードに合った期間にスナップショット作成時刻をスケジュールすることをお勧めします。

  7. [事前スクリプトと事後スクリプト] セクションで、[事前スクリプトと事後スクリプトを有効にする] を選択し、次の操作を行います。

    1. カスタムSSMドキュメントを選択します。

    2. [自動化] オプションで、実行するスクリプトに一致するオプションを選択します。

    3. SSM ドキュメントで、準備したSSMドキュメントを選択します。

  8. 必要に応じて、次の追加オプションを設定します。

    • [スクリプトタイムアウト] — Amazon Data Lifecycle Manager がスクリプトの実行試行を完了していない場合に、その試行が失敗するまでのタイムアウト期間。スクリプトがタイムアウト期間内に完了しない場合、Amazon Data Lifecycle Manager はその試行に失敗します。タイムアウト期間は、事前スクリプトと事後スクリプトに個別に適用されます。デフォルトのタイムアウト期間は 10 秒です。また、最大タイムアウト期間は 120 秒です。

    • [失敗したスクリプトの再試行] — タイムアウト期間内に完了しなかったスクリプトを再試行する場合は、このオプションを選択します。事前スクリプトが失敗した場合、Amazon Data Lifecycle Manager は、事前スクリプトと事後スクリプトの実行を含め、スナップショット作成プロセス全体を再試行します。事後スクリプトが失敗した場合、Amazon Data Lifecycle Manager は、事後スクリプトのみを再試行します。この場合、事前スクリプトは完了し、スナップショットが作成された可能性があります。

    • Crash-consistent スナップショットをデフォルトで作成 – このオプションを選択すると、事前スクリプトの実行に失敗した場合に、Crash-consistent スナップショットがデフォルトで作成されます。これは、事前スクリプトと事後スクリプトが有効になっていない場合の、Amazon Data Lifecycle Manager のデフォルトのスナップショット作成動作です。再試行を有効にした場合、Amazon Data Lifecycle Manager は、再試行回数をすべて使い切った後にのみ、Crash-consistent スナップショットをデフォルトで作成します。事前スクリプトが失敗し、Crash-consistent スナップショットがデフォルトで作成されなかった場合、Amazon Data Lifecycle Manager は、そのスケジュールの実行中にインスタンスのスナップショットを作成しません。

  9. [デフォルトポリシーの作成] を選択します。

    注記

    Role with name AWSDataLifecycleManagerDefaultRole already exists エラーが発生した場合、詳細については「Amazon Data Lifecycle Manager の問題のトラブルシューティング」を参照してください。

AWS CLI
スナップショットライフサイクルポリシーを作成するには

create-lifecycle-policy コマンドを使用して、 にScriptsパラメータを含めますCreateRule。パラメータの詳細については、「Amazon Data Lifecycle Manager APIリファレンス」を参照してください。

$ aws dlm create-lifecycle-policy \ --description "policy_description" \ --state ENABLED \ --execution-role-arn iam_role_arn \ --policy-details file://policyDetails.json

ここで policyDetails.json には以下が含まれます。

{ "PolicyType": "EBS_SNAPSHOT_MANAGEMENT", "ResourceTypes": [ "INSTANCE" ], "TargetTags": [{ "Key": "tag_key", "Value": "tag_value" }], "Schedules": [{ "Name": "schedule_name", "CreateRule": { "CronExpression": "cron_for_creation_frequency", "Scripts": [{ "Stages": ["PRE" | "POST" | "PRE","POST"], "ExecutionHandlerService":"AWS_SYSTEMS_MANAGER", "ExecutionHandler":"ssm_document_name|arn", "ExecuteOperationOnScriptFailure":true|false, "ExecutionTimeout":timeout_in_seconds (10-120), "MaximumRetryCount":retries (0-3) }] }, "RetainRule": { "Count": retention_count } }] }