Linux AMI を更新する - AWS Systems Manager

Linux AMI を更新する

この Systems Manager Automation チュートリアルでは、コンソールまたは AWS CLI および AWS-UpdateLinuxAmi ランブックを使用して、指定したパッケージ用の最新バージョンのパッチを、Linux 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、SUSE Linux Enterprise Server、または 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。

IamInstanceProfileName

文字列

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

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 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 (AWS Systems Manager) を使用して パッチを適用した AMI を作成するには
  1. AWS Systems Manager コンソール (https://console.aws.amazon.com/systems-manager/) を開きます。

  2. ナビゲーションペインで [オートメーション] を選択します。

  3. [Execute automation] を選択します。

  4. [Automation document (オートメーションドキュメント)] リストで、AWS-UpdateLinuxAmi を選択します。

  5. [Document details (ドキュメント詳細)] セクションで、[Document version (ドキュメントバージョン)] が [Default version at runtime (ランタイムのデフォルトバージョン)] に設定されていることを確認します。

  6. [Next] を選択します。

  7. [実行モード)] セクションで、[シンプルな実行] を選択します。

  8. [Input parameters] セクションに、開始する前にセクションで用意した情報を入力します。

  9. [Execute] を選択します。自動化の実行のステータスがコンソールに表示されます。

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

注記

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