AWSサポートの一覧にカテゴリ内容で検索したい

# はじめに
__注意__: この記事は2017年中旬に書いたものの公開せず下書きに眠っていたものです。
改めて確認したのですが私はSupportAPIを使う権利を有していないため間違いがあればお知らせください。


　AWSのサポートはマネジメントコンソール画面右上の「サポートセンター」から問い合わせの一覧を表示できるが、サービス名やサービス内のカテゴリ列がないため特定のサービスについての質問を過去に遡って確認するのが困難である。
特にサービスごとに開発担当者が違っていたりすると管理がとても難しいので解決方法を整理したい。
対応方法は4つ思い当たったが対応1はビジネスサポート以上が必要となるため、開発者サポート以下では対応2を運用しつつ本文検索に3の対応をするのがよさそう。

1. Support APIで一覧を取得する
1. 件名にサービス名を含める
1. 自動送信される問い合わせメールを使う
1. AWSに要望する

# 対応1 Support APIで一覧を取得する
　[AWS CLI](http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-welcome.html)のコマンドでサポート一覧を取得することができる。
ケース履歴は保存期間が1年しかないので定期的に取得しておくといいかもしれない。

```bash:一覧の取得
aws support describe-cases --region us-east-1 --language ja --no-include-communications
```

```json:出力例
[
    {
        "status": "opened",
        "ccEmailAddresses": [],
        "timeCreated": "2017-06-28T05:10:58.000Z",
        "caseId": "case-093580161474-mjja-2017-a8c7c52d99999999",
        "severityCode": "low",
        "language": "ja",
        "categoryCode": "feature-request",
        "serviceCode": "support-api",
        "submittedBy": "hogehoge@example.com",
        "displayId": "9999999999",
        "subject": "ケース一覧にカテゴリ列を表示してほしい"
    }
]
```

この一覧には欲しかったserviceCodeとcategoryCodeが含まれている。
別のAPIでserviceCodeとcategoryCodeの日本語も別途取得できる。後述。
Webコンソール上でいうケースIDはcaseIdでなくdisplayIdなので注意。

サービスを絞った検索はマネジメントコンソールではできないが、
CLIではこう書けば実現できる。

```bash:サービス指定verの入力例
aws support describe-cases --region us-east-1 --language ja --no-include-communications \
 --query "cases.[?serviceCode=='support-api']"
```


## 主要な入力オプション
詳細は[リファレンス](http://docs.aws.amazon.com/cli/latest/reference/support/describe-cases.html)参照のこと。最後の２つは[こちら](http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/controlling-output.html)を参照。


| オプション | 説明 |
|:--|:--|
|--region us-east-1 | このコマンドのリージョンはus-east-1固定なので常に書いておくと間違いがない|
|--language ja | 日本語と英語の問い合わせ履歴は独立していて、デフォルトがenなので日本語の問い合わせを取得するにはja指定が必要 |
|--no-include-communications|質問内容を含めないフラグ|
|--after-time \<value\>|指定時間以降だけ表示するフィルタ。ISO8601形式 2017-01-01[T00:00:00[+09:00]] で指定|
|--before-time \<value\>|指定時間以前だけ表示するフィルタ。ISO8601形式 2017-01-01[T00:00:00[+09:00]]  で指定|
|--page-size \<value\>|1ページあたりの表示数 |
|--max-items \<value\>|最大表示数 |
|--output text | 出力形式をタブ区切りにする。excelに張り付けるのに都合がいい| 
|--query \<value\>| 出力内容を編集する |

## serviceCodeとcategoryCodeの取得および日本語対応
describe-servicesを使うとserviceCodeとcategoryCodeの日本語表示名を一覧で取得できる。

```bash:serviceCode・categoryCodeの取得
aws support describe-services --region us-east-1 --language ja
```

```json:出力例
{
    "services": [
        ...省略...
        {
            "code": "support-api",
            "name": "Support API",
            "categories": [
                {
                    "code": "other",
                    "name": "その他"
                },
                {
                    "code": "apis",
                    "name": "API"
                },
                {
                    "code": "feature-request",
                    "name": "新機能・改善のご要望"
                },
                {
                    "code": "general-guidance",
                    "name": "一般的なご質問"
                }
            ]
        },
        ...省略...
    ]
}
```


# 対応2 件名にサービス名を含める
　これは文字通りケース一覧で唯一の自由記述欄である件名の先頭にサービス名と同じ文字列を入れることで__今後__の検索性を高める。ブラウザの検索機能を使う前提。

```text:件名のサンプル
[Support API] ケース一覧にカテゴリ列を表示してほしい
```

過去のケースの件名は変更できない。やっておくと将来的に楽になる。

# 対応3 自動送信される問い合わせメールを使う
メールが残っていれば1年以上昔の内容も検索できる。
ただし件名と本文のみでカテゴリなどメタな情報は残っていない。

gmailの場合は以下のような指定とともにキーワードでフィルタする
from:(no-reply-aws@amazon.com) subject:([Case)

# 対応4 AWSに要望する
　APIとしての実装はあるのだから技術的には対応可能なはず。
同じ要望が多いと優先度高く対応してくれるかもしれないので、現状を不便だと思う方はぜひ要望を出してほしい。

- サポートセンターのケース一覧にカテゴリ列を表示してほしい
- 開発者サポート以下でもSupport APIのdescribe系を使用できるようにしてほしい