@@ -157,7 +157,10 @@ func newWithDependencies(ctx context.Context, config *Config, awsClient client.C
157157
158158 switch service {
159159 case serviceS3 :
160- collector , err := s3 .New (ctx , config .ScrapeInterval , awsClient , config .AccountID )
160+ collector , err := s3 .New (ctx , & s3.Config {
161+ ScrapeInterval : config .ScrapeInterval ,
162+ AccountID : config .AccountID ,
163+ }, logger , awsClient )
161164 if err != nil {
162165 logger .LogAttrs (ctx , slog .LevelError , "Error creating collector" ,
163166 slog .String ("service" , service ),
@@ -168,11 +171,10 @@ func newWithDependencies(ctx context.Context, config *Config, awsClient client.C
168171 case serviceEC2 :
169172 collector , err := ec2Collector .New (ctx , & ec2Collector.Config {
170173 Regions : regions ,
171- Logger : logger ,
172174 ScrapeInterval : config .ScrapeInterval ,
173175 RegionMap : regionClients ,
174176 AccountID : config .AccountID ,
175- })
177+ }, logger )
176178 if err != nil {
177179 logger .LogAttrs (ctx , slog .LevelError , "Error creating collector" ,
178180 slog .String ("service" , service ),
@@ -181,26 +183,40 @@ func newWithDependencies(ctx context.Context, config *Config, awsClient client.C
181183 }
182184 collectors = append (collectors , collector )
183185 case serviceRDS :
186+ // pricing API for RDS client needs to use always the same region
187+ // as for RDS, the pricing data is only available in the us-east-1
188+ pricingConfig , err := createAWSConfig (ctx , "us-east-1" , config .Profile , config .RoleARN )
189+ if err != nil {
190+ logger .LogAttrs (ctx , slog .LevelError , "Error creating collector" ,
191+ slog .String ("service" , service ),
192+ slog .String ("message" , err .Error ()))
193+ continue
194+ }
184195 awsRDSClient := client .NewAWSClient (client.Config {
185196 PricingService : awsPricing .NewFromConfig (pricingConfig ),
186197 RDSService : rds .NewFromConfig (awsConfig ),
187198 })
188- collector := rdsCollector .New (& rdsCollector.Config {
199+ collector , err := rdsCollector .New (ctx , & rdsCollector.Config {
189200 ScrapeInterval : config .ScrapeInterval ,
190201 Regions : regions ,
191202 RegionMap : regionClients ,
192203 Client : awsRDSClient ,
193204 AccountID : config .AccountID ,
194- })
205+ }, logger )
206+ if err != nil {
207+ logger .LogAttrs (ctx , slog .LevelError , "Error creating collector" ,
208+ slog .String ("service" , service ),
209+ slog .String ("message" , err .Error ()))
210+ continue
211+ }
195212 collectors = append (collectors , collector )
196213 case serviceNATGW :
197214 collector , err := awsgwnat .New (ctx , & awsgwnat.Config {
198215 ScrapeInterval : config .ScrapeInterval ,
199- Logger : logger ,
200216 Regions : regions ,
201217 RegionMap : regionClients ,
202218 AccountID : config .AccountID ,
203- })
219+ }, logger )
204220 if err != nil {
205221 logger .LogAttrs (ctx , slog .LevelError , "Error creating collector" ,
206222 slog .String ("service" , service ),
@@ -209,30 +225,52 @@ func newWithDependencies(ctx context.Context, config *Config, awsClient client.C
209225 }
210226 collectors = append (collectors , collector )
211227 case serviceELB :
228+ // pricing API for ELB client needs to use always the same region
229+ // as the pricing data is only available in us-east-1
230+ elbPricingConfig , err := createAWSConfig (ctx , "us-east-1" , config .Profile , config .RoleARN )
231+ if err != nil {
232+ logger .LogAttrs (ctx , slog .LevelError , "Error creating collector" ,
233+ slog .String ("service" , service ),
234+ slog .String ("message" , err .Error ()))
235+ continue
236+ }
212237 awsELBPricingClient := client .NewAWSClient (client.Config {
213- PricingService : awsPricing .NewFromConfig (pricingConfig ),
238+ PricingService : awsPricing .NewFromConfig (elbPricingConfig ),
214239 })
215- collector := elb .New (& elb.Config {
240+ collector , err := elb .New (ctx , & elb.Config {
216241 Regions : regions ,
217242 PricingClient : awsELBPricingClient ,
218- RegionClients : regionClients ,
243+ RegionMap : regionClients ,
219244 ScrapeInterval : config .ScrapeInterval ,
220- Logger : logger ,
221245 AccountID : config .AccountID ,
222- })
246+ }, logger )
247+ if err != nil {
248+ logger .LogAttrs (ctx , slog .LevelError , "Error creating collector" ,
249+ slog .String ("service" , service ),
250+ slog .String ("message" , err .Error ()))
251+ continue
252+ }
223253 collectors = append (collectors , collector )
224254 case serviceVPC :
255+ // pricing API for VPC client needs to use always the same region
256+ // as for VPC, the pricing data is only available in the us-east-1
257+ pricingConfig , err := createAWSConfig (ctx , "us-east-1" , config .Profile , config .RoleARN )
258+ if err != nil {
259+ logger .LogAttrs (ctx , slog .LevelError , "Error creating collector" ,
260+ slog .String ("service" , service ),
261+ slog .String ("message" , err .Error ()))
262+ continue
263+ }
225264 awsVPCClient := client .NewAWSClient (client.Config {
226265 PricingService : awsPricing .NewFromConfig (pricingConfig ),
227266 EC2Service : ec2 .NewFromConfig (pricingConfig ),
228267 })
229268 collector , err := awsvpc .New (ctx , & awsvpc.Config {
230269 ScrapeInterval : config .ScrapeInterval ,
231- Logger : logger ,
232270 Regions : regions ,
233271 Client : awsVPCClient ,
234272 AccountID : config .AccountID ,
235- })
273+ }, logger )
236274 if err != nil {
237275 logger .LogAttrs (ctx , slog .LevelError , "Error creating collector" ,
238276 slog .String ("service" , service ),
@@ -248,9 +286,8 @@ func newWithDependencies(ctx context.Context, config *Config, awsClient client.C
248286 Regions : regions ,
249287 RegionMap : regionClients ,
250288 Client : awsMSKClient ,
251- Logger : logger ,
252289 AccountID : config .AccountID ,
253- })
290+ }, logger )
254291 if err != nil {
255292 logger .LogAttrs (ctx , slog .LevelError , "Error creating collector" ,
256293 slog .String ("service" , service ),
0 commit comments