Amazon CodeCatalystを使ってblueprintでアプリを作るまで

## CodeCatalyst挑戦の経緯
仕事の案件とは全く関係ない趣味の範囲＆自主学習用にWebアプリを作っております。
今までは作ったものをローカルで動作させて、DBもSQLiteで…みたいな感じで作っていましたが、最終的にはAWS上にデプロイしたいなーとかDBサービスはAWSのものを使ってみたいなーとか計画しているうちに、**ローカルじゃなくて最初からAWS上で開発できんのか？** という考えに思い当たりました。

### そうだ、CodeCatalystがあるじゃない
AWS上で開発するにしてもCloud9はちょっと自分には使い辛かった（結局コンソールの代わりとしてしか使わない）んだよな～とか考えているうちに、思い出しました。CodeCatalyst。2023年のAWS Summit Tokyoで初めて聞いて興味を持っておりました。
どちらかというとチーム開発がしやすいよ！というのが売りのサービスだったと記憶していたんですが、個人開発でも使っちゃえばいいじゃない！のノリで、挑戦してみることにしました。

## CodeCatalystとは
まだ今年の春にGAされたばかりのサービスだからなのか、[AWSの公式詳細ページ](https://codecatalyst.aws/)に飛ぶと見事に英語の記事しかないのですが、
↓こちらの記事で綺麗に纏まっておりました。（ありがとうございます！）

https://qiita.com/hot-and-cool/items/3625d719f1292bc77c67

料金的にも無料枠があって良心的。
まぁ使い込み始めると有料にせざるを得ないようになっているのでしょうが、それでも1ユーザーあたり月4ドルなら個人開発でも十分お支払いできる額です。とりあえず安心。

## さっそく使ってみよう
概要はなんとなくわかったところで使い方を調べてみたのですが、ぐーぐる先生に聞いても情報がなかなか集まりません。Preview時期の記事はいくつかあるのですが、GAされてからの記事はまだあまりないようです。
既にこの記事が完成するか不安になってきましたが、まぁなんとかなるやろの精神で使ってみましょう！
まずはCodeCatalystを触ってみて、サンプル的なアプリが作れたらゴールとしましょう。

### Spaceを作成する
ではコンソールからサービスを検索して…、
![001_検索.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/d49196eb-15ea-83d3-576c-be4e2756c13b.png)
さっそく怒られました。東京リージョン未対応なんですね！！？
![002_リージョン対象外.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/3775b1fd-ec98-f349-4399-ea3a3c0cc053.png)

ということで、us-west-2（オレゴン）を選択してCodeCatalystのページを開きます。
![003_オレゴン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/c8cb21cd-4eb5-5ad7-1f6f-3a6e277735d3.png)

↑のページの「Continue with AWS Builder ID」とあるオレンジのボタンを押してサービス利用を開始しろということらしいです。
ここをクリックすると、[別サイト](https://codecatalyst.aws/)に誘導されます。
↓画像の「Get Started for free」をクリックしてAWS Builder IDを新規登録します。
![004_Signup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/ba061aa6-03e0-2227-b645-a9dce815bb1f.png)
ちなみに私は以前CodeWhispererを試したときにBuilder IDを登録済みなので、Sign inからアクセスします。
↓がサインイン画面。初登録の場合は入力したアドレスにメールが飛ぶので、メールの確認リンクを押して認証するようです。
![005_サインイン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/c5ac9bae-0fd2-21da-8798-4c180d3ce194.png)
サインインに成功すると、↓のような画面が表示されます。
なんかやたらオサレなサイトですね…
「Create your CodeCatalyst alias」とのことで、説明を読むとCodeCatalyst内で使うユーザ名を決めろということらしいです。後から変更不可。
いつもの癖でckw-1227と入れそうになったのですが、よく考えたら会社のメールアドレスでログインしているので本名に紐づくaliasを入れておきました。
![006_alias作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/810907db-7fa9-0af0-1d6d-9a1c3c96ab9f.png)
入力してNextをクリックすると、今度は作成するSpace名とリージョンを入力する画面へ遷移しました。
スペース名も後から変更不可のようです。
![007_space作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/daa1e0c2-7b18-6a4e-5505-f0ed6c0a20a0.png)
もしかしてここで東京リージョンを選べるかな！？と思いましたが、やっぱりオレゴンとアイルランドだけでした。
![008_リージョン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/59ed00dd-15ae-1da1-f1ac-9009e06a5009.png)

Space名とリージョンを入力してNextボタンを押すと、次に行くはずがエラーが出ました。
既に使われているスペース名ということ？っぽいですね。アンダーバーにしたらいけました。
![009_エラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/0ed72d4f-15ae-e8e3-5558-caca7f2c9969.png)

次はAWSアカウントとの紐づけです。自分のアカウントIDを入れてテキストボックスからフォーカスを外すと「Go to the AWS console to verify」のボタンが有効化されるので、クリックします。
![010_AWSアカウント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/560dd3cb-aeb8-685c-2187-503ec841bfb2.png)
するとコンソールのVerify画面に遷移するので、「Verify space」をクリック。
![011_Verify.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/b3cf83ac-fb28-ee67-4de7-df3a6b6de3a1.png)
CodeCatalyst側の画面に戻ると、「CodeCatalyst space verified with AWS account」のメッセージが表示されています。
![012_Verifyed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/30c0b82c-e5e7-a4e7-08ef-a675804263fe.png)
Nextをクリックしてしばらく待つと、「Your space is ready.」の画面が。
まず最初の1歩はクリアしたようです！

### Projectの作成
先ほど表示された画面で「Create your first project」をクリックすると、プロジェクト作成画面に遷移します。
![014_CreateProject.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/7bcd697a-0576-8430-fd59-5e7b4b6ccabf.png)
プロジェクト作成は、
・blueprint（雛形のようなもの）から作成
・githubリポジトリとリンクして始める
・スクラッチで始める
の3つが選べます。
blueprintに関しては、2023年10月現在では16種類が選べます。
・Single-page application
・.NET serverless application
・AWS Glue ETL
・Static Website
・To Do web application
・Serverless RESTful microservice
・Modern three-tier web application
・ASP.NET Core web API
・Clickstream real-time analytics
・DevOps deployment pipeline
・Java API with AWS Fargate
・Serverless application model (SAM) API
・Intelligent Document Processing
・Serverless image handler
・Node.js API with AWS Fargate
・Video-on-demand web service

うーん…とりあえずで小さなアプリが作れれば良いのでそんなに大仰なものはいらないんですよね。「Node.js API with AWS Fargate」を選択することにします。

Nextをクリックすると、次はProject名・AWSアカウントの確認・IAM Roleの作成ですね。
ここは素直に入力していきます。
![015_IAM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/1ad6da65-bd49-4f5a-dc9e-65220a6fc037.png)
「Add IAM Role」ボタンをクリックすると、IAMを作成してくれるようなのでデフォルトで作ってもらいましょう。
![016_IAM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/a67ab233-d946-f27c-ea6f-6530926df4f6.png)
IAM Roleを作成してCodeCatalyst画面に戻ると、ECR Roleを選択するように指示されるので、先ほど作ったロールを選択します。
![017_ECR_Role.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/13626e44-25dc-e758-85bf-019717e2dd03.png)
さらに「additional configuration」なるものが出現したのでクリックしてみると…
リージョンが自由入力で指定できるっぽい！！
東京リージョン（ap-northeast-1）を指定して「Create project」をクリックします。
![018_リージョン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/90f46450-9c40-3b9c-28c3-08bb4e52e4d9.png)
しばらく待つと、Projectのsummary画面が表示されました。Project作成もクリアですね！
![019_summary画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/a0071f15-fb9c-ba32-40ea-3a823b52d888.png)

### 画面を見まわしてみる
ここから先は操作の案内などはなさそうなので、ひととおり画面を見てみましょう。
まずは先ほども貼ったsummary画面。ダッシュボード的な役割でしょうか。TopにREADME.mdが表示されているようです。
![019_summary画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/52d847d8-1a11-531f-7355-d7f13d056ce3.png)
次はissues画面。何も登録されていない状態なのでなんとも言えませんが…。
![021_Issues.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/c9143131-a24d-c87c-c6d9-b768bdd0fbcc.png)
Code画面でアプリケーションを選んだ状態の画面がこちら。見た目Gitっぽいですね。
![022_Code画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/bede0f87-1aad-1ad7-6b12-43d45a4c6346.png)
画面上方の「Create Dev Environment」から、VSCodeやPyCharmなんかも開けるようです。
![024_IDE.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/4ad1b87a-fdf9-cb74-427e-4cb78300fa7f.png)
ファイルを選択すると、エディタ画面に遷移します。ここでもソースの編集が可能です。…この画面、なんとなくCloud9を思い出しますね…
![023_editor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/3d04c298-abb9-cb99-7620-53e3125c2470.png)
CI/CDメニューからWorkflowsを選択すると、パイプラインっぽい画面が出てきます。
ていうかビルドが走ってますね？Projectの新規作成と同時にWorkflow（パイプライン）が走るようになっているようです。
![020_デプロイ走ってる.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/2749b126-28fa-a146-3603-606fc19305f3.png)
最後はProject settings画面。Generalの方はシンプルです。
![025_General.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/35552df9-1006-b755-966c-df5f5e1dafae.png)
notification設定の方は各イベントの通知と、Slackとの連携もできるようです。チームでの開発ができますよという推しポイントの片鱗が見えますね。
![026_notifications.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/aac986b9-7050-c9d9-3b32-14abd07d7c50.png)

### いつの間にかリソースが作られていた
そうこうしているうちにデプロイが終わったようです。
![027_デプロイ完了.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/9f032a4c-6feb-f469-08ff-72003b69d99f.png)
ECS Fargateを動かすソースがひととおり存在して、デプロイが走ったということは…もうサービスにアクセスできるということですよね？
ちょっとコンソールで各所を覗きに行ってみましょう。
リソースが作られるリージョンはオレゴンではなく、Project作成時に指定したリージョン（今回の場合は東京）となりますのでそこだけご注意を。

・VPC
もしかしてデフォルトVPCが勝手に使われる可能性が？と一瞬思いましたが、そんなことはなくしっかり新規VPCが作られていました。
![028_VPC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/2b22bff4-2ee5-a044-cf78-c28491249cfb.png)

・ECR
作ったイメージはECRに格納されています。
![029_ECR.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/5212861f-5fd0-ad1b-b59c-ffdeee79932b.png)

・ECS(Fargate）
ECSも異常なしで起動中。
![030_ECS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/322728e9-473b-6795-fba6-70821cad43cf.png)

・ロードバランサ―
ALBもちゃんとあります。
![031_ALB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/bf5e61a9-d12e-78a3-ab97-5c95d6dcd4c7.png)
ということで…ロードバランサ―の詳細に表記されているDNS名にアクセスすると、レスポンスが返ってきます。
![032_レスポンス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/192217d4-69b6-ccd9-4830-90a954558664.png)

CodeCatalystのProjectをblueprintで作成すると、自動的に各リソースが作られることがわかりました。ちょっとこれは、気を付けないと怖いですね…

### リソースの削除
blueprintからProjectを作り、コンソールの様子まで見ることができたので、この記事の目標はクリアしたといえるでしょう。
あとは忘れずに後片付けが必要です。

・Projectの削除
Projectの削除はProject settingsから行います。
![033_プロジェクト削除.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/c4834739-7b87-36c3-70a9-5563a66b629a.png)
Delete projectをクリックして、deleteを入力して削除。
![034_delete.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/fb09ee89-db10-0eaf-40ea-28ab0954c572.png)

・作られたリソースの削除
作られたリソースの内容は、CloudFormationの画面から確認することができます。
スタックは1つではなく複数にまたがって作られているようなので削除する際はご注意を。今回は3つのスタックを削除しました。
![035_CloudFormation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1402694/17cb6730-3aac-8c45-23d0-edbc4cf1bfae.png)

## まとめ
Amazon CodeCatalystを使って、簡単なアプリのデプロイまで体験することができました。
・CodeCatalystにはソース・環境管理とデプロイのためのツールがそろっている
・チームでの開発のための仕組みもそろっている様子
・Spaceの中にProjectを作成し、そこでアプリを開発していく
・blueprintからProjectを作ると自動的にデプロイが走ってリソースが作られるので注意

…といったところでしょうか。個人開発でも使えそうだなと思います。

## おれたちのたたかいはこれからだ
CodeCatalystを使ってみた！で終わりにするのではなく、個人開発で使いたいというのが私の目標です。
blueprintでは私の作りたい環境に沿ったものがなかったので、環境を1から作る必要があるようです。
ということで、現在環境を自分で作っていくことに挑戦中です。
ある程度できたらまた記事にしようと思います！