

• AWS Systems Manager CloudWatch ダッシュボードは、2026 年 4 月 30 日以降は利用できなくなります。お客様は、これまでと同様に Amazon CloudWatch コンソールを使用して、Amazon CloudWatch ダッシュボードの表示、作成、管理を継続できます。詳細については、「[Amazon CloudWatch ダッシュボードのドキュメント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)」を参照してください。

# チュートリアル: リソースデータの同期を使用してインベントリデータを集計する
<a name="inventory-resource-data-sync"></a>

次のチュートリアルでは、AWS Command Line Interface (AWS CLI) を使用して AWS Systems Manager インベントリのリソースデータ同期設定を作成する方法について説明します。リソースデータ同期では、すべてのマネージドノードから中央 Amazon Simple Storage Service (Amazon S3) バケットにインベントリデータが自動的にポートされます。新しいインベントリデータが検出されるたびに、同期は中央 Amazon S3 バケットを自動的に更新します。

このチュートリアルでは、Amazon Athena と Amazon Quick を使用して、集計されたデータをクエリおよび分析する方法についても説明します。AWS マネジメントコンソール で Systems Manager を使用してリソースデータ同期を作成する方法については、「[チュートリアル: リソースデータの同期を使用してインベントリデータを集計する](#inventory-resource-data-sync)」を参照してください。AWS マネジメントコンソール で Systems Manager を使用した複数の AWS リージョン とアカウントからのインベントリのクエリについては、「[複数のリージョンとアカウントからのインベントリデータをクエリする](systems-manager-inventory-query.md)」を参照してください。

**注記**  
このチュートリアルには、AWS Key Management Service (AWS KMS) を使用して同期を暗号化する方法に関する情報が含まれています。インベントリではユーザー固有、独自、または重要なデータが収集されないため、暗号化はオプションです。AWS KMS の詳細については、[AWS Key Management Service デベロッパーガイド](https://docs.aws.amazon.com/kms/latest/developerguide/)を参照してください。

**[開始する前に]**  
このセクションのチュートリアルを開始する前に、次のタスクを確認するか完了してください。
+ マネージドノードからインベントリデータを収集します。このチュートリアルの Amazon Athena および Amazon Quick セクションでは、アプリケーションデータを収集するようお勧めします。インベントリデータ収集方法の詳細については、「[インベントリ収集の設定](inventory-collection.md)」または「[AWS CLI を使用してインベントリデータ収集を設定する](inventory-collection-cli.md)」を参照してください。
+ (オプション) AWS Key Management Service (AWS KMS) 暗号化を使用する Amazon Simple Storage Service (Amazon S3) バケットにインベントリデータが保存されている場合は、AWS KMS の暗号化が可能になるように IAM アカウントと `Amazon-GlueServiceRoleForSSM` サービスロールも設定する必要があります。IAM アカウントとこのロールを設定せずに、[**Detailed View ** (詳細ビュー)] タブを選択すると、Systems Manager には `Cannot load Glue tables` と表示されます。詳細については、「[（オプション）AWS KMS 暗号化データを表示できるようアクセス許可を設定する](systems-manager-inventory-query.md#systems-manager-inventory-query-kms)」を参照してください。
+ (オプション) AWS KMS を使用してリソースデータの同期を暗号化する場合は、次のポリシーを含む新しいキーを作成するか、既存のキーを更新してこのポリシーを追加する必要があります。

------
#### [ JSON ]

****  

  ```
  {
      "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:us-east-1:123456789012:key/KMS_key_id",
              "Condition": {
                  "StringLike": {
                      "aws:SourceAccount": "123456789012"
                  },
                  "ArnLike": {
                      "aws:SourceArn": "arn:aws:ssm:*:123456789012:resource-data-sync/*"
                  }
              }
          }
      ]
  }
  ```

------

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

1. Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. 集計されたインベントリデータを保存するバケットを作成します。詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」を参照してください。バケット名とそれを作成した AWS リージョン を書き留めます。

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

1. 次のバケットポリシーをコピーし、ポリシーエディタに貼り付けます。amzn-s3-demo-bucket と *account-id* を、作成した Amazon S3 バケットの名前と有効な AWS アカウント ID に置き換えます。複数のアカウントを追加する場合は、各アカウントの条件文字列と ARN をさらに追加します。1 個のアカウントを追加する場合は、例から追加のプレースホルダーを削除します。任意で、*bucket-prefix* を Amazon S3 プレフィックス (サブディレクトリ) に置き換えます。プレフィックスを作成しなかった場合は、*Bucket-Prefix*/ をこのポリシーの ARN から削除します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": " SSMBucketDelivery",
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "s3:PutObject",
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/bucket-prefix/*/accountid=111122223333/*"
               ],
               "Condition": {
                   "StringEquals": {
                       "s3:x-amz-acl": "bucket-owner-full-control",
                       "aws:SourceAccount": [
                           "111122223333",
                           "444455556666",
                           "123456789012",
                           "777788889999"
                       ]
                   },
                   "ArnLike": {
                       "aws:SourceArn": [
                           "arn:aws:ssm:*:111122223333:resource-data-sync/*",
                           "arn:aws:ssm:*:444455556666:resource-data-sync/*",
                           "arn:aws:ssm:*:123456789012:resource-data-sync/*",
                           "arn:aws:ssm:*:777788889999:resource-data-sync/*"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. (オプション) 同期を暗号化する場合は、前のステップでリストされたポリシーに以下の条件を追加する必要があります。これらは、`StringEquals` セクションに追加します。

   ```
   "s3:x-amz-server-side-encryption":"aws:kms",
   "s3:x-amz-server-side-encryption-aws-kms-key-id":"arn:aws:kms:region:account_ID:key/KMS_key_ID"
   ```

   以下がその例です。

   ```
   "StringEquals": {
             "s3:x-amz-acl": "bucket-owner-full-control",
             "aws:SourceAccount": "account-id",
             "s3:x-amz-server-side-encryption":"aws:kms",
             "s3:x-amz-server-side-encryption-aws-kms-key-id":"arn:aws:kms:region:account_ID:key/KMS_key_ID"
           }
   ```

1. まだ AWS Command Line Interface (AWS CLI) をインストールして設定していない場合は、インストールして設定します。

   詳細については、「[AWS CLI の最新バージョンをインストールまたは更新します。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。

1. (オプション) 同期を暗号化する場合は、次のコマンドを実行して、バケットポリシーが AWS KMS のキー要件を実行していることを確認します。各*リソースプレースホルダーの例*をユーザー自身の情報に置き換えます。

------
#### [ Linux & macOS ]

   ```
   aws s3 cp ./A_file_in_the_bucket s3://amzn-s3-demo-bucket/prefix/ \
   --sse aws:kms \
   --sse-kms-key-id "arn:aws:kms:region:account_ID:key/KMS_key_id" \
   --region region, for example, us-east-2
   ```

------
#### [ Windows ]

   ```
   aws s3 cp ./A_file_in_the_bucket s3://amzn-s3-demo-bucket/prefix/ ^ 
       --sse aws:kms ^
       --sse-kms-key-id "arn:aws:kms:region:account_ID:key/KMS_key_id" ^
       --region region, for example, us-east-2
   ```

------

1. 次のコマンドを実行して、この手順の最初に作成した Amazon S3 バケットを使用したリソースデータ同期設定を作成します。このコマンドは、ログインしている AWS リージョン からの同期を作成します。
**注記**  
同期とターゲット Amazon S3 バケットが異なるリージョンにある場合は、データ転送料金が発生する場合があります。詳細については、[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/) を参照してください。

------
#### [ Linux & macOS ]

   ```
   aws ssm create-resource-data-sync \
   --sync-name a_name \
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,Region=bucket_region"
   ```

------
#### [ Windows ]

   ```
   aws ssm create-resource-data-sync ^
   --sync-name a_name ^
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,Region=bucket_region"
   ```

------

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

------
#### [ Linux & macOS ]

   ```
   aws ssm create-resource-data-sync \
       --sync-name InventoryDataWest \
       --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=HybridEnv,SyncFormat=JsonSerDe,Region=us-west-2" 
       --region us-west-1
   ```

------
#### [ Windows ]

   ```
   aws ssm create-resource-data-sync ^ 
   --sync-name InventoryDataWest ^
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=HybridEnv,SyncFormat=JsonSerDe,Region=us-west-2" ^ --region us-west-1
   ```

------

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

------
#### [ Linux & macOS ]

   ```
   aws ssm create-resource-data-sync \
   --sync-name sync_name \
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,AWSKMSKeyARN=arn:aws:kms:region:account_ID:key/KMS_key_ID,Region=bucket_region" \
   --region region
   ```

------
#### [ Windows ]

   ```
   aws ssm create-resource-data-sync ^
   --sync-name sync_name ^
   --s3-destination "BucketName=amzn-s3-demo-bucket,Prefix=prefix_name, if_specified,SyncFormat=JsonSerDe,AWSKMSKeyARN=arn:aws:kms:region:account_ID:key/KMS_key_ID,Region=bucket_region" ^
   --region region
   ```

------

1. 以下のコマンドを実行して、同期設定のステータスを表示します。

   ```
   aws ssm list-resource-data-sync 
   ```

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

   ```
   aws ssm list-resource-data-sync --region us-west-1
   ```

1. 同期設定が正常に作成されたら、Amazon S3 のターゲットバケットを確認します。インベントリデータが数分で表示されます。

**Amazon Athena でデータを使用する**

以下のセクションでは、Amazon Athena でデータをクエリおよび表示する方法について説明します。開始する前に、Athena について学ぶことをお勧めします。詳細については、*Amazon Athena ユーザーガイド*の「[Amazon Athenaとは](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)」および「[データの使用](https://docs.aws.amazon.com/athena/latest/ug/work-with-data.html)」を参照してください。

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

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) で Athena コンソールを開きます。

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

   ```
   CREATE DATABASE ssminventory
   ```

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

1. 次のステートメントをクエリエディタにコピーして貼り付け、[**Run Query**] を選択します。amzn-s3-demo-bucket と *bucket\$1prefix* を、Amazon S3 ターゲットの名前とプレフィックスに置き換えます。

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

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

   ```
   MSCK REPAIR TABLE ssminventory.AWS_Application
   ```

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

1. データをプレビューするには、`AWS_Application` テーブルの横にあるビューアイコンを選択します。  
![\[Amazon Athena のプレビューデータアイコン。\]](http://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/images/sysman-inventory-resource-data-sync-walk.png)

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

   ```
   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
   ```

   クエリは、Linux、macOS、および Windows Server 用の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに存在する AWS アプリケーションである、`aws-cfn-bootstrap` のさまざまなバージョンの数を返します。

1. 以下のステートメントを個別にコピーしてクエリエディタに張り付け、amzn-s3-demo-bucket と *bucket-prefix* を Amazon S3 の情報に置き換えてから、**[クエリを実行]** を選択します。これらのステートメントは Athena に追加インベントリテーブルを設定します。

   ```
   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://amzn-s3-demo-bucket/bucket-prefix/AWS:AWSComponent/'
   ```

   ```
   MSCK REPAIR TABLE ssminventory.AWS_AWSComponent
   ```

   ```
   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://amzn-s3-demo-bucket/bucket-prefix/AWS:WindowsUpdate/'
   ```

   ```
   MSCK REPAIR TABLE ssminventory.AWS_WindowsUpdate
   ```

   ```
   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://amzn-s3-demo-bucket/bucket-prefix/AWS:InstanceInformation/'
   ```

   ```
   MSCK REPAIR TABLE ssminventory.AWS_InstanceInformation
   ```

   ```
   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://amzn-s3-demo-bucket/bucket-prefix/AWS:Network/'
   ```

   ```
   MSCK REPAIR TABLE ssminventory.AWS_Network
   ```

   ```
   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://amzn-s3-demo-bucket/bucket-prefix/AWS:PatchSummary/'
   ```

   ```
   MSCK REPAIR TABLE ssminventory.AWS_PatchSummary
   ```

**Amazon Quick でデータを使用する**

次のセクションでは、Amazon Quick で可視性を高めるための概要とリンクを示します。

**Amazon Quick で可視性を高めるには**

1. [Amazon Quick](https://quicksight.aws/) にサインアップして、Quick コンソールにログインします。

1. `AWS_Application` テーブルおよび作成済みの他のテーブルからのデータセットを作成します。詳細については、「Amazon Quick ユーザーガイド 」の「[Amazon Athena データを使用したデータセットの作成](https://docs.aws.amazon.com/quicksuite/latest/userguide/create-a-data-set-athena.html)」を参照してください。

1. テーブルを結合します。たとえば、`instanceid` の `AWS_InstanceInformation` 列は、他のインベントリテーブルの `resourceid` 列と一致するため、結合できます。テーブルの結合の詳細については、「Amazon Quick ユーザーガイド」の「[データの結合](https://docs.aws.amazon.com/quicksuite/latest/userguide/joining-data.html)」を参照してください。

1. 視覚化を構築します。詳細については、「Amazon Quick ユーザーガイド」の「[分析とレポート: Amazon Quick Sight でのデータの可視化](https://docs.aws.amazon.com/quicksuite/latest/userguide/working-with-visuals.html)」を参照してください。