過去のAWSサポートの回答一覧を一括でエクスポートしたい

## やりたいこと
AWSで過去に質問したサポートケースの回答一覧を一括でエクスポートしたい。

## やったこと
* Webコンソール上のCloudShellでコマンドを実行し、過去のサポートケースをJSON形式で取得する。
* 行数が多くてテキストでコピーペーストするのが大変なので、S3を用意してそこにJSONファイルを吐き出す。


## CloudShellで過去のサポートケースをJSON形式で取得

#### サポートケース全部表示するコマンド
```shell
aws support describe-cases --language ja --include-resolved-case --region ap-northeast-1
``` 
※--region引数はないとエラーになってしまうので東京リージョン入れていますが、東京リージョンじゃなくてもよさそうです。グローバル(aws-grobal)でも動作しました。
<details><summary>実行結果サンプル</summary>

```shell
{
    "cases": [
        {
            "caseId": "ケースID",
            "displayId": "ケースID(ポータルに表示される15桁のケースID)",
            "subject": "質問タイトル",
            "status": "resolved",
            "serviceCode": "対象サービス",
            "categoryCode": "general-guidance",
            "severityCode": "low",
            "submittedBy": "メールアドレス",
            "timeCreated": "2023-12-28T02:39:48.404Z",
            "recentCommunications": {
                "communications": [
                    {
                        "caseId": "ケースID",
                        "body": "回答本文④",
                        "submittedBy": "Amazon Web Services",
                        "timeCreated": "2023-12-29T09:22:48.963Z",
                        "attachmentSet": []
                    },
                    {
                        "caseId": "ケースID",
                        "body": "回答本文③",
                        "submittedBy": "Amazon Web Services",
                        "timeCreated": "2023-12-29T09:22:47.161Z",
                        "attachmentSet": []
                    },
                    {
                        "caseId": "ケースID",
                        "body": "回答本文②",
                        "submittedBy": "ユーザー名 <メールアドレス>",
                        "timeCreated": "2023-12-29T07:53:04.083Z",
                        "attachmentSet": []
                    },
                    {
                        "caseId": "ケースID",
                        "body": "回答本文①",
                        "submittedBy": "Amazon Web Services",
                        "timeCreated": "2023-12-28T10:09:50.550Z",
                        "attachmentSet": []
                    },
                    {
                        "caseId": "ケースID",
                        "body": "質問本文",
                        "submittedBy": "ユーザー名 <メールアドレス>",
                        "timeCreated": "2023-12-28T02:39:49.103Z",
                        "attachmentSet": []
                    }
                ]
            },
            "ccEmailAddresses": [],
            "language": "ja"
        }
    ]
}
```
</details>

<details><summary>ケースIDの一覧が欲しい、ケースごとに取りたい場合</summary>

#### サポートケースのケースIDの一覧を取得するコマンド
```shell
aws support describe-cases --language ja --include-resolved-case --region ap-northeast-1　\
　--query "cases[].caseId[]"
``` 

<details><summary>実行結果サンプル</summary>


```shell
[
    "case-アカウントID-mjja-2022-XXXXXXXXXXXXXXXX",
    "case-アカウントID-mjja-2023-XXXXXXXXXXXXXXXX",
    "case-アカウントID-mjja-2023-XXXXXXXXXXXXXXXX",
    "case-アカウントID-mjja-2023-XXXXXXXXXXXXXXXX",
    "case-アカウントID-mjja-2024-XXXXXXXXXXXXXXXX"
]
```
</details>

#### ケースIDを指定して取得するコマンド
```shell
aws support describe-cases --language ja --include-resolved-case --region ap-northeast-1 \
--case-id "ケースID"
``` 
</details>

## S3にJSONファイルを吐きだす
上記の場合、行数が多いとCloudShell上でページネーションされてしまい、テキストのコピーが大変なので、S3バケット作成してそこにJSONファイル書き出すようにしました。
※CloudShellから吐き出すので、S3バケットは特にアクセス許可等無しの非公開バケットでOKでした。リージョンの制限はあるかもしれないです。(検証時は東京リージョンで作成し、問題なしでした)

#### S3にファイルを吐き出すコマンド
```shell
aws support describe-cases --language ja --include-resolved-case --region ap-northeast-1 --output json > 【ファイル名】.json
aws s3 cp 【ファイル名】 s3://【保存先S3バケット】/【ファイル名】.json
```
<details><summary>実行結果サンプル</summary>


```shell
[cloudshell-user@ip-xxx-xxx-xxx-xxx ~]$ aws support describe-cases --language ja --include-resolved-case --region ap-northeast-1 --output json > all_cases.json
[cloudshell-user@ip-xxx-xxx-xxx-xxx ~]$ 
[cloudshell-user@ip-xxx-xxx-xxx-xxx ~]$ aws s3 cp all_cases.json s3://テストバケット/all_cases.json
upload: ./all_cases.json to s3://テストバケット/all_cases.json
[cloudshell-user@ip-xxx-xxx-xxx-xxx ~]$ 
```
</details>



## 最後に
やりたいことは単純なものの、なかなかコマンド見つけられなかったのでメモがてら記事化しました。
もうちょっと工夫すればケースID一覧取得してからケースIDごとに1ファイルずつS3にエクスポートするようなコマンドも書けそうです。
この記事が何かのお役に立てば幸いです。