Amazon CodeCatalystでゾンビと遭遇した話

みなさんAmazon CodeCatalyst使っていますか？
とても便利なのでわたしは気に入って使っています。
・・・ですが、先日とあるプロジェクトで利用を止めたことがありました （※）。
今回はそのとき遭遇した**開発環境のゾンビ**:skull:に纏わるトラブルについて綴ります。

※当時はCodeCatalystからVPC内リソースにアクセスできず、その点がネックとなり使用を断念しました。[2023/11にVPCへ対応](https://aws.amazon.com/jp/about-aws/whats-new/2023/11/amazon-codecatalyst-supports-virtual-private-cloud/)しましたが、対応リージョンはオレゴンとアイルランドのみです。**東京リージョンに対応することを待ち望んでいます・・・！**

# まとめ

:::note info
- CodeCatalystはFree tierでも課金が発生する場合があるため、利用を止めたときは課金状況をチェックしましょう。
- CodeCatalystはAWS CLIで操作できます。
:::

# CodeCatalystで想定外の課金が発生
とあるプロジェクトにてAmazon CodeCatalystをStandard tierで利用していましたが、別のツールに移行することが決まり、プランをFree tierに戻したことがありました。その際、今後の再利用に備えてスペースは残したままにしていました。

あるときAWS課金状況を確認していたところ、**Free tierに戻したはずのCodeCatalystで料金が発生**:moneybag:していることに気がつきました。

なぜ・・・？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333262/41592b82-e6ed-c4f7-32fb-4edeefefb7ab.png)

該当プロジェクトのAWSコストの大半はRDSが占めており、CodeCatalystのコストは相対的に小さかったため、なかなか気づくことができなかったのだと思います。
課金項目は`USW2-Storage-Dev-Environment-Billed`というもので、開発環境のストレージに関する課金だと名前から推測できました。

# マネジメントコンソールから開発環境を削除できない

最初にマネジメントコンソールを見たところ、エラーメッセージが表示されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3333262/e6da778d-d08e-9564-c67d-a1ffcb91fd97.png)

どうやら開発環境のストレージ上限を超過しているようです。
もしや・・・**開発環境を残したままFree tierに戻すと開発環境が課金ゾンビ:moneybag::skull:として残ってしまう・・・？**

画面のリロードを何度試しても開発環境を表示することができません。
操作しているユーザはスペース管理者であったため、権限の問題でもなさそうでした。

# AWSサポートに問い合わせた

手詰まりになってしまったため、AWSサポートに問い合わせました。
海外部署への問合せになるということで約2週間ほどかかり、開発環境が13個残っているという回答を得ました。
これは「削除の方法」を聞くべきだったところを「課金されている理由」を聞いてしまったためです・・・
また質問を重ねると期間を要してしまう、そんな状況でふと気づきました。

そういえばAWS CLIを使えばいいのでは？:bulb:

# AWS CLIを使ってみた

## セットアップ

まず [こちら](https://docs.aws.amazon.com/ja_jp/codecatalyst/latest/userguide/set-up-cli.html) の手順に従ってAWS CLIをセットアップする必要があります。
ポイントは下記2点です。

:::note info
- AWS CLIのバージョンが最新であること。
- CodeCatalyst固有のプロファイル設定が必要であること。
:::

## コマンド例

### 開発環境の数量を確認する

```terminal
$ aws codecatalyst list-dev-environments --space-name xxx | jq '.items | length'
13
```

### 開発環境のスペース、プロジェクト、IDを確認する

```terminal
$ aws codecatalyst list-dev-environments --space-name xxx | jq -r '.items[] | [.spaceName, .projectName, .id] | @csv'
xxx, yyy, 231a8a37-4868-4ca0-9ff8-434070de6caa
xxx, yyy, 6e32c963-ee38-49e8-9f4e-da2780d2c1be
xxx, yyy, e805a212-6ab4-43f8-bf46-8688ad3b659f
xxx, yyy, 1ca709f1-5d4a-4014-86f1-3f7bb7da1ad9
xxx, yyy, f526e538-c4be-4cad-ab83-af5d4edbae52
xxx, yyy, 4709fb48-cf10-40c2-b15e-4fcab6c2be10
xxx, yyy, d7c64a84-9db7-46cd-87e9-de3fc06b167f
xxx, yyy, 023038b7-e3a0-44c9-a5af-d0b72f8be022
xxx, yyy, a28e272f-dda3-4636-bed3-ebd80e01cc3c
xxx, yyy, 5f6cb71a-4666-4325-ba62-6dd353f0bd73
xxx, yyy, bf807ef9-acb0-441b-a9a4-783ff58b1637
xxx, yyy, 6c76f696-7be2-4c51-99b8-1411e881e98a
xxx, yyy, 090c570c-ecfd-44de-add5-ba700b3173a3
```

### 開発環境を削除する

```terminal
$ aws codecatalyst delete-dev-environment --space-name xxx --project-name yyy --id 231a8a37-4868-4ca0-9ff8-434070de6caa
{
    "spaceName": "xxx"
    "projectName": "yyy"
    "id": "231a8a37-4868-4ca0-9ff8-434070de6caa"
}
```

# さいごに

AWS CLIを利用することで課金ゾンビを無事倒すことができました。
なぜAWS CLIの利用をすぐに思いつかなかったのか定かではありませんが、CodeCatalystはその他AWSサービスとは別物、という感覚がなんとなくあったからなのかもしれません。
レアケースかもしれませんが、どなたかの参考になれば幸いです。