次に、マルチテナントアーキテクチャのコスト分析を実現する例を紹介します。
こちらの図は、メトリクスを通じて、サービスの使用率を推測する元となる指標を取得する例です。
Compute サービスのリクエスト/レスポンスの処理時間を使って、Compute サービスの使用率を推測してみます。Compute サービスは Amazon EC2、Database サービスは Amazon DynamoDB で構成されています。このとき必要になるメトリクスは、どのテナントが、どの AWS リソースに対して、どれだけの処理時間を消費したかです。上の図では Amazon EC2 から、TenantId, ResouceId, StartTime, EndTime をメトリクスとして発行しています。メトリクスでは、各テナントがどれだけ Compute サービスを使用したかを関連付けることで、各テナントの Compute サービスの使用率を計算できるようにしています。メトリクスの収集に関しては、前回 の連載をご参考ください。
メトリクスを収集したところで、次に Compute サービスの使用率を AWS からの請求と結び付け、各テナントの Compute サービスのコストがいくらかを計算します。ここでは、AWS Application Cost Profiler を使う例を紹介したいと思います。Application Cost Profiler は、メトリクスからAWSリソースの使用率を計算し、テナントごとのコストをレポートとして出力できるマネージドサービスです。
下の図は、Application Cost Profiler を使って、取得したメトリクスからコストのレポートを出力する例です。
メトリクスのデータを CSV ファイルで Amazon S3 に配置し、配置した CSV ファイルを Application Cost Profiler で分析することで、コストのレポートを Amazon S3 に出力します。例えば Compute サービスなら、Application Cost Profiler は、Compute サービスのリクエスト/レスポンスの処理時間に応じて、Compute サービスの使用率を計算し、テナントごとの Compute サービスのコストを計算します。
下の CSV 出力は Application Cost Profiler から Amazon S3 に出力されるレポートの例です。
PayerAccountId UsageAccountId LineItemType UsageStartTime UsageEndTime ApplicationIdentifier TenantIdentifier TenantDescription ProductCode UsageType Operation ResourceId ScaleFactor TenantAttributionPercent UsageAmount CurrencyCode Rate TenantCost Region
123456789,123456789,Usage,2021-02-01T00:30:00.000Z,2021-02-01T01:00:00.000Z,Canary,100,ExampleApp,AmazonEC2,BoxUsage:c5.large,RunInstances,i-0123abcd456efab12,1,0.5,0.5,USD,0.085,0.0425,us-east-1
123456789,123456789,Usage,2021-02-01T01:00:00.000Z,2021-02-01T02:00:00.000Z,Canary,103,ExampleApp,AmazonEC2,BoxUsage:c5.large,RunInstances,i-0123abcd456efab12,0.25,1,0.25,USD,0.085,0.02125,us-east-1
123456789,123456789,Usage,2021-02-01T01:00:00.000Z,2021-02-01T02:00:00.000Z,Canary,102,ExampleApp,AmazonEC2,BoxUsage:c5.large,RunInstances,i-0123abcd456efab12,0.25,1,0.25,USD,0.085,0.02125,us-east-1
123456789,123456789,Usage,2021-02-01T01:00:00.000Z,2021-02-01T02:00:00.000Z,Canary,101,ExampleApp,AmazonEC2,BoxUsage:c5.large,RunInstances,i-0123abcd456efab12,0.25,1,0.25,USD,0.085,0.02125,us-east-1
123456789,123456789,Usage,2021-02-01T01:00:00.000Z,2021-02-01T02:00:00.000Z,Canary,100,ExampleApp,AmazonEC2,BoxUsage:c5.large,RunInstances,i-0123abcd456efab12,0.25,1,0.25,USD,0.085,0.02125,us-east-1
どのテナント (TnantIdentifier) の、どの AWS リソース (ResourceId) で、どれだけのコスト(TenantCost) が掛かっているかが出力されているのが確認できます。2 行目を見ると、TenantIdentifier が 103 で、ResourceId が i-0123abcd456efab12、TenantCost が $ 0.02125 と計算結果が出力されています。
また Application Cost Profiler のレポートは CSV ファイルで出力されるため、Amazon Athena や Amazon QuickSight などの分析ツールを使って可視化することができます。
こちらの図は、Application Cost Profiler により出力されたレポートから QuickSight を使って可視化した例です。
マルチテナントアーキテクチャ全体のコスト (Total Cost) や、テナントごとのコスト (Tenant by Cost) が表示されているのが見て取れます。
簡単にコスト分析を始めたい場合には、Application Cost Profiler と QuickSight を使って可視化をするのがオススメです。そしてビジネスの成長に合わせて、サービスの使用率の集計や、コストのレポートをカスマイズする形で、より多元的で細かい可視化を検討していただければと思います。