SystemsManagerのInventoryを使用してのインスタンスの管理

## 概要
SystemsManagerの中でインスタンス状態の管理を行えるInventoryを使ってインスタンスの管理手順をまとめました。
Inventoryの管理できるようにすることでアプリケーションのインストールなども行えるようになります。


## EC2への確認
* EC2へは以下のコマンドでインストールを行います
```
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
```


## PCの確認
* WindowsPCの管理にSkyseaなどを使って行うことが多いかと思いますが、AWSのSystemsManagerの機能を使って確認することもできるのでやってみます。
* Windowsを管理対象にするためにマルチアクティベーションの設定を行います。
    * AWS Workspacesに対しても同様に管理することが行えます。
* 以下のようにSystemsManagerのアクティベーションをまず行います。 
* ![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/8eca0149-e11a-5874-25c2-cd1cc4bffb2e.png)
* ![002_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/4848fd50-5f34-5302-e3f3-215426226d55.png)
* ![002_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/033c34b0-fb5f-0eb5-4cdd-c7b112b6ca25.png)
* 以下で発行されるコード、IDをメモします。後続のコマンドで使用します。
* ![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/63f323ae-4358-b9b1-6b47-82a617049ff1.png)


* 以下のコマンドを管理下に置きたい端末で実行します。PowerShellを管理者モードで実行します。
```
$code = "eicDJtfJ97HSxIfdI3Mz"
$id = "30acfca1-0c4e-4b0a-a2db-66e4d8caa4ef"
$region = "ap-northeast-1"
$dir = $env:TEMP + "\ssm"
New-Item -ItemType directory -Path $dir -Force
cd $dir
(New-Object System.Net.WebClient).DownloadFile("https://amazon-ssm-$region.s3.amazonaws.com/latest/windows_amd64/AmazonSSMAgentSetup.exe", $dir + "\AmazonSSMAgentSetup.exe")
Start-Process .\AmazonSSMAgentSetup.exe -ArgumentList @("/q", "/log", "install.log", "CODE=$code", "ID=$id", "REGION=$region") -Wait
Get-Content ($env:ProgramData + "\Amazon\SSM\InstanceData\registration")
Get-Service -Name "AmazonSSMAgent"
```
* 管理者の確認のウィンドウが起動するので応答を行います。

### アプリの監視
* インベントリをセットアップします。
* ![005_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/528b096e-cf4b-67cd-d183-f0fd3a20bf69.png)

* ![005_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/ebebb485-5889-63ad-6d33-5f4670ccac36.png)


* 登録すると以下のようにインベントリの画面からアプリケーションが確認できます。
* ![006_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/ea692f38-3060-16cc-cc3d-e0ef5d25e5e0.png)
* ![006_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/4782bcfa-caf7-8761-a4a0-a4cdc37456fa.png)
* EC2
    * ![007_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/ade8818f-ab83-4d70-ea1d-f7a670eebc35.png)
 * windows
     * ![007_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/3dc1a148-1e3e-26c5-7db7-30880c2eeeba.png)

* カスタムインベントリを設定することで各インスタンスにjson形式で記載した内容を取得できます。
    * 設定する場所は以下のようになります。詳細は参考資料を参照してください。
        * Linux `/var/lib/amazon/ssm/node-id/inventory/custom`
        * windows `%SystemDrive%\ProgramData\Amazon\SSM\InstanceData\node-id\inventory\custom`

```json
{
    "SchemaVersion": "1.0",
    "TypeName": "Custom:TestData",
    "Content": {
        "Case1": "red",
        "Case2": "blue"
      }
 }
```
* ![007_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/e50cfe3e-2043-dcc4-91a5-d5d19c9cd16a.png)


* インベントリの情報を登録先のS3バケットを先に作成します。ポリシーを設定します。
```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SSMBucketPermissionsCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::{バケット名}"
        },
        {
            "Sid": " SSMBucketDelivery",
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::{バケット名}/*/accountid={アカウントID}/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "{アカウントID}",
                    "s3:x-amz-acl": "bucket-owner-full-control"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:ssm:*:{アカウントID}:resource-data-sync/*"
                }
            }
        }
    ]
}
```

* 作成後インベントリの同期を行います。インベントリ画面でリソースデータの同期作成を行います。
* ![008_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/7acf57e0-0ab8-6bd7-7713-445b9882bc13.png)
* ![008_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/13b3a830-7f7e-f466-7c3a-d6f9969bc506.png)
* ![008_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/b2dcd5af-9989-808d-d7d5-3d353fb2925a.png)


* S3に結果が出力されます。
* ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/5f3f4e77-4f09-84ac-e899-b39c401011e1.png)

### 一覧を画面で見たいときの設定

* S3の作成
    * Athena用、Glue用にバケットを作成します。

* Glueの設定
    * Glueを使ってインベントリの情報を出力しているS3バケットから情報を集約します。
* ![009_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/8140c66e-3745-a08c-14a7-529cd3917f67.png)
* ![009_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/9464650b-d74e-07f7-7bf9-3e07d533d29f.png)
* ![009_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/ed977ef1-5850-f65c-3eca-59aa4d135213.png)
* ![009_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/74722ae0-2b56-6349-b3c4-eae2bd25aab3.png)
* ![009_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/9b7db2e5-cf7f-3d6c-fbb3-c9ddefb640ee.png)
* ![009_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/7bb67f91-ea8a-8d4e-25d0-1f79e5d97334.png)
* ![009_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/fab87920-5054-ed37-029f-f12027d558a0.png)
* ![009_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/4b076058-ff7b-1e37-10f2-dda24e44b610.png)
* ![009_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/2619674c-ebab-8c63-ac88-6bab8676dc32.png)
* ![009_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/04a20c4a-eaa2-21bc-8427-6c502d369b24.png)
* ![009_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/1771d867-416a-4fe4-2b89-c5582f43ab88.png)
* Cralerを実行するとインベントリの情報を収集します
* ![009_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/3f5a5493-b079-9e55-b30c-c07dc0e3bca5.png)

* Athenaでクエリを実行することでsqlのように結果を確認することができます。CSVも出力できるので管理などを行いたいときに活用できます
* ![009_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/a39c7c8a-579a-7980-553b-5b654895e4b0.png)
* ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/45a01825-8dfa-961d-4cbe-7ebabfb24df9.png)


### 参考資料
* https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS-SystemsManager-Inventory_0630_v1.pdf
* https://dev.classmethod.jp/art![008_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657697/5168a1a2-1c93-90bb-16b3-5cc8cd04adca.png)
icles/aws-systems-manager-on-premise-windows-2019/
* https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/manually-install-ssm-agent-linux.html
* https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-inventory-custom.html
* https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-inventory-datasync.html