Systems Manager(SSM)インベントリ はSSM管理下のインスタンスの棚卸しに役立つ機能です。 インスタンスからメタデータを収集して、それらの情報をコンソールから確認できます。
また、 リソースデータの同期 機能を使って、収集したメタデータ(インベントリデータ)を S3バケットへ送信できます。 S3バケットのインベントリデータに対して Amazon AthenaやQuickSight を使って分析ができます。
例えば以下の記事では、Organizations環境のSSMインベントリデータを 1つのS3バケットへ集約しています。
今回はS3バケットのインベントリデータをAmazon Athenaで分析するための下準備(兼 私の備忘録)として、 それぞれのデータタイプで使えるテーブルを作成してみます。
前提
Athenaの初期セットアップ周りの詳細は割愛します。 こちら の『ステップ 1: データベースを作成する』を参考ください。
今回は ssm_inventory
データベースを作成して、その配下にテーブルを作成していきます。
CREATE DATABASE IF NOT EXISTS ssm_inventory
また、SSMインベントリで取得されるメタデータについては以下の公式情報を参考ください。
AWS:InstanceInformation
以下クエリを流してテーブルを作成します。
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_instanceinformation`(
`agentstatus` string,
`agenttype` string,
`agentversion` string,
`computername` string,
`instanceid` string,
`ipaddress` string,
`platformtype` string,
`platformname` string,
`platformversion` string,
`instancestatus` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string)
PARTITIONED BY (
`accountid` string,
`region` string,
`resourcetype` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:InstanceInformation/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
以下サンプルクエリです。
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_instanceinformation
SELECT
resourceid,
instancestatus,
accountid,
region
FROM aws_instanceinformation limit 10
AWS:Application
以下クエリを流してテーブルを作成します。
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_application`(
`applicationtype` string,
`installedtime` string,
`architecture` string,
`version` string,
`summary` string,
`packageid` string,
`publisher` string,
`release` string,
`url` string,
`name` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string,
`epoch` string)
PARTITIONED BY (
`accountid` string,
`region` string,
`resourcetype` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:Application/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
以下サンプルクエリです。
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_application
SELECT
resourceid,
name,
version,
accountid,
region
FROM aws_application limit 10
AWS:ComplianceItem
以下クエリを流してテーブルを作成します。
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_complianceitem`(
`status` string,
`installedtime` string,
`executiontype` string,
`patchseverity` string,
`title` string,
`severity` string,
`executiontime` string,
`compliancetype` string,
`classification` string,
`id` string,
`documentversion` string,
`patchstate` string,
`patchbaselineid` string,
`documentname` string,
`patchgroup` string,
`executionid` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string,
`cveids` string)
PARTITIONED BY (
`accountid` string,
`region` string,
`resourcetype` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:ComplianceItem/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
以下サンプルクエリです。
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_complianceitem
SELECT
resourceid,
title,
documentname,
status,
severity,
accountid,
region
FROM aws_complianceitem limit 10
AWS:Network
以下クエリを流してテーブルを作成します。
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_network`(
`macaddress` string,
`ipv6` string,
`ipv4` string,
`name` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string,
`gateway` string,
`dnsserver` string,
`dhcpserver` string,
`subnetmask` string)
PARTITIONED BY (
`accountid` string,
`region` string,
`resourcetype` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:Network/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
以下サンプルクエリです。
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_network
SELECT
resourceid,
macaddress,
name,
ipv4,
ipv6,
accountid,
region
FROM aws_network limit 10
AWS:Tag
以下クエリを流してテーブルを作成します。
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_tag`(
`key` string,
`value` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string)
PARTITIONED BY (
`accountid` string,
`region` string,
`resourcetype` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:Tag/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
以下サンプルクエリです。
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_tag
SELECT
resourceid,
key,
value,
accountid,
region
FROM aws_tag limit 10
そのほか(兼 おわりに)
以上、いくつかよく使いそうなインベントリデータのAthenaテーブルを作成してみました。
これ以降でそのほかインベントリデータのテーブル作成およびプレビューのSQLをまとめて記載します。
参考になれば幸いです。
AWS:AWSComponent
▼ テーブル作成
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_awscomponent`(
`applicationtype` string,
`installedtime` string,
`architecture` string,
`version` string,
`summary` string,
`packageid` string,
`publisher` string,
`release` string,
`url` string,
`name` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string)
PARTITIONED BY (
`accountid` string,
`region` string,
`resourcetype` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:AWSComponent/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
▼ プレビュー
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_awscomponent
SELECT * FROM aws_awscomponent limit 10
AWS:BillingInfo
▼ テーブル作成
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_billinginfo`(
`billingproductid` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string)
PARTITIONED BY (
`accountid` string,
`region` string,
`resourcetype` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:BillingInfo/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
▼ プレビュー
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_billinginfo
SELECT * FROM aws_billinginfo limit 10
AWS:ComplianceSummary
▼ テーブル作成
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_compliancesummary`(
`compliancetype` string,
`patchgroup` string,
`patchbaselineid` string,
`status` string,
`overallseverity` string,
`executiontime` string,
`executionid` string,
`executiontype` string,
`compliantcriticalcount` string,
`complianthighcount` string,
`compliantmediumcount` string,
`compliantlowcount` string,
`compliantinformationalcount` string,
`compliantunspecifiedcount` string,
`noncompliantcriticalcount` string,
`noncomplianthighcount` string,
`noncompliantmediumcount` string,
`noncompliantlowcount` string,
`noncompliantinformationalcount` string,
`noncompliantunspecifiedcount` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string)
PARTITIONED BY (
`accountid` string,
`region` string,
`resourcetype` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:ComplianceSummary/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
▼ プレビュー
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_compliancesummary
SELECT * FROM aws_compliancesummary limit 10
AWS:InstanceDetailedInformation
▼ テーブル作成
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_instancedetailedinformation`(
`cpus` string,
`osservicepack` string,
`cpuhyperthreadenabled` string,
`cpuspeedmhz` string,
`cpusockets` string,
`cpucores` string,
`cpumodel` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string,
`kernelversion` string)
PARTITIONED BY (
`accountid` string,
`region` string,
`resourcetype` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:InstanceDetailedInformation/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
▼ プレビュー
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_instancedetailedinformation
SELECT * FROM aws_instancedetailedinformation limit 10
AWS:PatchSummary
▼ テーブル作成
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_patchsummary`(
`baselineid` string,
`missingcount` string,
`lastnorebootinstalloperationtime` string,
`installedothercount` string,
`operationendtime` string,
`othernoncompliantcount` string,
`criticalnoncompliantcount` string,
`installedpendingrebootcount` string,
`noncompliantseverity` string,
`snapshotid` string,
`securitynoncompliantcount` string,
`notapplicablecount` string,
`operationstarttime` string,
`rebootoption` string,
`failedcount` string,
`operationtype` string,
`installedcount` string,
`executionid` string,
`installedrejectedcount` string,
`patchgroup` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string,
`ownerinformation` string,
`unreportednotapplicablecount` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:PatchSummary/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
▼ プレビュー
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_patchsummary
SELECT * FROM aws_patchsummary limit 10
AWS:ResourceGroup
▼ テーブル作成
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_resourcegroup`(
`arn` string,
`name` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:ResourceGroup/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
▼ プレビュー
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_resourcegroup
SELECT * FROM aws_resourcegroup limit 10
AWS:Service
▼ テーブル作成
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_service`(
`status` string,
`servicetype` string,
`servicesdependedon` string,
`displayname` string,
`dependentservices` string,
`starttype` string,
`name` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string)
PARTITIONED BY (
`accountid` string,
`region` string,
`resourcetype` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:Service/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
▼ プレビュー
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_service
SELECT * FROM aws_service limit 10
AWS:WindowsUpdate
▼ テーブル作成
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_windowsupdate`(
`installedtime` string,
`description` string,
`hotfixid` string,
`installedby` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string)
PARTITIONED BY (
`accountid` string,
`region` string,
`resourcetype` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:WindowsUpdate/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
▼ プレビュー
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_windowsupdate
SELECT * FROM aws_windowsupdate limit 10
AWS:WindowsRole
▼ テーブル作成
-- ${S3バケット} および ${プレフィクス} を置き換えてください
CREATE EXTERNAL TABLE `aws_windowsrole`(
`path` string,
`featuretype` string,
`dependson` string,
`description` string,
`parent` string,
`installed` string,
`displayname` string,
`installedstate` string,
`subfeatures` string,
`name` string,
`servercomponentdescriptor` string,
`resourceid` string,
`capturetime` string,
`schemaversion` string)
PARTITIONED BY (
`accountid` string,
`region` string,
`resourcetype` string)
ROW FORMAT SERDE
'org.openx.data.jsonserde.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://${S3バケット}/${プレフィクス}/AWS:WindowsRole/'
TBLPROPERTIES (
'classification'='json',
'compressionType'='none',
'typeOfData'='file')
▼ プレビュー
-- 初回実行時 or パーティション更新時(主に新規アカウントID or 新規リージョン追加時) には事前に以下パーティション更新クエリを流して下さい
-- MSCK REPAIR TABLE aws_windowsrole
SELECT * FROM aws_windowsrole limit 10