🍪

Amazon CodeCatalystのblueprintで、コンテナ化したAPIを爆速でDeployする

2022/12/04に公開

Qiita 「CI/CD Advent Calendar 2022」 4日目の記事です。

https://qiita.com/advent-calendar/2022/cicd

はじめに

AWS re:Invent 2022で発表されたAmazon CodeCatalystを使用して、コンテナ化したAPIをAWSにDeployします。
CodeCatalystのBluePrintにNode.js API with AWS Fargateが用意されていますので、それをそのまま使います。

CodeCatalystはこちらから使用できます。
https://codecatalyst.aws/

やってみた

Builder IDを作る → Spaceを作る

まずCodeCatalystを使う為のBuilder IDを作り、その後にSpaceを作ります。
画面に従ってやれば問題なく出来ますし、クラスメソッドさんが記事に出しているのでやり方の記載は省略します。
https://dev.classmethod.jp/articles/amazon-codecatalyst-create-project/

プロジェクトを作る

  • Spaceに入り、右上のCreate Projectを押します。

  • Choose a blueprintでNode.js API with AWS Fargateを選択して、Next

  • projectの設定をします

    • プロジェクト名を決める
      • CodeCatalyst上のプロジェクト名
    • デプロイするAWS Accountを選択する
      • 未接続の場合は、Add an AWS account.から追加する
    • 各種Roleを設定する
      • 適切なRoleを作っていなければ、Create or add an AWS roleから追加
    • Regionを入力する
      • 日本は、ap-northeast-1
    • ApplicationName
      • AWSアカウント上のアプリケーション名

  • 設定を全て入力したら、Create projectでプロジェクトができます。

CI/CDを構築して、deployする

インフラ構築

  • CI/CDのWorkflowを開くと、すでにインフラ構築が始まっています

  • しばらく待つとインフラ構築が完了します

アプリをデプロイする

  • CI/CDのWorkflowにDeployがありますので、こちらをRunします
  • しばらく待つとデプロイが完了します

確認

AWS上のリソース

各種必要なリソースが作られていますので、AWSコンソール上から確認できます。

API Gateway

NLB

ECS

ECR

ブラウザから接続

API GatewayのURLをブラウザで開くと無事にAPIが動いていました。

という感じで、いくつか設定を入れつつ画面でポチポチ操作するだけで、20分弱でコンテナのAPIをDeployすることが出来ました。これは凄いぞ。

その他、CodeCatalystに関するトピック

コードをcloneしてローカルで開発する

CodeCatalystはgitのレポジトリになっていますので、当然cloneしてローカル環境で開発することができます。

APIのレポジトリをcloneする

今回のアプリは、2つのレポジトリで構成されています。

  • infrastructure : cdkによるawsのIaC
  • app : コンテナーのAPI

appの方を選びcloneボタンを押下すると、URLとtokenを取得できるので、ローカルにcloneできます。

後は、好きに開発することが出来ます。

CI/CDのカスタマイズ

仕様をちゃんと読んでいませんが、リポジトリ内の.codecatalyst/workflows配下にCI/CDの定義ファイルがあるようです。こちらのyamlをカスタマイズすれば良いと思われます。

CodeCatarylstとGitHubの連携

CodeCatalystのSpaceにGitHubのextensionをインストールすることで、GitHubのレポジトリと連携が可能となるようです。

感想

めちゃくちゃ簡単にデプロイ出来ました。これは凄く便利です。
BluePrintが充実すれば、ほとんどのアプリ開発でインフラ構築の手間がなくなりそうですね。
今後、AWS上に構築するアプリはGitHubでなくてCodeCatalystを使用することを検討したいです。もしくはextentionでGitHub連携する前提で、codeとissue管理はGitHubに残してCI/CDはCodeCatalystというのもありかもしれません。GitHub Actionsもなんだかんだでお金かかるので、、、

とりあえずは以上です。
もう少し触ってみて、何か面白そうなことがあれば改めて記事に書きます。

おまけ

re:inventで貰った、CodeCatalystのステッカー

NCDCエンジニアブログ

Discussion