今更ながらにAmazon CodeCatalyst触ってみた

## はじめに

今更ながらCodeCatalystを触って検証しましたので、その内容について記載します。
元々、CodeCommitを利用していましたが、昨年7月に廃止の連絡がありました。
[AWS CodeCommit リポジトリを他の Git プロバイダーに移行する方法](https://aws.amazon.com/jp/blogs/news/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/)

移行先のツールとしてGitHubを含めた複数の候補があり、どのサービスを利用するのか検討していました。
その中で、CodeCatalystを検証したので、その検証結果を記載します。

## CodeCatalystとは

これまでのAWSサービスはビルディングブロックのように組み合わせて利用するケースが多かったと思います。
例えば、コード管理はCodeCommit、CI/CDにはCodePipeline、ビルド環境としてCodeBuild、デプロイはCodeDeployを利用する、といったケースです。
それぞれのサービスはそれぞれ特化したサービスなので、非常にカスタマイズ性、専門性が高い一方で、管理が複雑になるというデメリットもありました。
そこで、こういった開発に必要な機能一式をまとめたサービスとして、CodeCatalystが発表されました。

CodeCatalystの主な機能としては以下になります。

* Issue管理
    * カンバン形式での課題管理ができる
* コード管理
    * リポジトリ管理ができる
    * クラウドベースの開発環境を利用できる
* ワークフロー管理
    * CI/CDの構築ができる
* レポート機能
    * 脆弱性診断やテスト結果のレポートを表示可能
* パッケージ管理
    * npmやPythonの独自パッケージの管理ができる
* ブループリント
    * プロジェクトのカスタムテンプレート作成、管理ができる

料金については従来のような重量課金ではなく、プランによって変わります。

* 無料プラン
* スタンダードプラン：1アクティブユーザにつき4USD
* エンタープライズプラン：1アクティブユーザにつき20USD

※アクティブユーザとは当月にCodeCatalystにログインしたユーザ

プランによってできることが異なります。
詳細は[こちら](https://codecatalyst.aws/explore/pricing)をご確認ください。

特定の機能を利用するためにはより上位のプランを契約する必要があります。
これによってユーザ単位で金額が増加するため、事前に見積もりはしっかりと行う必要があります。

## 調査結果

結論としてCodeCommitからの以降先として、CodeCatalystの利用はありだと思います。
コードホスティングサービスとして必要な基本的な機能は揃っており、コード管理のみであれば無料プランでも十分対応可能です。
次に便利な点、注意すべき点について記載します。

## 便利な点

### AWSで完結している

情報規制等で、複数のサービスにデータが存在することを懸念する場合も多いと思います。
CodeCatalystを利用すると、すべてのデータをAWS内に完結することができます。
ただし、東京リージョンは選択不可のため、すべてのデータを日本国内に止める、ということはできません。

### よりコラボレーションに特化したサービス

現在の開発では様々なツールを組み合わせて行うのが一般的だと思います。
リポジトリ管理にはGitHubを、チケット管理にはJIRAを、CI/CDにはGitHub Actionsなどです。
当然これらのサービス用にアカウントを整備し、適切な権限管理を行う必要があります。
しかし、CodeCatalystを利用すれば、すべて一つのサービスで完結させることができ、
アカウント管理もシンプルにすることができます。

## 注意すべき件

### 3wayマージができない

なぜかリポジトリのマージ戦略として3Wayマージが選択できません。
主要なブランチへのマージ履歴を残したい場合は、別途Gitコマンド等を用いて対応する必要があります。

### カスタマイズ性が低い

例えば、CodeBuildでは実行中にブレークポイントを作成し、sshでログインすることができました。
CodeCommitであれば、全員に対して特定のブランチへの直接プッシュ禁止等ができました。
しかし、CodeCatalystではこのようなことができません。
(CodeCatalystでも直接プッシュの禁止はできますが、管理者は直接プッシュできる)

CodeCatalystは複数のサービスを統合し、使いやすい一方で従来のサービスと比較すると、
できない部分も多くあります。
なので、既存ツールからの移行の場合は、CodeCatalystでできることとできないことをしっかりと見極めることが重要です。

### AWSのアカウント管理(IAMユーザ)と別のアカウント管理になる

徐々にIAM Identity Centerへのアカウント移行が進んでいるかと思いますが、まだIAMユーザを用いたアカウント管理を実施されているケースもあるかと思います。
CodeCatalystへのログインアカウントはAWSのアカウント管理(IAMユーザ)とは独立しているため、ログインのためには、Identity Centerと紐づけるか、AWS Builder IDを取得する必要があります。
すでにAWSをOrganization管理しており、ログインにもIdentity Centerを用いたSSOを利用している場合は特に問題ありませんが、IAMユーザで管理している場合は別途作業が発生します。

## まとめ

すでにAWSをOrganization管理しており、IAM Identity Centerを用いたアカウント管理をしている場合は、非常に簡単にCodeCatalystの導入が可能です。
そのため、CodeCommitの移行先としては有力な候補となるかと思います。
ただし、これまで複数のサービスを組み合わせて利用していた場合(CodeCommit/CodePipeline/CodeBuild/CodeDeployなど)、一部の操作ができない可能性があることは注意が必要です。


## 参考情報

より詳細な情報については以下のブラックベルトの記事を参照ください。

* [Amazon CodeCatalyst Overview編](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-CodeCatalyst-Overview_1031_v1.pdf)
* [Amazon CodeCatalyst Spaces編](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-CodeCatalyst-Spaces_1231_v1.pdf)
* [Amazon CodeCatalyst Projects, Blueprints編](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-CodeCatalyst-Projects-and-Blueprints_1231_v1.pdf)
* [Amazon CodeCatalyst Source repositories編](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-CodeCatalyst-Source-repositories_1231_v1.pdf)
* [Amazon CodeCatalyst Workflow編](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-CodeCatalyst-Workflow_1231_v1.pdf)
* [Amazon CodeCatalyst Identity, permissions, and access編](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-CodeCatalyst-Identity-permissions-and-access_1231_v1.pdf)

ざっくりと使い方を理解したい場合は以下のハンズオンもオススメです


[Hands on with Amazon CodeCatalyst](https://catalog.workshops.aws/ccdevops/en-US)