メニュー
Amazon EC2 Systems Manager
ユーザーガイド

Systems Manager インベントリマネージャーのウォークスルー

以下のウォークスルーを使用してインベントリデータを管理します。最初にこのウォークスルーをテスト環境のマネージドインスタンスで実行することをお勧めします。

カスタムインベントリメタデータをインスタンスに割り当てる

以下の手順では、PutInventory API アクションを使用して、マネージドインスタンスにカスタムインベントリメタデータを割り当てるプロセスについて説明します。この例では、ラックの場所情報をインスタンスに割り当てます。カスタムインベントリの詳細については、「カスタムインベントリの操作」を参照してください。

カスタムインベントリメタデータをインスタンスに割り当てるには

  1. 最新バージョンの AWS CLI をローカルマシンにダウンロードします。

  2. AWS CLI を開いて次のコマンドを実行し、認証情報とリージョンを指定します。Amazon EC2 で管理者権限を持っているか、AWS Identity and Access Management (IAM) で適切なアクセス権限を付与されている必要があります。

    Copy
    aws configure

    以下を指定するよう求められます。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  3. 以下のコマンドを実行して、インスタンスにラックの場所情報を割り当てます。

    Copy
    aws ssm put-inventory --instance-id "ID" --items '[{"CaptureTime": "2016-08-22T10:01:01Z", "TypeName": "Custom:RackInfo", "Content":[{"RackLocation": "Bay B/Row C/Rack D/Shelf E"}], "SchemaVersion": "1.0"}]'
  4. 以下のコマンドを実行して、このインスタンスのカスタムインベントリエントリを表示します。

    Copy
    aws ssm list-inventory-entries --instance-id ID --type-name "Custom:RackInfo"

    システムから以下のような情報が返されます。

    Copy
    { "InstanceId": "ID", "TypeName": "Custom:RackInfo", "Entries": [ { "RackLocation": "Bay B/Row C/Rack D/Shelf E" } ], "SchemaVersion": "1.0", "CaptureTime": "2016-08-22T10:01:01Z" }
  5. 以下のコマンドを実行して、カスタムメタデータを表示します。

    Copy
    aws ssm get-inventory

    システムから以下のような情報が返されます。

    Copy
    { "Entities": [ { "Data": { "AWS:InstanceInformation": { "Content": [ { "ComputerName": "WIN-9JHCEPEGORG.WORKGROUP", "InstanceId": "ID", "ResourceType": "EC2Instance", "AgentVersion": "3.19.1153", "PlatformVersion": "6.3.9600", "PlatformName": "Windows Server 2012 R2 Standard", "PlatformType": "Windows" } ], "TypeName": "AWS:InstanceInformation", "SchemaVersion": "1.0" } }, "Id": "ID" } ] }

AWS CLI を使用してインベントリを収集する

以下の手順では、Amazon EC2 インスタンスから Inventory を使用してメタデータを収集するプロセスについて説明します。インベントリ収集の設定を開始するには、Systems Manager ステートマネージャーの関連付けを作成します。関連付けが実行されると、Systems Manager はインベントリデータを収集します。最初に関連付けを作成せずに、aws:softwareInventory プラグインを呼び出そうとすると (例: Run Command を使用)、システムは次のエラーを返します。

The aws:softwareInventory plugin can only be invoked via ssm-associate

注記

インスタンスには、一度に 1 つのインベントリのみ関連付けることができます。インスタンスに 2 つ以上インベントリの関連付けを設定した場合、その関連付けは実行されず、インベントリデータは収集されません。

インスタンスからインベントリを収集するには

  1. 最新バージョンの AWS CLI をローカルマシンにダウンロードします。

  2. AWS CLI を開いて次のコマンドを実行し、認証情報とリージョンを指定します。Amazon EC2 で管理者権限を持っているか、AWS Identity and Access Management (IAM) で適切なアクセス権限を付与されている必要があります。

    Copy
    aws configure

    以下を指定するよう求められます。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  3. 以下のコマンドを実行して、インスタンスで Inventory を実行する ステートマネージャー の関連付けを作成します。このコマンドは、サービスを 6 時間ごとに実行し、インスタンスからネットワーク設定、Windows 更新プログラム、アプリケーションメタデータを収集するように設定します。

    Copy
    aws ssm create-association --name "AWS-GatherSoftwareInventory" --targets "Key=instanceids,Values=an instance ID" --schedule-expression "cron(0 0/30 * 1/1 * ? *)" --output-location "{ \"S3Location\": { \"OutputS3Region\": \"us-east-1\", \"OutputS3BucketName\": \"Test bucket\", \"OutputS3KeyPrefix\": \"Test\" } }" --parameters "networkConfig=Enabled,windowsUpdates=Enabled,applications=Enabled"

    システムから以下のような情報が返されます。

    Copy
    { "AssociationDescription": { "ScheduleExpression": "cron(0 0/30 * 1/1 * ? *)", "OutputLocation": { "S3Location": { "OutputS3KeyPrefix": "Test", "OutputS3BucketName": "Test bucket", "OutputS3Region": "us-east-1" } }, "Name": "The name you specified", "Parameters": { "applications": [ "Enabled" ], "networkConfig": [ "Enabled" ], "windowsUpdates": [ "Enabled" ] }, "Overview": { "Status": "Pending", "DetailedStatus": "Creating" }, "AssociationId": "1a2b3c4d5e6f7g-1a2b3c-1a2b3c-1a2b3c-1a2b3c4d5e6f7g", "DocumentVersion": "$DEFAULT", "LastUpdateAssociationDate": 1480544990.06, "Date": 1480544990.06, "Targets": [ { "Values": [ "i-1a2b3c4d5e6f7g" ], "Key": "InstanceIds" } ] } }

    EC2 タグで Targets パラメータを使用することで、インスタンスの大規模なグループを対象にすることができます。

    Copy
    aws ssm create-association --name "AWS-GatherSoftwareInventory" --targets "Key=tag:Environment,Values=Production" --schedule-expression "cron(0 0/30 * 1/1 * ? *)" --output-location "{ \"S3Location\": { \"OutputS3Region\": \"us-east-1\", \"OutputS3BucketName\": \"Test bucket\", \"OutputS3KeyPrefix\": \"Test\" } }" --parameters "networkConfig=Enabled,windowsUpdates=Enabled,applications=Enabled"
  4. 以下のコマンドを実行して、関連付けステータスを表示します。

    Copy
    aws ssm describe-instance-associations-status --instance-id an instance ID

    システムから以下のような情報が返されます。

    Copy
    { "InstanceAssociationStatusInfos": [ { "Status": "Pending", "DetailedStatus": "Associated", "Name": "reInvent2016PolicyDocumentTest", "InstanceId": "i-1a2b3c4d5e6f7g", "AssociationId": "1a2b3c4d5e6f7g-1a2b3c-1a2b3c-1a2b3c-1a2b3c4d5e6f7g", "DocumentVersion": "1" } ] }

リソースデータの同期を使用してインベントリデータを集約する

次の手順に従って、AWS CLI コンソールを使用してインベントリのリソースデータの同期を作成します。リソースデータの同期は、すべてのマネージドインスタンスからのインベントリデータを中央 Amazon S3 バケットに自動的にポートします。新しいインベントリデータが検出されるたびに、同期は中央 Amazon S3 バケットを自動的に更新します。このウォークスルーでは、Amazon Athena および Amazon QuickSight を使用して集約されたデータをクエリおよび分析する方法についても説明します。Amazon EC2 コンソールを使用したリソースデータの同期の作成については、「インベントリのリソースデータの同期の設定」を参照してください。

注記

このチュートリアルには、AWS Key Management Service (AWS KMS) を使用して同期を暗号化する方法に関する情報が含まれています。インベントリではユーザー固有、独自、または重要なデータが収集されないため、暗号化はオプションです。AWS KMS の詳細については、AWS Key Management Service Developer Guide を参照してください。

開始する前に

ウォークスルーを開始する前に、マネージドインスタンスからインベントリメタデータを収集する必要があります。このウォークスルーの Amazon Athena および Amazon QuickSight セクションのために、アプリケーションメタデータを収集することをお勧めします。インベントリデータ収集方法の詳細については、「AWS CLI を使用してインベントリを収集する」を参照してください。

(オプション) AWS KMS を使用して同期を暗号化する場合は、次のポリシーを含む新しいキーを作成するか、既存のキーを更新してこのポリシーを追加する必要があります。

Copy
{ "Version":"2012-10-17", "Id":"ssm-access-policy", "Statement":[ { "Sid":"ssm-access-policy-statement", "Action":[ "kms:GenerateDataKey" ], "Effect":"Allow", "Principal":{ "Service":"ssm.amazonaws.com" }, "Resource":"arn:aws:kms:region:AWS-account-ID:key/KMS-key-id" } ] }

インベントリのリソースデータの同期を作成するには

  1. Open the Amazon S3 console at https://console.aws.amazon.com/s3/.

  2. 集計されたインベントリデータを保存するバケットを作成します。詳細については、Amazon Simple Storage Service Getting Started Guide の「バケットの作成」を参照してください。バケット名とそれを作成した AWS リージョンをメモしておきます。

  3. バケットを作成した後、[Permissions] タブを選択し、[Bucket Policy] を選択します。

  4. 次のバケットポリシーをコピーし、ポリシーエディタに貼り付けます。Bucket-NameAccount-ID を、作成した Amazon S3 バケットの名前と有効な AWS アカウント ID に置き換えます。任意で、Bucket-Prefix を Amazon S3 プレフィックス (サブディレクトリ) に置き換えます。プレフィックスを作成しなかった場合は、Bucket-Prefix/ をこのポリシーの ARN から削除します。

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Sid": "SSMBucketPermissionsCheck", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::Bucket-Name" }, { "Sid": " SSMBucketDelivery", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "s3:PutObject", "Resource": ["arn:aws:s3:::Bucket-Name/Bucket-Prefix/*/accountid=Account-ID/*"], "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
  5. (オプション) 同期を暗号化する場合は、バケットに次のポリシーを追加する必要があります。前のステップを繰り返して次のポリシーをバケットに追加します。

    Copy
    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"ssm.amazonaws.com" }, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::bucket-name/prefix/*", "Condition":{ "StringEquals":{ "s3:x-amz-server-side-encryption":"aws:kms", "s3:x-amz-server-side-encryption-aws-kms-key-id":"arn:aws:kms:region:AWS-account-ID:key/KMS-key-ID" } } } ] }
  6. 最新バージョンの AWS CLI をローカルマシンにダウンロードします。

  7. AWS CLI を開いて次のコマンドを実行し、認証情報とリージョンを指定します。Amazon EC2 で管理者権限を持っているか、AWS Identity and Access Management (IAM) で適切なアクセス権限を付与されている必要があります。

    Copy
    aws configure

    以下を指定するよう求められます。

    Copy
    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  8. (オプション) 同期を暗号化する場合は、次のコマンドを実行して、バケットポリシーが KMS のキー要件を適用していることを確認します。

    Copy
    aws s3 cp ./A file in the bucket s3://bucket-name/prefix/ --sse aws:kms --sse-kms-key-id "arn:aws:kms:region:AWS-account-ID:key/KMS-key-id" --region region
  9. 次のコマンドを実行して、この手順の最初に作成した Amazon S3 バケットを使用したリソースデータの同期設定を作成します。このコマンドは、現在ログインしている AWS リージョンからの同期を作成します。

    注記

    同期とターゲット Amazon S3 バケットが異なるリージョンにある場合、データ転送料金がかかる場合があります。詳細については、「Amazon S3 料金表」を参照してください。

    Copy
    aws ssm create-resource-data-sync --sync-name a name --s3-destination "BucketName=the name of the S3 bucket,Prefix=the name of the prefix, if specified,SyncFormat=JsonSerDe,Region=the region where the S3 bucket was created"

    region パラメータを使用して、同期設定をどこに作成するかを指定します。次の例では、us-west-1 リージョンからのインベントリデータが us-west-2 リージョンの Amazon S3 バケットに同期されます。

    Copy
    aws ssm create-resource-data-sync --sync-name InventoryDataWest --s3-destination "BucketName=InventoryData,Prefix=HybridEnv,SyncFormat=JsonSerDe,Region=us-west-2" --region us-west-1

    (オプション) AWS KMS を使用して同期を暗号化する場合は、次のコマンドを実行して同期を作成します。同期を暗号化する場合、AWS KMS キーおよび Amazon S3 バケットが同じリージョンにある必要があります。

    Copy
    aws ssm create-resource-data-sync --sync-name sync-name --s3-destination "BucketName=bucket-name,Prefix=prefix,SyncFormat=JsonSerDe,AWSKMSKeyARN=arn:aws:kms:region:AWS-account-ID:key/KMS-key-id,Region=bucket-region" --region region
  10. 以下のコマンドを実行して、同期設定のステータスを表示します。

    Copy
    aws ssm list-resource-data-sync

    別のリージョンに同期設定を作成する場合は、次の例のように region パラメータを指定する必要があります。

    Copy
    aws ssm list-resource-data-sync --region us-west-1
  11. 同期設定が正常に作成されたら、Amazon S3 のターゲットバケットを参照します。インベントリデータが数分で表示されます。

Amazon Athena でデータを使用する

以下のセクションでは、Amazon Athena でデータをクエリおよび表示する方法について説明します。

Amazon Athena でデータを表示およびクエリするには

  1. Amazon Athena コンソールで、次のステートメントをクエリエディタにコピーして貼り付け、[Run Query] を選択します。

    Copy
    CREATE DATABASE ssminventory

    システムによって、ssminventory というデータベースが作成されます。

  2. 次のステートメントをクエリエディタにコピーして貼り付け、[Run Query] を選択します。Bucket-Name および Bucket-Prefix を Amazon S3 ターゲットの名前およびプレフィックスに置き換えます。

    Copy
    CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_Application ( `ResourceId` string, `Name` string, `ApplicationType` string, `Publisher` string, `Version` string, `InstalledTime` string, `Architecture` string, `URL` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://Bucket-Name/Bucket-Prefix/AWS:Application/'

    システムによってアプリケーションインベントリタイプのパーティション情報を含むテーブルが作成されます。

  3. 次のステートメントをクエリエディタにコピーして貼り付け、[Run Query] を選択します。

    Copy
    MSCK REPAIR TABLE ssminventory.AWS_Application

    システムによってテーブルが分割されます。

    注記

    他の AWS リージョンまたはアカウントからリソースデータの同期を作成する場合、このコマンドを再度実行してパーティションを更新する必要があります。また、Amazon S3 バケットポリシーも更新する必要があります。

  4. データを確認するには、AWS_Application テーブルの横の表示アイコンを選択します。

     alt-text
  5. 次のステートメントをクエリエディタにコピーして貼り付け、[Run Query] を選択します。

    Copy
    SELECT a.name, a.version, count( a.version) frequency from aws_application a where a.name = 'aws-cfn-bootstrap' group by a.name, a.version order by frequency desc

    クエリは aws-cfn-bootstrap の異なるバージョンの数を返します。これは Amazon EC2 Linux および Windows インスタンスに存在する AWS アプリケーションです。

  6. 以下のステートメントを個別にコピーしてクエリエディタに張り付け、Bucket-Name および Bucket-Prefix を Amazon S3 の情報に置き換えて、[Run Query] を選択します。これらのステートメントは Athena に追加インベントリテーブルを設定します。

    Copy
    CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_AWSComponent ( `ResourceId` string, `Name` string, `ApplicationType` string, `Publisher` string, `Version` string, `InstalledTime` string, `Architecture` string, `URL` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://Bucket-Name/Bucket-Prefix/AWS:AWSComponent/' MSCK REPAIR TABLE ssminventory.AWS_AWSComponent
    Copy
    CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_WindowsUpdate ( `ResourceId` string, `HotFixId` string, `Description` string, `InstalledTime` string, `InstalledBy` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://Bucket-Name/Bucket-Prefix/AWS:WindowsUpdate/' MSCK REPAIR TABLE ssminventory.AWS_WindowsUpdate
    Copy
    CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_InstanceInformation ( `AgentType` string, `AgentVersion` string, `ComputerName` string, `IamRole` string, `InstanceId` string, `IpAddress` string, `PlatformName` string, `PlatformType` string, `PlatformVersion` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://Bucket-Name/Bucket-Prefix/AWS:InstanceInformation/' MSCK REPAIR TABLE ssminventory.AWS_InstanceInformation
    Copy
    CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_Network ( `ResourceId` string, `Name` string, `SubnetMask` string, `Gateway` string, `DHCPServer` string, `DNSServer` string, `MacAddress` string, `IPV4` string, `IPV6` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://Bucket-Name/Bucket-Prefix/AWS:Network/' MSCK REPAIR TABLE ssminventory.AWS_Network
    Copy
    CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_PatchCompliance ( `ResourceId` string, `Title` string, `KBId` string, `Classification` string, `Severity` string, `State` string, `InstalledTime` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://Bucket-Name/Bucket-Prefix/AWS:PatchCompliance/' MSCK REPAIR TABLE ssminventory.AWS_PatchCompliance
    Copy
    CREATE EXTERNAL TABLE IF NOT EXISTS ssminventory.AWS_PatchSummary ( `ResourceId` string, `PatchGroup` string, `BaselineId` string, `SnapshotId` string, `OwnerInformation` string, `InstalledCount` int, `InstalledOtherCount` int, `NotApplicableCount` int, `MissingCount` int, `FailedCount` int, `OperationType` string, `OperationStartTime` string, `OperationEndTime` string ) PARTITIONED BY (AccountId string, Region string, ResourceType string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1' ) LOCATION 's3://Bucket-Name/Bucket-Prefix/AWS:PatchSummary/' MSCK REPAIR TABLE ssminventory.AWS_PatchSummary

Amazon QuickSight でデータを使用する

以下のセクションでは、Amazon QuickSight で視覚化を構築するためのリンクの概要を説明します。

Amazon QuickSight で視覚化を構築するには

  1. Amazon QuickSight にサインアップして、QuickSight コンソールにログインします。

  2. AWS_Application テーブルおよび作成済みの他のテーブルからのデータセットを作成します。詳細については、「Amazon Athena データを使用したデータセットの作成」を参照してください。

  3. テーブルを結合します。たとえば、AWS_InstanceInformationinstanceid 列は、他のインベントリテーブルの resourceid 列と一致するため、結合できます。テーブルの結合に関する詳細については、「テーブルの結合」を参照してください。

  4. 視覚化を構築します。詳細については、「Working with Amazon QuickSight Visuals」を参照してください。