🥪

AWS Application Composer + Amazon CodeCatalyst で IaC & CI/CDをノーコード構築

2023/04/24に公開

初めに

先日のAWS Summit Tokyo 2023でたまたま居合わせた見知らぬエンジニアの人と、インフラ構築はノーコードを目指すべきかそれとも全てコードで管理するべきか という話をしました。

それを受けて、ノーコードで構築した結果をコードに出力して管理すればいい のでは?と思ったので、 AWS Application Composer と Amazon CodeCatalyst を使って試してみました。

No Code と Infrastructure as Code のどちらかを選ぶのではなく、同時に実現できる。。。はず。

AWS Application Composer とは、なに?

AWS re:Invent 2022で発表された最新のサービスです。

https://aws.amazon.com/jp/application-composer/?nc=sn&loc=0

AWS Application Composer は、視覚的なキャンバスで AWS のサービスをドラッグ、グループ化、接続することで、デベロッパーがアプリケーションアーキテクチャをより簡単に設計できるようにする視覚的なビルダーです。

つまり、ビジュアルエディタを使ってノーコードでインフラ構築ができます。

Amazon CodeCatalyst とは、なに?

AWS re:Invent 2022で発表された最新のサービスです。

https://aws.amazon.com/jp/codecatalyst/

Amazon CodeCatalyst は、AWS におけるソフトウェアの構築と配信をより迅速にするための統合ソフトウェア開発サービスです。CodeCatalyst は AWS によるフルマネージドサービスであるため、開発に集中できます。

つまり、AWS提供のGitHubみたいなものなのですが、CI/CDをビジュアルエディタで構築する機能を持っているので、今回はそれを使います。

つまり、ビジュアルエディタを使ってCI/CDが構築できます。

やってみる

とりあえず最小構成のインフラで考えます。Lambdaを1つデプロイしてみます。

CodeCatalystにリポジトリを作る

  • CodeCatalystにログインします。

https://codecatalyst.aws/
入り口が通常のAWSコンソールとは別になっており、アカウントも通常のAWSアカウントではなく AWS Builder ID を使用するので気をつけましょう。

  • ログインしたら、適当にプロジェクトを作って、適当にレポジトリを作ります。
  • レポジトリを作ったら、ローカルにcloneします。

  • .gitignoreを作っておきます。
.gitignore
.aws-composer
.aws-sam

Application ComposerでLambdaを作る

  • 普通のAWS Consoleに入り、Application Composerを新規に開始します。
    作業場所としてcloneしてきたフォルダを指定します。

  • 左側からLambdaをD&Dして配置します。下の方にある関数URLを作成にチェックを付けておきます。

デプロイする

Application Composerの出力はSAMのテンプレートなのですが、SAMの初回は手動デプロイが必要みたいです。なので、初回だけは手動でデプロイします。
(なんとかならないかな、これ。。。)

  • (AWS SAM CLI を未インストールの場合インストールする)
  • Application Composerによりtemplate.yamlが作成されているのを確認して、コンソールからsam buildする
  • コンソールからsam deploy --guidedで、適当に設定を入れてデプロイする
    • profileを指定したい時は--prifileオプションも付けましょう
# sam deploy --guided --profile sandbox

Configuring SAM deploy
======================

        Looking for config file [samconfig.toml] :  Found
        Reading default arguments  :  Success

        Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [sam-app]: ibaraki-composer-sample
        AWS Region [ap-northeast-1]: 
        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
        Confirm changes before deploy [y/N]: y
        #SAM needs permission to be able to create roles to connect to the resources in your template
        Allow SAM CLI IAM role creation [Y/n]: 
        #Preserves the state of previously provisioned resources when an operation fails
        Disable rollback [y/N]: 
        Function Function Url may not have authorization defined, Is this okay? [y/N]: y
        Save arguments to configuration file [Y/n]: 
        SAM configuration file [samconfig.toml]: 
        SAM configuration environment [default]: dev
  • そのまま、デプロイしちゃいます
Previewing CloudFormation changeset before deployment
======================================================
Deploy this changeset? [y/N]: y
  • 無事にLambdaがデプロイされました

  • この後CI/CDを構築しますが、その確認用にLambdaのソースを適当に変更しておきます。
src/Function/index.js
exports.handler = async event => {
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Hello from Lambda! by Application Composer',
    }),
  };
};
  • 生成物をCodeCatalystにpushします。

CodeCatalystでCDを構築する

  • ブラウザからCodeCatalystを開き、メニューからCI/CD -> workflow とたどり、workflowを新規作成します。

  • 適当にworkflow名を決めた後、上の方のタブでYAMLからVisualに切り替えます。
    左上の+Actionsからsamで検索するとDeploy with AWS SAMが出てくるので、これを追加します。

  • 必要な項目を編集します
    • Compute type : Lambda
    • Environment : (適当に作る)
    • AWS account connection : (適当にAWSアカウントと接続させる)
    • Role : (適当に作る)
    • AWS Region : Tokyo
    • Stack Name : (CFnのスタック名。好きに名付ける)

  • Commitします

  • commit に反応して workflow が動き出し、しばらく待つと完了します。
  • Lambda の関数URL をブラウザで開くと、初回デプロイ後の変更が反映されていることを確認できます。

以上で、AWS上のインフラ構築とCI/CDをビジュアルエディタで構築してコード化することが出来ました。

最後に

  • re:invent 2022発表の最新のAWSサービスを組み合わせで何か出来ないかと少し前から考えていたのですが、具体的な案がなく放置していました。AWS Summit Tokyo 2023に参加したことでインスピレーションが得られたのでやってみました
  • それぞれが成熟してないサービスですが、結構いい感じに使えそうな感触を得られました
  • ビジュアルでインフラを構築して、ビジュアルでCI/CDも構築できるのは強いです
  • SAMの初回デプロイの為に手動でコマンドを打たないといけないのが惜しいところです
    • CDKにも対応してくれれば、自動化できる範囲を広げられそうに思えます
  • なお、構築をAIに手伝ってもらおうとしたら そんなAWSのサービスは存在しない と言われたので全て自力で作成しました。。。

NCDCエンジニアブログ

Discussion