Skip to content

Commit d491460

Browse files
authored
feat(aws): Parallelize resolution of aws_iot_ca_certificates (#9808)
#### Summary Use `PreResourceResolver` to call `DescribeCACertificate` rather than calling sequentially
1 parent 45705f1 commit d491460

File tree

1 file changed

+22
-17
lines changed

1 file changed

+22
-17
lines changed

plugins/source/aws/resources/services/iot/ca_certificates.go

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ import (
1414
func CaCertificates() *schema.Table {
1515
tableName := "aws_iot_ca_certificates"
1616
return &schema.Table{
17-
Name: tableName,
18-
Description: `https://docs.aws.amazon.com/iot/latest/apireference/API_CACertificateDescription.html`,
19-
Resolver: fetchIotCaCertificates,
20-
Transform: transformers.TransformWithStruct(&types.CACertificateDescription{}),
21-
Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "iot"),
17+
Name: tableName,
18+
Description: `https://docs.aws.amazon.com/iot/latest/apireference/API_CACertificateDescription.html`,
19+
Resolver: fetchIotCaCertificates,
20+
PreResourceResolver: getCaCertificate,
21+
Transform: transformers.TransformWithStruct(&types.CACertificateDescription{}),
22+
Multiplex: client.ServiceAccountRegionMultiplexer(tableName, "iot"),
2223
Columns: []schema.Column{
2324
client.DefaultAccountIDColumn(false),
2425
client.DefaultRegionColumn(false),
@@ -52,21 +53,25 @@ func fetchIotCaCertificates(ctx context.Context, meta schema.ClientMeta, parent
5253
if err != nil {
5354
return err
5455
}
55-
for _, ca := range page.Certificates {
56-
// TODO: Handle resolution in parallel with PreResourceResolver
57-
cert, err := svc.DescribeCACertificate(ctx, &iot.DescribeCACertificateInput{
58-
CertificateId: ca.CertificateId,
59-
}, func(options *iot.Options) {
60-
options.Region = c.Region
61-
})
62-
if err != nil {
63-
return err
64-
}
65-
res <- cert.CertificateDescription
66-
}
56+
res <- page.Certificates
6757
}
6858
return nil
6959
}
60+
61+
func getCaCertificate(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error {
62+
cl := meta.(*client.Client)
63+
svc := cl.Services().Iot
64+
65+
output, err := svc.DescribeCACertificate(ctx, &iot.DescribeCACertificateInput{
66+
CertificateId: resource.Item.(types.CACertificate).CertificateId,
67+
})
68+
if err != nil {
69+
return err
70+
}
71+
resource.Item = output.CertificateDescription
72+
return nil
73+
}
74+
7075
func ResolveIotCaCertificateCertificates(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error {
7176
i := resource.Item.(*types.CACertificateDescription)
7277
cl := meta.(*client.Client)

0 commit comments

Comments
 (0)