Amazon Web Services ブログ

AWS Application Composerでサーバーレスワークロードを可視化し、作成する

この記事は、プリンシパル スペシャリスト ソリューションアーキテクトのLuca Mezzaliraが書きました。

本日(2022年12月1日)、AWSは、複数のAWSサービスからサーバーレスアプリケーションを構築するために使用できるビジュアルデザイナー、AWS Application Composer のプレビューを開始します。

分散システムにおいて、チームに権限を与えることは、開発者がビジネス能力をコードに変換するのを支援するために必要な文化的な転換です。

これは、すべてのチームが孤立して働くことを意味するものではありません。異なるチームや新規の参加者であっても、プロジェクトに貢献するためには、自分たちが何を作っているのかを理解する必要があります。アーキテクチャを素早く理解するための最良の方法は、ダイアグラムを使用することです。残念ながら、アーキテクチャ図はしばしば更新されず現状を正しく反映しないものになっています。本番でワークロードをリリースするとき、すでに最初の設計やインフラとの間に矛盾があることがよくあります。

サーバーレスアプリケーションを初めて構築する開発者は、複数のAWSサービスからアプリケーションを構成する際に、学習曲線に直面する可能性があります。各サービスの設定方法を理解し、さらにアプリケーションをデプロイするためのIaC(Infrastructure as Code)を学習して記述しなければなりません。

サンプルのシナリオ

Emmaは、ビデオオンデマンドのプラットフォームで働くクラウドアーキテクトで、このビデオオンデマンドのプラットフォームは、すべてのユーザーがサービスに加入した後にコンテンツにアクセスできるようになっています。今後数ヶ月の間に、マーケティングチームは、新規ユーザー限定のディスカウントコードを使用して、ユーザー数を増やすキャンペーンを始めたいと考えています。
彼女は、サーバーレスアプリケーションを構築するのが初めての開発者チームと協力します。彼らは、1 秒あたり数千のトランザクションにスケールできるディスカウントコードサービスを設計する必要があります。このサービスを実装するには、多くの要件があります。

  • ユーザーからギフトコードを収集する
  • ディスカウントコードが利用可能であることを確認する
  • 月末の請求書にディスカウントコードを適用する

これらの要件とすべてのプラットフォームサービスで利用可能なデフォルトの SLA に基づいて、Emma はこのマイクロサービスの構築に必要な主要要素を含む高レベルのアーキテクチャを設計します。

Discount code service high-level-architecture

ディスカウントコードサービス ハイレベルアーキテクチャ

彼女のアイデアは、ペイロードにディスカウントコードが含まれるリクエストをクライアントから受け取り、データベースでディスカウントコードの有無を検証することです。そして、このサービスは、異なるディスカウントコードを一括して非同期に処理することで、下流の依存関係へのトラフィックを減らし、インフラ全体のコストを削減します。

このアプローチにより、サービスは将来的に初期のトラフィック量を超えて拡張できることが保証されます。また、ディスカウントコードサービスやその他の部分の管理・実装を疎結合のアーキテクチャで簡素化します。

開発者とアーキテクチャについて話し合った後、彼女はAWSマネジメントコンソールでApplication Composerを開き、サーバーレスサービスを使った実装の構築を開始します。

Application Composer Initial screen

Application Composerの初期画面

まず、「新規プロジェクト」を選択し、プロジェクトファイルを保存するローカルファイルシステムフォルダを選択します。

Application Composer create blank project

Application Composerで空白のプロジェクトを作成する

Application Composerにローカルのプロジェクト・ファイルへのアクセスを許可すると、コンソール・インターフェースとローカルに保存されたプロジェクト・ファイル間の変更をほぼリアルタイムで双方向に同期させることができます。Application Composerのインターフェイスでプロパティを更新すると、ローカルに保存されているファイルに反映されます。IDEでローカルファイルを変更すると、自動的にApplication Composerのキャンバスに反映されます。

プロジェクトを作成した後、Emmaはチームと合意した初期設計を表現するために、左サイドバーから必要なAWSリソースをドラッグします。

Application Composerを使用すると、キャンバス上でサーバーレスリソースをドラッグして、それらを接続することができます。バックグラウンドでは、Application ComposerがインフラストラクチャをコードとしてAWS CloudFormation テンプレートを生成してくれます。

Application Composer canvas

Application Composer キャンバス

例えば、Lambda関数をキャンバスにドラッグしたときに生成されるデフォルトの構成はこのようになっています。テンプレートビューには以下のようなコードが表示されます。

Function:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub ${AWS::StackName}-Function
      Description: !Sub
        - Stack ${AWS::StackName} Function ${ResourceName}
        - ResourceName: Function
      CodeUri: src/Function
      Handler: index.handler
      Runtime: nodejs14.x
      MemorySize: 3008
      Timeout: 30
      Tracing: Active

Application Composerには、サーバーレスワークロードに慣れていない開発者が見落とすことがある、便利なデフォルトのプロパティ値が組み込まれています。例えば、AWS X-Ray を使ったトレースの有効化や、関数のタイムアウトの増加などです。

Application Composer resource panel

Application Composer リソースパネル

Application Composerのプロジェクトをローカルシステムと同期させると、コードエディターからCloudFormationのテンプレートを変更することができます。これにより、Application Composerのインターフェイスに変更が自動的に反映されます。

キャンバスで2つの要素を接続すると、Application ComposerはデフォルトのIAMポリシー、Lambda関数の環境変数、および適用可能なイベントのサブスクリプションを設定します。

例えば、Amazon DynamoDB のテーブルとAmazon SQS のキューとやり取りするLambda関数がある場合、Application ComposerはLambda関数に対して以下の構成を生成します。

Function:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub ${AWS::StackName}-Function
      Description: !Sub
        - Stack ${AWS::StackName} Function ${ResourceName}
        - ResourceName: Function
      CodeUri: src/Function
      Handler: index.handler
      […]
      Environment:
        Variables:
          QUEUE_NAME: !GetAtt Queue.QueueName
          QUEUE_ARN: !GetAtt Queue.Arn
          QUEUE_URL: !Ref Queue
          TABLE_NAME: !Ref Table
          TABLE_ARN: !GetAtt Table.Arn
      Policies:
        - SQSSendMessagePolicy:
            QueueName: !GetAtt Queue.QueueName
        - DynamoDBCrudPolicy:
            TableName: !Ref Table

これは、新しいビルダーが最初のサーバーレスアプリケーションを設計するときに役立ち、より高度なビルダーが修正できる初期設定を提供するものです。これにより、サーバーレスアプリケーションを設計する際に、優れた運用手法を取り入れることができます。

Emmaのチームは、ディスカウントコードのアーキテクチャを表現するために必要なさまざまなサービスを一緒に追加し続けています。これがApplication Composerでの最終結果です。

Discount code architecture in Application Composer

Application Composerでのディスカウントコードアーキテクチャ

  1. このアプリケーションには、ディスカウントコードをシステムに送信するために必要な API を公開する Amazon API Gateway のエンドポイントが含まれています。
  2. POST APIは、まずディスカウントコードがまだ利用可能であることを検証するLambda関数をトリガーします。
  3. これは、DynamoDBのテーブルを使用して格納されます。
  4. ディスカウントコードの検証に成功した後、この関数はSQSキューにメッセージを追加し、クライアントに成功した応答を返します。
  5. 別のLambda関数がSQSキューからメッセージを取得し、インボイスを送信します。

このアプローチを使用すると、残りの操作が非同期で処理されるため、Lambda関数の呼び出し速度が最適化されます。また、ユーザーからリクエストが来たときにサービスをスケーリングするのではなく、ユーザーごとに複数のディスカウントコードをSQSバッチで集約できるため、アーキテクチャの複雑さとコストが簡略化されます。

チームは、これをサービスの初期設計として使用することに同意しています。将来的には、自社の認証機構と統合する予定です。また、Lambda Powertools を追加して観測性を高め、社内で開発したライブラリを追加して社内標準に準拠したプロジェクトにします。

Application Composer は、CloudFormation テンプレート .yaml ファイルや Lambda 関数のハンドラーなど、Emma のローカル ファイル システムにプロジェクトの開始に必要なすべてのファイルを作成しました。

Application Composer generated file

Application Composer の生成したファイル

Emmaは、このサービスのアウトラインをバージョン管理システムにアップロードして、他の開発者と成果物を共有し、ビジネスロジックのコーディングを開始できるようになりました。

追加の機能

Application Composerには、左側のパネルにリソースリストタブがあり、利用可能なリソースを素早く閲覧することができます。

Application Composer browse available resources

Application Composerで利用可能なリソースをブラウズ

また、リソースを意味的にグループ化して、キャンバス内のビジュアルを簡素化することもできます。これは、キャンバス内に大規模なアプリケーションがあり、リソースを探すためにキャンバスをドラッグすることなく、要素をすばやく選択したい場合に役立ちます。この機能は、生成されるインフラストラクチャに影響を与えません。

Application Composer grouping

Application Composer のグループ化

Application Composer は CloudFormation テンプレートにいくつかのメタデータを追加し、プロジェクトが再びロードされたときにキャンバスでリソースをグループ化できるようにします。

Metadata:
  AWS::Composer::Groups:
    Group:
      Label: Group
      Members:
        - CodesQueue
        - CodesTable

Application Composerは、新しいサーバーレスワークロードの構築以外にも使用することができます。Create projectダイアログでLoad existing projectを選択すると、既存のCloudFormationテンプレートを読み込むことができます。

Application Composer load existing project

Application Composer が既存のプロジェクトをロード

これを利用して、組織のベストプラクティスでブループリントを定義し、Application Composer内で可視化することができます。これは、新しいサーバーレスサービスを開始する際のチームのコラボレーションに役立ちます。既存のベーステンプレートからリソースを追加して、サーバーレスマイクロサービスやイベント駆動アーキテクチャを構築することができます。

AWS SAMとの統合

AWS Serverless Application Model (AWS SAM) は先日、プロジェクトの変更のみを同期させることで、コードとクラウド基盤のフィードバックループとテストを加速させるAWS SAM Accelerate の一般提供を発表しました。Application ComposerとAWS SAM Accelerateを併用することで、よりシンプルかつ視覚的にサーバーレスアプリケーションを構築し、その後クラウド上でテストすることができます。

AWS SAM Accelerateの詳細については、こちらのライブデモ をご覧ください。

Application Composerの開発プロセスにおける位置づけ

Emmaは、このプロジェクトでチームを助けるためにApplication Composerを使いましたが、さらなる使い方のアイデアも持っています。

  • ラピッドプロトタイピング
  • 既存のサーバーレスプロジェクトをレビューし、共同で進化させる
  • ドキュメントやWikiのためのダイアグラムの生成
  • 新しいチームメンバーのプロジェクトへの参加
  • AWSクラウドアカウントで何かをデプロイするための最初のステップを減らす

Application Composerの利用可能なリージョン

Application Composerは、現在、以下のリージョンでパブリックプレビューとして利用可能です。フランクフルト(eu-central-1)、アイルランド(eu-west-1)、オハイオ(us-east-2)、オレゴン(us-west-2)、ノースバージニア(us-east-1)および東京(ap-northeast-1)です。

Application Composerは追加費用なしで利用でき、AWSマネジメントコンソールからアクセス可能です。

結論

Application Composerは、開発者やアーキテクトがアプリケーション・アーキテクチャを表現し、構築するのに役立つビジュアル・デザイナーです。開発者は同僚とアイデアを反復し、初めてアプリケーションに取り組む他の人のためにドキュメントを作成することができます。ソフトウェア開発ライフサイクルの複数の段階で Application Composer を使用することで、プロジェクトの開始と本番稼動における摩擦を軽減することができます。

現在、Application Composerは限られた数のサービスをサポートしていますが、将来的には追加していく予定です。どのようなサービスが含まれることを希望されるかお知らせください。

パブリックプレビューとして、ツールを進化させるための提案やアイデアを募集しています。私たちは、あなたとあなたのチームが、組織内のサーバーレスワークロードの採用を加速させるための方法を探しています。この投稿にコメントを追加するか、
#AWSAppComposerWishlist のタグを付けてツイートしてください。

サーバーレスの学習リソースについては、Serverless Land を参照してください。

 

本記事の日本語訳はSA福井 厚が担当しました。
原文はこちらです。