こんにちは。crowdworks.jp SREチームの田中です。 最近じわじわと円安が進み、AWSの料金が気になるこの頃です。
今回はAWS Configで急に料金が増加した件と、その対応についてご紹介します。
朝、AWS Cost Anomaly Detection(AWSコスト異常検知)からお知らせが来てました。
4/18からAWS Configで1日あたり約10USDの増加。結構なお値段ですね。 参考までに、AWS ConfigはAWSリソースの設定を監視、評価、監査し、設定変更を追跡するためのサービスです。
調査
AWS Configの配信先
AWS Configで何もわからなかったので、まずはAWSの記事を参考に配信先のS3をAthenaでクエリし、該当日でリソースタイプ・リソースごとのレコード件数を一覧化しました。
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 Configが2024/4/17に35のリソースタイプをサポートしたリリースを見つけました。 新たにサポートを追加したリソースが増加したリソースと一致しています。
このままだと請求が約300USD/月増えることになります。できれば料金を安く抑えたいですね。 しかし、どうやって対応すれば良いでしょうか?
AWS Configの設定変更
AWSサポートに質問を投げたところ、「AWS Configはリソースごとに記録頻度を連続、または日次に変更できる」との回答をいただきました。
追加された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 Cost Anomaly Detectionにより、AWS Configの料金増加を検出しました。 原因は2024/4/17にリリースされたAWS Configの記録対象リソースが増えたことによるものでした。 記録間隔を日次に変更することにより、 設定変更の検出とコストの増加抑制を両立させました。
We're hiring!
クラウドワークスでは、様々な職種での採用を行っております。ぜひお気軽にご応募ください。