クラウドワークス エンジニアブログ

日本最大級のクラウドソーシング「クラウドワークス」の開発の裏側をお届けするエンジニアブログ

AWS Configのアップデートで課金増えていませんか?

こんにちは。crowdworks.jp SREチームの田中です。 最近じわじわと円安が進み、AWSの料金が気になるこの頃です。

今回はAWS Configで急に料金が増加した件と、その対応についてご紹介します。

朝、AWS Cost Anomaly DetectionAWSコスト異常検知)からお知らせが来てました。

AWS Configが増えてるAWS Cost anomaly summary

4/18からAWS Configで1日あたり約10USDの増加。結構なお値段ですね。 参考までに、AWS ConfigAWSリソースの設定を監視、評価、監査し、設定変更を追跡するためのサービスです。

調査

AWS Configの配信先

AWS Configで何もわからなかったので、まずはAWSの記事を参考に配信先のS3をAthenaでクエリし、該当日でリソースタイプ・リソースごとのレコード件数を一覧化しました。

repost.aws

SELECT
  configurationItem.resourceType,
  configurationItem.resourceId,
  COUNT(configurationItem.resourceId) AS NumberOfChanges
FROM
  cw_log_crowdworks_production.awsconfig
  CROSS JOIN UNNEST(configurationitems) AS t(configurationItem)
WHERE
  "$path" LIKE '%ConfigHistory%'
  AND configurationItem.configurationItemCaptureTime >= '2024-04-22T%'
  AND configurationItem.configurationItemCaptureTime <= '2024-04-23T%'
GROUP BY
  configurationItem.resourceType,
  configurationItem.resourceId
ORDER BY
  NumberOfChanges DESC
LIMIT 10
# resource_type resource_name count
1 AWS::EC2::VPC vpc-12345678 433
2 AWS::EC2::SecurityGroup sg-0123456789abcdef0 429
3 AWS::EC2::Subnet subnet-01234567 244
4 AWS::EC2::Subnet subnet-01234567 232
5 AWS::EC2::SecurityGroup sg-0123456789abcdef0 159
6 AWS::EC2::VPC vpc-12345678 159
7 AWS::EC2::SecurityGroup sg-0123456789abcdef0 98
8 AWS::EC2::Subnet subnet-01234567 91
9 AWS::EC2::Subnet subnet-01234567 78
10 AWS::EC2::VPC vpc-12345678 55

料金増加前の2024/4/16のAWS Configのレコード件数をクエリしてみましたが、1つのリソースに対して多くても4件。 記録される件数が急増していることがわかりました。 では何が料金の増加を引き起こしたのでしょうか?

AWS Configの変更点を確認

AWSに何か変更点があったのでは?と思い調査したところ、以下の記事を見つけました。

aws.amazon.com

AWS Configが2024/4/17に35のリソースタイプをサポートしたリリースを見つけました。 新たにサポートを追加したリソースが増加したリソースと一致しています。

このままだと請求が約300USD/月増えることになります。できれば料金を安く抑えたいですね。 しかし、どうやって対応すれば良いでしょうか?

AWS Configの設定変更

AWSサポートに質問を投げたところ、「AWS Configはリソースごとに記録頻度を連続、または日次に変更できる」との回答をいただきました。

docs.aws.amazon.com

追加されたAWS Configのリソースタイプについて、記録頻度の検討を行いました。 今回のAWSの変更により新たに追加され、頻度の多いリソースについては現在の使用状況であれば、日次の記録でも問題ないとの判断をしました。

また、「Fargateの実行時などにENIをアタッチ・デタッチすることで、AWS Configにレコードが記録されるようになった」という回答もいただきました。 crowdworks.jp ではバッチの実行基盤の一部にFargateを使用しており、結構な頻度でFargateが起動・終了しています。 Fargateの起動が多い環境では、AWS Configのアップデートにより料金が増えそうですね。

なお、現在のcrowdworks.jpのAWS Configの設定では、「カスタマイズ可能なオーバーライドのあるすべてのリソースタイプを記録」という設定としています。 この設定では「このリージョンで現在および将来サポートされるすべてのリソースタイプを記録する」ことを意味するため、今回のようにAWS Configに新たにサポートを追加したリソースが増加した場合、記録対象が増えます。「特定のリソースタイプ」という設定を行なっている場合、今回のような対応は不要となります。

ということでいつもの通りTerraform。 AWS Configの特定のリソースの記録を日次に変更するように変更します。

resource "aws_config_configuration_recorder" "default" {
  name     = data.aws_region.current.name
  role_arn = var.role_arn

  recording_group {
    all_supported = true

    include_global_resource_types = true
  }

  # レコード数の多いリソースの記録を日次に変更する
  # 2024/4/18からAWS Configの取得対象にVPCなどのリソースが追加された。
  # Fargateの実行時などにENIをアタッチ・デタッチするため、AWS Configにレコードが記録されるようになった
  # これにより、デフォルトの設定だとレコード数が多くなり、費用が増加する
  recording_mode {
    recording_mode_override {
      description         = "Daily output of resources with large number of records"
      recording_frequency = "DAILY"
      resource_types = [
        "AWS::EC2::VPC",
        "AWS::EC2::Subnet",
        "AWS::EC2::SecurityGroup",
        "AWS::EC2::NetworkInterface",
      ]
    }
  }
}

設定完了!

設定後のAWS Configの画面

まとめ

AWS Cost Anomaly Detectionにより、AWS Configの料金増加を検出しました。 原因は2024/4/17にリリースされたAWS Configの記録対象リソースが増えたことによるものでした。 記録間隔を日次に変更することにより、 設定変更の検出とコストの増加抑制を両立させました。

We're hiring!

クラウドワークスでは、様々な職種での採用を行っております。ぜひお気軽にご応募ください。

crowdworks.co.jp

© 2016 CrowdWorks, Inc., All rights reserved.