如何使用.NET Core AWS SDK获取S3存储桶容量与SES月度发件量指标
基于.NET Core AWS SDK实现S3、SES指标查询方案
一、获取指定S3存储桶总占用容量
推荐直接通过CloudWatch指标查询,比遍历桶内所有对象累加的方式性能高很多,对应指标为BucketSizeBytes,该指标默认每日更新一次,如需近实时数据可额外兼容遍历对象的实现逻辑。
依赖安装
需先安装对应NuGet包:
Install-Package AWSSDK.CloudWatch Install-Package AWSSDK.S3 # 仅用于桶存在性校验,非必需
代码示例
using Amazon.CloudWatch; using Amazon.CloudWatch.Model; public async Task<long> GetS3BucketTotalSizeAsync(string bucketName, RegionEndpoint region) { var cwClient = new AmazonCloudWatchClient(region); var startTime = DateTime.UtcNow.AddDays(-1); // 指标每日更新,取最近24小时数据即可 var endTime = DateTime.UtcNow; var request = new GetMetricStatisticsRequest { Namespace = "AWS/S3", MetricName = "BucketSizeBytes", Dimensions = new List<Dimension> { new Dimension { Name = "BucketName", Value = bucketName } }, Period = 86400, // 单位秒,单日统计周期 StartTimeUtc = startTime, EndTimeUtc = endTime, Statistics = new List<string> { "Sum" }, Unit = StandardUnit.Bytes }; var response = await cwClient.GetMetricStatisticsAsync(request); // 累加所有存储类型的容量总和 return response.Datapoints.Any() ? (long)response.Datapoints.Sum(p => p.Sum) : 0; }
权限要求:AWS凭证需拥有
cloudwatch:GetMetricStatistics权限。
二、查询SES服务月度邮件发送总量
SES的邮件发送量指标存储在CloudWatch中,对应指标为Send,统计类型选Sum即可得到指定时间范围内的总发送量。
代码示例
using Amazon.CloudWatch; using Amazon.CloudWatch.Model; public async Task<long> GetSesMonthlySendCountAsync(RegionEndpoint region) { var cwClient = new AmazonCloudWatchClient(region); // 时间范围取当月1号0点到当前UTC时间 var startTime = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, 1, 0, 0, 0, DateTimeKind.Utc); var endTime = DateTime.UtcNow; var request = new GetMetricStatisticsRequest { Namespace = "AWS/SES", MetricName = "Send", Period = 86400, // 按天统计后累加 StartTimeUtc = startTime, EndTimeUtc = endTime, Statistics = new List<string> { "Sum" } // 不指定Identity维度即查询整个账号的发送总量,如需查询单个发件地址的量可新增Identity维度 }; var response = await cwClient.GetMetricStatisticsAsync(request); return response.Datapoints.Any() ? (long)response.Datapoints.Sum(p => p.Sum) : 0; }
注意:如果你的SES使用的是多区域部署,需要分别查询每个区域的指标后做汇总。
内容的提问来源于stack exchange,提问作者Carlos Jimenez Bermudez
相关产品推荐
相关产品推荐

