AMIs の更新 - AWS Systems Manager

AMIs の更新

以下のチュートリアルでは、最新のパッチを適用するための Amazon Machine Image (AMIs) の更新方法について説明します。

Linux AMI (AWS CLI) を更新する

この AWS Systems Manager オートメーションチュートリアルでは、AWS Command Line Interface (AWS CLI) と System Manager AWS-UpdateLinuxAmi ランブックを使用して、指定した最新バージョンのパッケージを Linux Amazon Machine Image (AMI) に自動的にパッチ適用する方法について説明します。オートメーションは の一機能ですAWS Systems Manager AWS-UpdateLinuxAmi ランブックは、その他のサイト固有のパッケージと設定のインストールも自動化します。このチュートリアルを使用して、Ubuntu Server、CentOS、RHEL、SLES、または Amazon Linux AMIs などのさまざまな Linux ディストリビューションを更新できます。サポートされている Linux バージョンの詳細なリストについては、「Patch Manager の前提条件」を参照してください。

AWS-UpdateLinuxAmi ランブックでは、JSON あるいは YAML のランブックを作成することなく、イメージメンテナンスタスクを自動化することができます。AWS-UpdateLinuxAmi ランブックを使用して次のタイプのタスクを実行できます。

  • Amazon Linux、Red Hat Enterprise Linux、Ubuntu Server、SLES、または Cent OS Amazon Machine Image (AMI) 上のすべてのディストリビューションパッケージと Amazon ソフトウェアを更新します。これはデフォルトのランブックの動作です。

  • 既存のイメージに AWS Systems Manager SSM Agent をインストールして、AWS Systems Manager Run Command を使用したリモートコマンドの実行や、インベントリを使用したソフトウェアインベントリ収集といった Systems Manager の機能を有効にします。

  • 追加のソフトウェアパッケージをインストールします。

開始する前に

ランブックで作業を開始する前に、ロールを設定し、必要に応じてオートメーション用に EventBridge を設定します。詳細については、「オートメーションの設定」を参照してください。このチュートリアルでは、AWS Identity and Access Management (IAM) インスタンスプロファイルの名前を指定する必要もあります。IAM インスタンスプロファイル作成の詳細については、「Systems Manager に必要なインスタンスのアクセス許可を設定する」を参照してください。

AWS-UpdateLinuxAmi ランブックは、次の入力パラメータを受け付けます。

Parameter Type 説明

SourceAmiId

文字列

(必須) ソース AMI ID。AWS Systems Manager Parameter Store パブリックパラメータを使用すると、Linux 用の Amazon EC2 AMI の最新の ID を自動的に参照できます。詳細については、「AWS Systems Manager Parameter Store を使用して最新の Amazon Linux AMI ID を取得する」を参照してください。

IamInstanceProfileName

文字列

(必須)「Systems Manager に必要なインスタンスのアクセス許可を設定する」で作成した IAM インスタンスプロファイルロールの名前。インスタンスプロファイルのロールは、コマンドの実行またはサービスの開始や停止など、インスタンスでアクションを実行するための自動化のアクセス許可を付与します。ランブックでは、インスタンスプロファイルロールの名前のみが使用されます。

AutomationAssumeRole

文字列

(必須) オートメーションの設定 で作成した IAM サービスロールの名前。サービスロール (継承ロールとも呼ばれます) は、オートメーションが IAM ロールを引き受け、代わりにアクションを実行するアクセス許可を与えます。例えば、サービスロールを使用すると、ランブックで aws:createImage アクションを実行するとき、Automation で新しい AMI を作成できます。このパラメータには、完全な ARN を指定する必要があります。

TargetAmiName

文字列

(オプション) 作成後の AMI の新しい名前。デフォルト名は、ソース AMI ID および作成日時を含む、システム生成文字列です。

InstanceType

文字列

(オプション) WorkSpace ホストとして起動するインスタンスの種類。インスタンスタイプは、リージョンによって異なります。デフォルトのタイプは、t2.micro です。

PreUpdateScript

文字列

(オプション) 更新の適用前に実行するスクリプトの URL。デフォルト (\"none\") は、スクリプトを実行しません。

PostUpdateScript

文字列

(オプション) パッケージの更新の適用後に実行するスクリプトの URL。デフォルト (\"none\") は、スクリプトを実行しません。

IncludePackages

文字列

(オプション) これらの名前付きパッケージのみを更新します。デフォルト (\"all\") では、すべての利用可能な更新が適用されます。

ExcludePackages

文字列

(オプション) すべての条件の下で、更新を保留するパッケージの名前。デフォルト (\"none\") では、パッケージは除外されません。

自動化のステップ

AWS-UpdateLinuxAmi ランブックには、デフォルトで次の手順が含まれています。

ステップ 1: launchInstance (aws:runInstances アクション)

このステップでは、Amazon Elastic Compute Cloud (Amazon EC2) ユーザーデータ、および IAM インスタンスプロファイルのロールを使用してインスタンスを起動します。ユーザーデータは、オペレーティングシステムに基づいて、適切な SSM Agent をインストールします。SSM Agent をインストールすると、Run Command、State Manager、インベントリなど、Systems Manager の機能を利用できます。

ステップ 2: updateOSSoftware (aws:runCommand アクション)

このステップでは、起動したインスタンスで次のコマンドを実行します。

  • Amazon Simple Storage Service (Amazon S3) から更新スクリプトをダウンロードします。

  • オプションの更新前のスクリプトを実行します。

  • ディストリビューションパッケージおよび Amazon ソフトウェアを更新します。

  • オプションの更新後のスクリプトを実行します。

実行ログは、ユーザーが後で表示するために /tmp フォルダに保存されます。

特定のパッケージセットをアップグレードする場合は、IncludePackages パラメータを使用してリストを指定できます。指定すると、システムはこれらのパッケージおよび依存関係のみを更新するよう試みます。その他の更新は実行されません。デフォルトでは、含まれるパッケージが指定されない場合、プログラムはすべての利用可能なパッケージを更新します。

特定のパッケージセットのアップグレードを除外する場合は、ExcludePackages パラメータにリストを指定できます。指定されている場合、これらのパッケージは、指定された他のオプションとは関係なく、現在のバージョンのままです。デフォルトでは、除外するパッケージが指定されていない場合、除外されるパッケージはありません。

ステップ 3: stopInstance (aws:changeInstanceState アクション)

このステップでは、更新されたインスタンスを停止します。

ステップ 4: createImage (aws:createImage アクション)

このステップでは、ソース ID、および作成時刻にリンクするわかりやすい名前の新しい AMI を作成します。例: 「{{SourceAmiId}} から {{global:DATE_TIME}} に EC2 Automation によって生成された AMI」。ここで DATE_TIME および SourceID は、自動化の変数を表します。

ステップ 5: terminateInstance (aws:changeInstanceState アクション)

このステップでは、実行中のインスタンスを終了してオートメーションをクリーンアップします。

出力

オートメーションは、出力として新しい AMI ID を返します。

注記

デフォルトでは、自動化が AWS-UpdateLinuxAmi ランブックを実行すると、システムはデフォルト VPC (172.30.0.0/16) に一時インスタンスを作成します。デフォルト VPC を削除した場合、次のエラーが発生します。

VPC not defined 400

この問題を解決するには、AWS-UpdateLinuxAmi ランブックのコピーを作成し、サブネット ID を指定する必要があります。詳細については、「VPC not defined 400」を参照してください。

Automation を使用して パッチを適用した AMI を作成するには
  1. まだ AWS Command Line Interface (AWS CLI) をインストールして設定していない場合は、インストールして設定します。

    詳細については、「AWS CLI の最新バージョンをインストールまたは更新します。」を参照してください。

  2. 次のコマンドを実行して、AWS-UpdateLinuxAmi ランブックを実行します。各リソースプレースホルダーの例をユーザー自身の情報に置き換えます。

    aws ssm start-automation-execution \ --document-name "AWS-UpdateLinuxAmi" \ --parameters \ SourceAmiId=AMI ID, \ IamInstanceProfileName=IAM instance profile, \ AutomationAssumeRole='arn:aws:iam::{{global:ACCOUNT_ID}}:role/AutomationServiceRole'

    コマンドによって実行 ID が返されます。この ID をクリップボードにコピーします。この ID を使用して、オートメーションの状態を表示します。

    { "AutomationExecutionId": "automation execution ID" }
  3. AWS CLI を使用してオートメーションを表示するには、次のコマンドを実行します。

    aws ssm describe-automation-executions
  4. オートメーションの進捗の詳細を表示するには、以下のコマンドを実行します。[Automation execution ID] (オートメーション実行 ID) をユーザー自身の情報に置き換えます。

    aws ssm get-automation-execution --automation-execution-id automation execution ID

    更新プロセスは完了までに 30 分以上かかる場合があります。

    注記

    コンソールで、オートメーションのステータスをモニタリングすることもできます。リストで、先ほど開始したオートメーションを選択し、[Steps] タブを選択します。このタブには、オートメーションアクションのステータスが表示されます。

オートメーションが終了したら、更新した AMI からテストインスタンスを起動して、変更を確認します。

注記

オートメーションのいずれかのステップが失敗した場合は、失敗に関する情報が [Automation Executions] ページに表示されます。オートメーションは、すべてのタスクを正常に完了すると、一時インスタンスを終了するように設計されています。失敗したステップがあると、システムはインスタンスを終了できない場合があります。失敗したステップがある場合は、一時インスタンスを手動で終了します。