はじめに
記載内容は上記の翻訳ではなく、意訳、要約を含みます。
手順も一部省略している部分もあります。
詳細や正確な手順を知りたい場合は本家サイトを参照ください。
画面スクショは本記事作成当時のものであり、今後のアップデートにより差異が発生する可能性があることをご留意ください。
Introduction
本ハンズオンでInfrastructure as Code(以降、IaC と呼ぶ)とOperations as Codeの概念を学ぶことができます。
Intro
クラウドでは、環境をコードで管理することができます。
ワークロード全体をコードで定義、更新したり、運用手順をスクリプト化してイベントをトリガーとして実行を自動化することもできます。
これによりヒューマンエラーを回避し、運用手順が一貫した手順となります。
Setup
2.1 Create Administrator IAM User and Group
AdministratorAccess
ポリシーをアタッチしたIAMグループを新規作成します。
また、IAMユーザ(以降、管理者ユーザ とよぶ)も作成し、上記IAMグループに属させます。
ネットに情報がたくさんあるので、こちらの説明は省略します。
2.2 Log in to the AWS Management Console using your administrator account
前の手順で作成した管理者ユーザでマネジメントコンソールにログインする手順です。
こちらも特に説明はしません。
1点確認していただきたいのは、ハンズオンを実施するリージョンのVPCの数です。
VPCダッシュボードから確認することができます。下図の場合、東京リージョンで1つのVPCが生成されていることがわかります。
これが3つ以下であることを確認してください。3つより大きい場合、不要なVPCを削除してください。
2.3 Create an EC2 Key Pair
EC2インスタンスにログインする際に使用するキーペアを作成します。
このキーペアは公開鍵暗号方式を使用しており、EC2インスタンスへのログイン情報の暗号化、復号化に使用します。
EC2ダッシュボードに遷移し、左メニューキーペア
を選択してください。
右上のキーペアを作成
ボタンをクリックしてください。
名前
は任意ですが、ハンズオンに合わせOELabIPM
にしました。
それ以外は下図のように入力し、キーペアを作成
ボタンをクリックしてください。
キーペア画面に遷移し、一覧にキーペアが追加されていれば作成成功です。
作成成功時、キーペアがダウンロードされるので忘れないでください。
また、キーペアは機密情報ですので、厳重に管理してください。
Deploy an Environment Using Infrastructure as Code
AWS Cloud Formationは、IaCを支援するサービスです。
Cloud Formationの定義に従ったテンプレートを作成し、このサービスにアップロードすることで、AWSリソースのプロビジョニングを自動化することができます。
プロビジョニングされたAWSサービス群はスタック
という単位で管理され、作成および削除することができます。
Cloud Formationを使用することで、リソースの管理が楽になり、本来やるべき作業に注力することができます。
3.1 Deploy the Lab Infrastructure
こちらからCloudFormationテンプレートをダウンロードしてください。
CloudFormationのTOP画面に遷移し、左メニュースタック
を選択してください。
次に画面中央オレンジ色のスタックの作成
ボタンをクリックするか、右上スタックの作成
を選択し、新しいリソースを使用(標準)
をクリックしてください。
前提条件 - テンプレートの準備
はテンプレートの準備完了
、テンプレートソース
はテンプレートファイルのアップロード
を選択してください。
次に、ファイルの選択
ボタンをクリックし、前手順でダウンロードしたCloudFormationテンプレートを選択してください。
最後に、次へ
ボタンをクリックしてください。
デザイナーについての説明は割愛いたします。
スタック名
は任意ですがハンズオンと同様OELabStack1
にします。
InstanceProfile
は空白にしてください。
InstanceTypeApp
とInstanceTypeWeb
はt2.micro
にしてください。
KeyName
は前手順で作成したキーペア名(今回はOELabIPM
)を選択してください。
SourceLocation
は作成するEC2インスタンスのアクセス元IPアドレスを指定します。
https://checkip.amazonaws.com/にアクセスし、表示されたIPを入力、末尾に/32
を追加してください。
WorkloadName
はTest
にしてください。
最後に、次へ
ボタンをクリックしてください。
新しいタグを追加
ボタンをクリックし、キー
にOwner
、値
に任意の文字列を入力してください。
それ以外は設定変更せず、次へ
ボタンをクリックしてください。
確認画面です。入力内容を確認したら、送信
ボタンをクリックしてください。
スタックのステータスがCREATE_COMPLETE
になったらプロビジョニング成功です。
EC2インスタンスの一覧に遷移し、インスタンスが合計4つ起動していることを確認してください。
インスタンスの1つを選択し、タグ
タブを選択してください。
CloudFormationでの操作時に入力したOwner
タグやWorkload
がTest
になっていることを確認してください。
The impact of Infrastructure as Code
IaCのメリットの1つはデプロイできるテンプレートを作成できれば、それを使って同じ環境のコピーをいくつも作成できることです。
今回CloudFormationのパラメータWorkload
はTest
としましたが、Prod
にして本番環境として利用することもできます。
Inventory Management using Operations as Code
Management Tools: Systems Manager
AWS Systems Managerは、AWS環境の運用に加え、オンプレ環境の運用も効率化する機能を数多く提供するサービスです。
管理する主なサービスはEC2であり、管理対象となったEC2インスタンスをマネージドインスタンスと呼びます。
マネージドインスタンスになるには以下の条件があります。
- SSMエージェントがインストールされていること
- エージェントがプリインストールされているAMIもありますし、手動でインストールすることもできます
- 詳細は公式ドキュメントを参照ください
- SSM APIへの接続経路が存在すること
- エージェントとSSM APIはHTTPSで通信します。
- Internet GatewayやNAT Gatewayを使用し、アウトバウンド通信を許可する必要があります。
- IAMロールに適切な権限が付与されていること
- マネージドポリシー
AmazonSSMManagedInstanceCore
にSSMを操作する最低限の権限が付与されているので、このポリシーかそれに相当するものをIAMロールに付与する必要があります。
- マネージドポリシー
4.1 Setting up Systems Manager
Systems ManagerのTOP画面から左メニューフリートマネージャー
を選択します。
先に進むと下図のような画面が表示されます。フリートマネージャーはマネージドインスタンスの情報を一覧化し、管理できる機能です。
現在はマネージドインスタンスの条件となるEC2インスタンスを作成していないため、何も表示されていません
[Deploy an Environment Using Infrastructure as Code](#Deploy an Environment Using Infrastructure as Code)で生成したEC2インスタンスをフリートマネージャーに表示するには上に記載している条件のIAMロールに適切な権限を付与
を実施する必要があります。
IAMのTOP画面の左メニューロール
を選択し、ロールを作成
ボタンをクリックしてください。
次に下図のように信頼されたエンティティタイプ
とユースケース
を選択し、次へ
ボタンをクリックしてください。
続いて、追加するポリシーを選択します。
検索窓にAmazonSSMManagedInstanceCore
と入力し、表示されたAmazonSSMManagedInstanceCore
をチェック、次へ
ボタンをクリックしてください。
ロール名
は任意ですが、今回はハンズオンと同様ManagedInstancesRole
にします。それ以外は特に入力は不要です。
ロールを作成
ボタンをクリックしてください。
EC2インスタンスの一覧画面に遷移してください。
現在4つのインスタンスが起動しているはずです。
その内1つをチェックし、アクション
プルダウンを選択、セキュリティ
、IAMロールを変更
を選択してください。
プルダウンでインスタンスにアタッチするIAMロールを選択します。
先ほど作成したManagedInstancesRole
を選択し、IAMロールの更新
ボタンをクリックしてください。
以上の作業を他3インスタンスにも実施してください。
フリートマネージャーに移動し、IAMロールを変更したEC2インスタンスがマネージドインスタンスとして表示されているか確認してみましょう(反映には感覚10分程度かかります)。
インスタンスが4つ表示されたら成功です。
4.2 Create a Second CloudFormation Stack
以降のハンズオンで使用するため、[3.1 Deploy the Lab Infrastructure](#3.1 Deploy the Lab Infrastructure)で作成したスタックをもう一つ作成します。
スタック名
は任意ですがハンズオンと同様OELabStack2
にします。
InstanceProfile
は上記手順で作成したIAMロールManagedInstancesRole
のロール名を入力してください。
また、WorkloadName
はProd
にしてください。
それ以外のパラメータは同じにしてください。
スタックが作成されたら、フリートマネージャーを確認し、マネージドインスタンスが8つ表示されていることを確認してください。
Systems Manager: Inventory
AWS Systems ManagerのInventoryは、マネージドインスタンスからOS、アプリケーションやインスタンスのメタデータ(ネットワーク情報など)を収集し、一覧表示する機能です。
収集したデータをクエリし、アップデートが必要なインスタンスや必要なアプリケーションがインスタンスにインストールされているかなどを確認することができます。
4.3 Using Systems Manager Inventory to Track Your Instances
Systems ManagerのTOP画面左メニューインベントリ
を選択してください。
画面下にある対応するマネージドインスタンス
にフリートマネージャー
で表示されているEC2インスタンスの情報が表示されていることを確認します。
一覧一番上のインスタンスID
のリンクをクリックしてください。
左メニューを選択することでインスタンスのメタ情報やタグ情報などを確認することができます。
再度、左メニューインベントリ
を選択してください。
画面右上セットアップインベントリ
ボタンをクリックしてください。
こちらの画面でインベントリ情報を収集するマネージドインスタンスや情報収集のスケジュール、取得する情報などを指定することができます。
まず、インベントリの詳細の指定
の名前を入力します。今回はデフォルトInventory-Association
にします。
インベントリ対象のマネージドインスタンスを指定します。
ターゲット
はタグの指定
を選択し、タグ
はEnvironment
、値
はOELabIPM
を入力してください。
ハンズオンで生成したEC2インスタンスには上記タグ値が付与されているため、スタック内全てのインスタンスがインベントリ対象になります。
続いて、インベントリを収集するスケジュールを指定します。
スケジュール
は最小の30分
にしてください。
パラメーター
では収集するインベントリの種類を選択できます。今回はデフォルト(全選択)にしてください。
詳細設定
でインベントリ収集の実行ログを指定したS3バケットに書き込むことができます。
実行履歴を S3 に書き込む
をチェックし、S3 バケット名
に任意のS3バケット名、S3 キープレフィックス
はlogs
と入力してください。(S3バケットは事前に作成しておく必要があります)
入力し終えたら、画面右下のセットアップインベントリ
ボタンをクリックしてください。
以上でインベントリが設定されます。また、同時に後述するState Manager
に関連付け(アソシエーション)
が作成されます。
作成したインベントリ設定は設定
タブを選択することで確認できます。
ステータス
が成功
になっていれば、インベントリ収集が完了です。
設定の新規作成は右上新しいインベントリの設定
ボタン、設定の編集は右上編集
ボタンからできます。
インベントリのダッシュボード
に遷移してください。
インベントリが有効になっているマネージドインスタンス
は以前disable
が8でしたが、enable
が8に変わっています。
また、OSやアプリケーションの情報も表示されるようになりました。
インスタンスの詳細画面でインベントリ
を選択すると、インスタンス毎の詳細なインベントリを閲覧することができます。
下図はインストールされているアプリケーションを一覧表示している例です。
Systems Manager: State Manager
AWS Systems ManagerのState Managerは、マネージドインスタンスの設定を管理、維持する機能です。
このインスタンスがあるべき状態の定義
を関連付け(アソシエーション)
と呼びます。
関連付け(アソシエーション)
は以下3つの設定があります。
- 対象: どのマネージドインスタンスをステートマネージャーで管理するか
- 実行ドキュメント: どのドキュメント(マネージドインスタンスで実行するアクションを定義したもの)を実行するか
- スケジュール: どの頻度でドキュメントを実行するか(1回のみ実施も可能)
4.4 Review Association Status
左メニューステートマネージャー
を選択し、セットアップインベントリで生成した関連付け(今回だとInventory-Association)の関連ID
のリンクをクリックしてください。
タブを選択して、関連付けの情報を閲覧することができます。
関連付けのメタ情報、対象
となっているマネージドインスタンスやターゲットとする条件など確認ができます。
Edit
ボタンをクリックすると、関連付け設定の変更ができます。
ドキュメント
に記載されているSSMドキュメント(今回はAWS-GatherSoftwareInventory
)がスケジュールに従い、指定したターゲットに対して実行されます。
パラメーターの値は実行時にドキュメントに渡されます。
インスタンスの詳細画面に再度遷移します。(フリートマネージャーでノードID
のリンクをクリック)
左メニュー関連付け
を選択すると、関連付け情報と直近の実行結果を確認することができます。
Systems Manager: Compliance
AWS Systems ManagerのComplianceはマネージドインスタンスをスキャンし、コンプライアンスに準拠しているか確認する機能です。
以下の情報からコンプライアンスに準拠しているかしていないかを判断しています。
- Patch Managerのパッチ適用のステータス
- State Managerの関連付けのステータス
- カスタムコンプライアンス項目のステータス
つまり、マネージドインスタンスのパッチ適用状況と構成が逸脱していないかを判断してくれます。
左メニューコンプライアンス
をクリックし、コンプライアンス画面に遷移します。
コンプライアンスダッシュボードのフィルタリング
でコンプライアンスタイプ
を選択するとState Managerの関連付けに準拠しているかを確認することができます。
準拠リソース
が8であるため、問題ないことがわかります。
コンプライアンスダッシュボードのフィルタリング
でパッチグループ
を選択するとPatch Managerのパッチ適用状況を確認することができます。
こちらも準拠リソース
が8であるため、問題ないことがわかります。
Patch Management
Systems Manager: Patch Manager
AWS Systems ManagerのPatch Managerはマネージドインスタンスにセキュリティパッチを管理する機能です。
どのインスタンスにパッチが不足しているかのレポート機能や不足していたら自動的にパッチ適用する機能があります。
パッチをチェックするインスタンスは個別に指定することもグループとして指定することも可能です。
Patch Baselines
Patch Managerにはパッチベースラインという概念があります。これはインスタンスにパッチを適用するルールです。
例えば、デプロイ後数日以内にパッチを自動適用するルールなどがあります。
OS毎に事前定義済みのパッチベースラインがありますし、独自のベースライン(カスタムベースライン)も定義することができます。
5.1 Create a Patch Baseline
Systems Managerの左メニューパッチマネージャー
を選択してください。
右上の概要から開始
リンクをクリックしてください。
パッチマネージャーの画面が表示されたら、パッチベースライン
タブを選択してください。
パッチベースラインの一覧が表示されます。
パッチベースラインを作成する
ボタンをクリックしてください。
作成するパッチベースラインの情報を入力する画面に遷移します。
パッチベースラインの詳細
セクションの入力を行います。
名前
はなんでも良いですが、今回はハンズオンと同じAmazonLinuxSecAndNonSecBaseline
にします。
説明
はオプションですが、今回はハンズオンと同じAmazon Linux patch baseline including security and non-security patches
にします。
オペレーティングシステム
はAmazon Linux
を選択してください。
オペレーティングシステムの承認ルール
の入力を行います。
製品
、分類
、重要度
は全てAll
を選択してください。
自動承認
はデフォルト値、つまり指定した日数後にパッチを承認する
をチェックし、日数の指定
は0
日にしてください。
コンプライアンスレポート
は中
にしてください。
セキュリティ以外の更新を含める
はチェックしてください。
パッチの例外
セクションの入力を行います。
拒否されたパッチ
にsystem-release.*
を入力してください。これにより、リリースする前にPatch Managerがサポートできない可能性がある新しいAmazon Linuxへのパッチを拒否することができます。
以上、入力が終わったら画面最下部のパッチベースラインを作成する
ボタンをクリックしてください。
パッチベースラインの一覧画面に遷移します。作成したベースラインが表示されていることを確認してください。
Patch Groups
Patch Managerにはパッチグループという概念があります。パッチを適用するインスタンスをグループ化するものです。
パッチグループをパッチベースラインに関連付けることでパッチグループに属するインスタンスにベースラインで定義したルールでパッチを適用することができます。
パッチグループはインスタンスにタグを付与することで作成できます。
タグキーにPatch Group
、値に任意の文字列、例えば、dev
などを指定します。
注意点は、1つのインスタンスは1つのバッチグループにしか属することができません。また、1つのパッチグループを複数のパッチベースラインに関連付けできますが、OSごとに1つまでです。
5.2 Assign a Patch Group
パッチベースラインの一覧画面で先ほど作成したベースラインAmazonLinuxSecAndNonSecBaseline
を検索し、ベースラインID
リンクをクリックします。
※ハンズオン記載では、右上にアクション
ボタンがあり、そこからベースラインに割り当てるパッチグループを選択する手順が記載されているが、アクション
ボタンが見つからなかった。
調べたところ、こちらのページに対処方法が記載されていた。以下Deepl翻訳。
今回はAWS CLIを使用する方法で行う。推奨方法はパッチポリシーを使用する方法であるため、ハンズオンとやり方が異なるからです。
Baseline IDの詳細ページにActionsメニューがない場合、コンソールでパッチグループを設定することはできません。代わりに、以下のどちらかを行うことができます:
(推奨)AWS Systems Managerの機能であるQuick Setupでパッチポリシーを設定し、パッチベースラインを1つ以上のEC2インスタンスにマッピングする。
詳細については、Quick Setupパッチポリシーの使用とQuick Setupパッチポリシーを使用した組織全体のパッチの自動化を参照してください。
パッチグループを構成するには、AWSコマンドラインインターフェイス(AWS CLI)のregister-patch-baseline-for-patch-groupコマンドを使用する。
register-patch-baseline-for-patch-group
コマンドのドキュメントはこちらです。
baseline-id
は今回作成したパッチベースラインのベースラインIDを指定します。
patch-group
はパッチグループ名を指定します。今回のハンズオンではCritical
を指定します。
CloudShellで実行します。
aws ssm register-patch-baseline-for-patch-group --baseline-id <ベースラインID> --patch-group <パッチグループ名>
パッチベースラインの一覧を再度表示すると一覧にデフォルトのベースライン
列が表示されました。
また、作成したパッチベースラインの詳細画面を表示するとアクション
ボタンが追加で表示されていることもわかりました。
当該ベースラインの説明
セクションのパッチグループ
がCritical
になっていることを確認してください。
AWS-RunPatchBaseline
AWS-RunPatchBaseline
は、SSMドキュメントの一つであり、マネージドインスタンスにセキュリティ関連およびその他アップデートを実行します。
パッチのコンプライアンス情報もレポートし、Systems Managerのコンプライアンス機能で結果を確認することができます。
例えば、バッチが不足しているインスタンスと不足しているパッチを確認できます。
AWS Systems Manager: Document
Systems Managerにはドキュメント(SSMドキュメント)という概念があります。これはSystems Managerがマネージドインスタンスに対して実行するアクションを定義するものです。
前述のAWS-RunPatchBaseline
は事前設定済みドキュメントであり、これらはその他たくさん用意されています。
ドキュメントはJsonまたはYamlで記載されており、実行するアクションやパラメータが定義されています。
5.3 Examine AWS-RunPatchBaseline in Documents
Systems MangerのTOP画面の左メニュードキュメント
を選択します。
検索窓を選択し、ドキュメント名のプレフィックス
、Equals
を選択し、AWS-Run
と入力し、エンターキーを押下してください。
AWS-RunPatchBaseline
が検索されているので、そのリンクをクリックしてください。
ドキュメントの詳細画面が表示されます。
説明
タブではドキュメントのメタ情報、コンテンツ
にはドキュメントの実体(Json、Yaml)などが表示されます。
AWS Systems Manager: Run Command
Systems ManagerにはRun Command
という機能があります。これはマネージドインスタンスの構成をリモートで管理できる機能です。
マネージドインスタンスに対する定期的(またはアドホック)な構成変更をインスタンスにログインせずに実行することができます。
5.4 Scan Your Instances with AWS-RunPatchBaseline via Run Command
Systems ManagerのTOP画面左メニューRun Command
を選択し、右上Run command
ボタンをクリックします。
コマンドドキュメント
セクションの検索窓を選択し、プラットフォームの種類
でLinux
を選択後、エンターキーを押下してください。
検索窓に続いてAWS-RunPatchBaseline
と入力し、エンターキーを押下してください。
一覧にAWS-RunPatchBaseline
が表示されるのでチェックしてください。
次にコマンドのパラメータ
セクションの入力です。
Operation
はScan
にし、それ以外はデフォルトで構いません。
次にターゲット
セクションの入力です。
ターゲット
はインスタンスタグの指定
を選択し、インスタンスタグの指定
ではタグキー
にWorkload
、タグの値
にTest
を入力し、Add
ボタンをクリックしてください。
以降の設定は今回不要です。
画面右下の実行
ボタンをクリックしてください。
Run Command
のTOP画面でコマンド履歴
タブを選択すると、実行したコマンドの結果を確認できます。
今回Workload
タグにTest
を指定したのでターゲットとなるマネージドインスタンスは4つになっていることがわかります。
コマンドID
リンクをクリックするとコマンド実行結果の詳細を確認することができます。
5.5 Review Initial Patch Compliance
Systems ManagerのTOP画面左メニューコンプライアンス
を選択します。
ダッシュボードの結果をグループ化する条件
はコンプライアンスタイプ
を選択すると、コンプライアンスリソースの概要
セクションに非準拠リソース
が4
と表示されるのでそれを選択します。
リソース
セクションに非準拠リソース
と判断されているマネージドインスタンスが表示されていることを確認します。
5.6 Patch Your Instances with AWS-RunPatchBaseline via Run Command
Systems ManagerのTOP画面左メニューRun Command
を選択し、右上Run command
ボタンをクリックします。
コマンドドキュメント
セクションの検索窓を選択し、プラットフォームの種類
でLinux
を選択後、エンターキーを押下してください。
検索窓に続いてAWS-RunPatchBaseline
と入力し、エンターキーを押下してください。
一覧にAWS-RunPatchBaseline
が表示されるのでチェックしてください。
次にコマンドのパラメータ
セクションの入力です。
Operation
はInstall
にし、それ以外はデフォルトで構いません。
次にターゲット
セクションの入力です。
ターゲット
はインスタンスタグの指定
を選択し、インスタンスタグの指定
ではタグキー
にWorkload
、タグの値
にTest
を入力し、Add
ボタンをクリックしてください。
次にレート制御
セクションの入力です。
同時実行数
はターゲット
を選択し、1
を入力してください。
エラーのしきい値
はエラー
を選択し、1
を入力してください。
画面右下の実行
ボタンをクリックしてください。
コマンドの詳細画面に遷移するので、全体的なステータス
が成功
または失敗
になるまで待ちます。
5.7 Review Patch Compliance After Patching
先ほど実行したコマンドは4つのインスタンスに対して実行され、全体的なステータス
は失敗
に終わりました。
インスタンス毎の結果を一覧から確認すると詳細なステータス
が失敗
のものと終了済み
のものがありました。
インスタンスIDのリンクをクリックすると、実行したドキュメントのステップ毎の結果が表示されます。
詳細なステータス
が失敗
のものは最初のステップが成功し、以降は失敗しているようです。
終了済み
のものは何も表示されませんでした。Run Command
のエラーのしきい値
を超えたため、コマンドが実行されなかったからだと思われます。
コンプライアンス
画面に戻り結果を確認してみましょう。
コンプライアンスリソースの概要
セクションの非準拠リソース
が4から2になっており、準拠リソース
が2に増えていることがわかります。
準拠リソース
の数値を選択し、リソース
セクションを確認すると、Run Command
で詳細なステータス
が失敗
で終わったインスタンスが表示されていました。
最初のステップが成功した結果、当該インスタンスが非準拠リソース
から準拠リソース
になったことがわかります。
The Impact of Operations as Code
Run Command
の実行は失敗してしまいましたが、Patch Managerなどの機能を使用すると大量のインスタンスに対して簡単に構成変更をスケジュールさせることができるとわかりました。
運用手順書などはJsonやYamlのコードに置き換わり、自動化されることでヒューマンエラーのリスクも無くなります。
運用がより楽になり本当に注力すべき作業に時間を費やすことができます。
Creating Maintenance Windows and Scheduling Automated Operations Activities
AWS Systems Manager: Maintenance Windows
Systems Managerにはメンテナンスウィンドウ
という機能があります。これはOSのバッチ適用、ドライバの更新やソフトウェアのインストールなどをインスタンスに対して実施するスケジュールを定義する機能です。
メンテナンスウィンドウには、スケジュール、ターゲット、タスクといった要素が存在します。
スケジュールは文字通り、いつタスクを実行するかを指定します。
ターゲットはタスクを実行する対象であり、マネージドインスタンスを指定します。
タスクは実行するアクションを指します。Run Command
のコマンド、オートメーション
のワークフロー、Lambda関数やStep Functionsのステートマシンなどを実行することができます。
6.1 Setting up Maintenance Windows
Systems Managerがメンテナンスウィンドウのタスクを実行できるようにするIAMロールを作成します。
IAMのダッシュボード左メニューロール
を選択し、右上ロールを作成
ボタンをクリックしてください。
信頼されたエンティティタイプ
はAWSのサービス
を選択してください。
ユースケース
はEC2
を選択してください。
右下の次へ
ボタンをクリックしてください。
検索窓にAmazonSSMMaintenanceWindowRole
と入力し、エンターキーを押下してください。
表示されたAmazonSSMMaintenanceWindowRole
をチェックし、右下次へ
ボタンをクリックしてください。
ロール名
は自由ですが、今回はSSMMaintenanceWindowRole
にします。
説明
は自由ですが、今回はRole for Amazon SSMMaintenanceWindow
にします。
それ以外は後で書き換えるものもありますが、デフォルトにし、右下ロールの作成
ボタンをクリックしてください。
作成したIAMロールを選択し、詳細画面に遷移してください。
信頼関係
タブを選択し、信頼ポリシーを編集
ボタンをクリックしてください。
Jsonを以下に書き換えてください。
このIAMロールに付与されているIAMポリシーを行使するサービスとしてEC2、Systems Manager、SNSを指定します。
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"",
"Effect":"Allow",
"Principal":{
"Service":[
"ec2.amazonaws.com",
"ssm.amazonaws.com",
"sns.amazonaws.com"
]
},
"Action":"sts:AssumeRole"
}
]
}
書き換えたら右下ポリシーを更新
ボタンをクリックしてください。
続いて、IAM PassRoleポリシーを作成し、IAMユーザーに割り当てます。
メンテナンスウィンドウにタスクを登録する際、前手順で作成したIAMロールをアタッチする必要があります。
当該IAMロールをタスクにアタッチをする
という権限をIAMユーザーに付与するため、これら手順を実施します。
IAMのダッシュボード左メニューポリシー
を選択し、右上ポリシーを作成
ボタンをクリックしてください。
IAMポリシーの情報を入力していきます。
サービスを選択
はIAM
を選択してください。
アクション許可
は検索窓にPassRole
と入力し、表示されたPassRole
をチェックしてください。
続いてリソース
は特定
を選択した状態で、ARNを追加
リンクをクリックしてください。
ダイアログ内のテキスト
タブをクリックし、先ほど作成したIAMロールのARNを貼り付けてください。
右下ARNを追加
ボタンをクリックしてください。
ここまで入力したら、画面右下次へ
ボタンをクリックしてください。
ポリシー名
は自由ですが、今回はSSMMaintenanceWindowPassRole
にします。
入力したら画面右下ポリシーの作成
ボタンをクリックしてください。
作成したIAMポリシーをIAMグループに割り当てます。
IAMのダッシュボード左メニューユーザーグループ
を選択し、許可を追加
、ポリシーをアタッチ
をクリックしてください。
検索窓にSSMMaintenanceWindowPassRole
と入力し、検索されたSSMMaintenanceWindowPassRole
をチェックしてください。
右下許可を追加
ボタンをクリックしてください。
Creating Maintenance Windows
メンテナンスウィンドウ作成から実行までは以下の手順を実行します。
- メンテナンスウィンドウを作成し、スケジュールを定義する
- メンテナンスウィンドウのターゲットを割り当てる
- メンテナンスウィンドウ中に実行するタスクを割り当てる
6.2 Create a Patch Maintenance Window
メンテナンスウィンドウを作成し、スケジュールを定義します。
Systems MangerのTOP画面の左メニューメンテナンスウィンドウ
を選択し、右上Create Maintenance Window
ボタンをクリックします。
メンテナンスウィンドウの詳細の入力
セクションの入力です。
名前
は自由ですが、今回はPatchTestWorkloadWebServers
とします。
説明
は今回未入力です。
未登録ターゲット
は未登録ターゲットを許可する
をチェックしてください。
スケジュール
セクションの入力です。今回はハンズオンであるため、なるべく早くメンテナンスウィンドウが実行されるよう設定します。
次で指定
はCronスケジュールビルダー
でデフォルト
を選択してください。
期間
は1
時間を入力してください。
タスクの開始を停止する
は0
を入力してください。
入力が終わったら画面最下部のメンテナンスウィンドウの作成
ボタンをクリックしてください。
6.3 Assigning Targets to Your Patch Maintenance Window
続いて、メンテナンスウィンドウにタスクを実行するターゲットを割り当てます。
作成したメンテナンスウィンドウのウィンドウID
リンクをクリックしてください。
メンテナンスウィンドウの詳細画面に遷移します。
右上アクション
を選択し、ターゲットの登録
をクリックしてください。
Maintenance window target details
セクションの入力です。
Target name
は任意ですが、今回はTestWebServers
とします。
Description
、Owner Information
は今回未入力です。
ターゲット
セクションの入力です。
ターゲットの選択
はインスタンスタグを指定
を選択してください。
インスタンスタグを指定
はタグキー
がWorkload
、タグの値
はTest
にし、Add
ボタンをクリックしてください。
再度インスタンスタグを指定
でタグキー
がInstanceRole
、タグの値
はWebServer
にし、Add
ボタンをクリックしてください。
入力が終わったら画面最下部のRegister target
ボタンをクリックしてください。
6.4 Assigning Tasks to Your Patch Maintenance Window
最後に、メンテナンスウィンドウ中に実行するタスクを割り当てます。
メンテナンスウィンドウの詳細画面右上アクション
を選択し、Run Commandタスクの登録
を選択してください。
メンテナンスウィンドウタスクの詳細
セクションの入力です。
名前
は任意ですが、今回はPatchTestWorkloadWebServers
と入力します。
説明
は未入力、New task invocation cutoff
はチェックしなくて構いません。
コマンドドキュメント
セクションの入力です。
ドキュメント
は検索窓を選択し、プラットフォームの種類
をLinux
にしてください。
また、AWS-RunPatchBaseline
と入力し、エンターキーを押下し、表示されたAWS-RunPatchBaseline
をチェックしてください。
ドキュメントのバージョン
、タスクの優先度
はデフォルト値で構いません。
ターゲット
セクションの入力です。
次によるターゲット
は登録済みターゲットグループの選択
を選択してください。
一覧に表示されている作成したグループをチェックしてください。
レート制御
セクションの入力です。
同時実行数
はターゲット
で1
を入力してください。
エラーのしきい値
はエラー
で1
を入力してください。
IAMサービスロール
セクションの入力です。
メンテナンスウィンドウがタスクを実行するためにAmazonSSMMaintenanceWindowRole
ポリシーを持っているIAMロールを指定します。
前手順で作成した、SSMMaintenanceWindowRole
を指定します。
出力オプション
セクション、SNS通知
セクションはデフォルト(すべてチェックしない)で構いません。
パタメータ
セクションの入力です。
Operation
はInstall
を選択してください。
それ以外はデフォルトで構いません。
続くCloudWatch alarm
セクションも未選択で構いません。
Run Commandタスクの登録
ボタンをクリックしてください。
6.5 Review Maintenance Window Execution
タスクの実行結果を確認します。
メンテナンスウィンドウの詳細画面に遷移し、履歴
タブを選択してください。
直近の実行結果をチェックし、詳細の表示
ボタンをクリックしてください。
タスク呼び出し
セクションでタスクの実行概要を確認できます。
チェックし、詳細の表示
ボタンをクリックしてください。
Run Command
機能の画面に遷移し、より詳細な情報を確認することができます。
今回はタスクに失敗してしまいましたが、メンテナンスウィンドウにより、Run Command
などが自動実行できることがわかりました。
Creating a Simple Notification Service Topic
Amazon Simple Notification Service (Amazon SNS)は、クライアントに対するメッセージの配信および送信を管理するフルマネージドメッセージングサービスです。
機能として、モバイルPUSH通知
、Pub/Subメッセージング
があります。
モバイルPUSH通知
機能は、スマートフォンに対して通知ができる機能です。ユーザーのモバイル端末などに直接通知を送信することができます。
Pub/Subメッセージング
機能は、非同期的はメッセージ配信モデルです。Publisherと呼ばれるメッセージ送信元がSNSで管理しているTopicと呼ばれる論理的アクセスポイントにメッセージを送信します。Subscriberと呼ばれるメッセージ受信者は好きなTopicを購読するよう設定しておくと、Topicからメッセージが配信され、メッセージを受信することができます。
6.1 Create and Subscribe to an SNS Topic
Amazon SNSのダッシュボード画面に遷移し、左メニュートピック
を選択します。
右上トピックの作成
ボタンをクリックしてください。
詳細
セクションの入力です。
タイプ
はスタンダード
を選択してください。
名前
、表示名
はAdminAlert
と入力してください。
それ以外は入力不要です。画面最下部のトピックの作成
ボタンをクリックしてください。
作成したトピックの詳細画面が表示されます。
サブスクリプション
セクションのサブスクリプションの作成
ボタンをクリックしてください。
サブスクリプションの情報を入力します。
トピックARN
はデフォルトの先ほど作成したトピックのARNを指定します。
プロトコル
はEメール
を選択してください。
エンドポイント
は受信可能なEメールアドレスを入力してください。
入力し終えたら、右下サブスクリプションの作成
ボタンをクリックしてください。
エンドポイント
に指定したEメールアドレスに確認メールが届きます。
リンクConfirm subscription
をクリックしてください。
以下のような画面が表示されたら購読設定完了です。
購読解除する際はリンクclick here to unsubscribe.
をクリックしてください。
メッセージが受信できるか確認してみましょう。
トピックの詳細画面に戻り、画面右上メッセージの発行
ボタンをクリックしてください。
送信するメッセージの内容を入力する画面が表示されます。
件名
はTest
にしてください。
メッセージ構造
はデフォルトすべての配信プロトコルに同一のペイロード。
を選択してください。
エンドポイントに送信するメッセージ本文
はHello World!
にしてください。
入力したら、右下メッセージの発行
ボタンをクリックしてください。
エンドポイントに指定したEメールアドレスにメッセージが送信されることを確認してください。
Removing Lab Resources
7.1 Remove resources created with CloudFormation
削除するリソースの箇条書き
- CloudFormationのスタック
- Systems Managerのステートマネージャーの関連付け
- S3バケット(
cf-templates-
から始まるバケット) - SNSトピック
- SNSサブスクリプション
- Systems Managerのメンテナンスウィンドウ
- EC2 キーペア
- IAMロール
- IAMポリシー
- IAMユーザー(不要なら)
詳細は以下を参照ください。