👛

【AWS】コスト確認、CloudWatchの利用料、ContainerInsights

2021/05/10に公開1

私はほぼ勉強のためですが、個人でAWS上でいろいろ試しています。
特にサービスをリリースしたわけではないので、冗長化もしないケチケチユーザーです。コスト削減のためにDBなんかもマネージドなものは使わないので、だいたいEC2(+EBS)の料金がほとんどだったのですが、このところ想定より請求額が高くなっていることに気がつき、調べました。
何をどう見ればいいのかがわかりにくかったので、忘備のために記載します。

Cost Explorerの確認

コンソールにログインして、サービス一覧から[AWS Cost Explorer]を選択すると、AWSコスト管理(Cost Management) という画面に遷移します。
AWSコスト管理のホーム画面が開くので、左メニュー「Cost Explorer」を開き直すとコストの内訳などをある程度調べることができます。状況に合わせてグラフ化する期間やグループ化の条件などを設定します。
今回の場合、「サービス」でグループ化したグラフを見ると、EC2インスタンスの料金はそんなに変わらず、CloudWatchのコストが増加していることがわかりました。

CostExplorer画面

請求書の確認

これまで上記のCostExplorerくらいしかあまり見ていなかったのですが、よくわからなかったので請求書を確認することにしました。

コンソールにログインして、右上アカウント名->[マイ請求ダッシュボード]を選択すると、請求コンソール(Billing Management Console) のホーム画面に遷移します。
あるいは、サービス一覧から「AWSコスト管理」メニューの[AWS Budgets]を選択すると、請求コンソール下の「AWS Budgets」に遷移します。
いずれも左ペインにコスト・支払い関連のメニューが表示されるので、そこから[請求書]を選択すると、請求書の画面が開きます。

なお、請求コンソールとAWSコスト管理の画面が互いに絡み合っていてサービスメニューと画面の構成がわかりにくいです。AWSコスト管理のメニューからは、下部の[請求コンソール]を選択すると請求コンソールに遷移できます。

請求コンソールメニュー

ともあれ請求書のページを開くと、請求内容のどの枠でコストがかかっているのかがわかります。
今回は、CloudWatchの「$0.30 per metric-month for the first 10,000 metrics」という項目で料金がかかっていました。

請求の詳細

CloudWatchの料金体系を確認

CloudWatchの料金体系については、以下のページで説明されています。
https://aws.amazon.com/jp/cloudwatch/pricing/

上記ページの説明は無料利用枠と有料利用枠に分かれています。
請求書で確認した項目に照らして、メトリクスの利用料金を確認します。
請求の内容から考えて、関連する部分は以下のような内容でした。

  • 基本モニタリングのメトリクス(5分間隔)は無料
  • 詳細モニタリングのメトリクス10個(1分間隔)は無料
  • カスタムメトリックの最初の10,000メトリクスは0.30USD(1メトリクス1か月あたり)

カスタムメトリック(詳細モニタリング?)の数が問題のようです。
特にCloudWatchを必要とはしていないので、有料と知らずに不要な設定を入れてしまっていたようです。

CloudWatchのメトリクス利用状況を確認

コンソールでCloudWatchのページを開き、利用しているメトリクスを確認しました。

CloudWatchのメトリクス利用状況

カスタム名前空間の項目にECS関連のメトリクスがあり、この数マイナス10が請求の対象となっていたことがわかりました。カスタムメトリクスが40あれば、10は無料枠で30が有料枠となり、30×0.30で9USDが請求されるという具合です。
また、メトリクスの名称から、ECSのContainer Insightsに関するメトリクスであることがわかりました。

ECSでContainerInsightsの利用を確認

Container Insightsというのは、ECSでコンテナ化されたアプリケーションの情報を収集する仕組みのようです。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/ContainerInsights.html

コンソールでECSのページを開くと、確かに使用中のクラスターでContainer Insightsが有効になっていました。CloudWatchで収集されたデータを確認することもできました。

Container Insightsの有効化は、クラスター起動時の設定でした。特に調べずに有効化していたようです。
ECSクラスター起動時の設定

ContainerInsightsの停止方法

不要なので停止方法を検討します。
CloudWatch側でメトリックの削除は行えないようです。情報が来なければ課金されず、データの保存期間が終了した時点で削除されるということのようです。
なので、ECS側でContainerInsightsの利用を止めればOKです。

とはいえ、クラスター起動時の設定のみで変更のメニューは無さそうなので、クラスターを再作成することにしました。

  1. コンソールからクラスターを削除。
  2. 同名のクラスターをContainerInsights無効で再作成。
    • 参加していたインスタンスの所属が外れている。
  3. 所属していたインスタンスを再起動。
    • クラスターには参加されなかった。
  4. インスタンスにSSHログインして状況確認。
    • ecs-agentが起動できない模様。
    • tail -F /var/log/ecs/ecs-agent.log にてログを確認。
  5. インスタンスにて以下を実施。
    1. ecsサービスを停止。
    2. /var/lib/ecs/data/ 以下のファイルを別ディレクトリに退避。
    3. ecsサービスを起動。
      • 正常ステータス、acs-agentの稼働を確認。
      • ECSコンソールにてインスタンスの所属を確認。
    4. 再起動によって停止済みになっている各タスク用のコンテナを全て削除。
  6. ECSコンソールにて各タスクを起動。

これでContainerInsights無しでもとのECSの状態になりました。
クラスターを削除する前にタスクを消しておいたほうが良かったですね。

Discussion

taratarataratara

クラスター作り直さなくても、こちらのコマンドで設定変更できましたー!(参考)

aws ecs update-cluster-settings --cluster myCICluster --settings name=containerInsights,value=enabled