From 6671c990542e3c170cbb1b57a86f01d1d500b449 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 28 Nov 2022 16:26:43 -0500 Subject: [PATCH 01/16] Add Resource Explorer service. --- .github/labeler-issue-triage.yml | 2 ++ .github/labeler-pr-triage.yml | 3 +++ infrastructure/repository/labels-service.tf | 1 + internal/conns/awsclient_gen.go | 2 ++ names/consts_gen.go | 1 + names/names_data.csv | 1 + website/allowed-subcategories.txt | 1 + website/docs/guides/custom-service-endpoints.html.md | 1 + 8 files changed, 12 insertions(+) diff --git a/.github/labeler-issue-triage.yml b/.github/labeler-issue-triage.yml index 82507af3ae8..39ea7806af1 100644 --- a/.github/labeler-issue-triage.yml +++ b/.github/labeler-issue-triage.yml @@ -503,6 +503,8 @@ service/rekognition: - '((\*|-)\s*`?|(data|resource)\s+"?)aws_rekognition_' service/resiliencehub: - '((\*|-)\s*`?|(data|resource)\s+"?)aws_resiliencehub_' +service/resourceexplorer2: + - '((\*|-)\s*`?|(data|resource)\s+"?)aws_resourceexplorer2_' service/resourcegroups: - '((\*|-)\s*`?|(data|resource)\s+"?)aws_resourcegroups_' service/resourcegroupstaggingapi: diff --git a/.github/labeler-pr-triage.yml b/.github/labeler-pr-triage.yml index 433300aabef..52d09f7225f 100644 --- a/.github/labeler-pr-triage.yml +++ b/.github/labeler-pr-triage.yml @@ -818,6 +818,9 @@ service/rekognition: service/resiliencehub: - 'internal/service/resiliencehub/**/*' - 'website/**/resiliencehub_*' +service/resourceexplorer2: + - 'internal/service/resourceexplorer2/**/*' + - 'website/**/resourceexplorer2_*' service/resourcegroups: - 'internal/service/resourcegroups/**/*' - 'website/**/resourcegroups_*' diff --git a/infrastructure/repository/labels-service.tf b/infrastructure/repository/labels-service.tf index f31bd1b791e..69463c4c94d 100644 --- a/infrastructure/repository/labels-service.tf +++ b/infrastructure/repository/labels-service.tf @@ -239,6 +239,7 @@ variable "service_labels" { "redshiftserverless", "rekognition", "resiliencehub", + "resourceexplorer2", "resourcegroups", "resourcegroupstaggingapi", "robomaker", diff --git a/internal/conns/awsclient_gen.go b/internal/conns/awsclient_gen.go index f8ce6519441..84a5458964a 100644 --- a/internal/conns/awsclient_gen.go +++ b/internal/conns/awsclient_gen.go @@ -12,6 +12,7 @@ import ( "github.com/aws/aws-sdk-go-v2/service/ivschat" "github.com/aws/aws-sdk-go-v2/service/kendra" "github.com/aws/aws-sdk-go-v2/service/medialive" + "github.com/aws/aws-sdk-go-v2/service/resourceexplorer2" "github.com/aws/aws-sdk-go-v2/service/rolesanywhere" "github.com/aws/aws-sdk-go-v2/service/route53domains" s3control_sdkv2 "github.com/aws/aws-sdk-go-v2/service/s3control" @@ -568,6 +569,7 @@ type AWSClient struct { RedshiftServerlessConn *redshiftserverless.RedshiftServerless RekognitionConn *rekognition.Rekognition ResilienceHubConn *resiliencehub.ResilienceHub + ResourceExplorer2Client *resourceexplorer2.Client ResourceGroupsConn *resourcegroups.ResourceGroups ResourceGroupsTaggingAPIConn *resourcegroupstaggingapi.ResourceGroupsTaggingAPI RoboMakerConn *robomaker.RoboMaker diff --git a/names/consts_gen.go b/names/consts_gen.go index 365e9fb3882..7a02b2fbd7f 100644 --- a/names/consts_gen.go +++ b/names/consts_gen.go @@ -237,6 +237,7 @@ const ( RedshiftServerless = "redshiftserverless" Rekognition = "rekognition" ResilienceHub = "resiliencehub" + ResourceExplorer2 = "resourceexplorer2" ResourceGroups = "resourcegroups" ResourceGroupsTaggingAPI = "resourcegroupstaggingapi" RoboMaker = "robomaker" diff --git a/names/names_data.csv b/names/names_data.csv index 4ccd0c72aaf..a0a5372dfda 100644 --- a/names/names_data.csv +++ b/names/names_data.csv @@ -283,6 +283,7 @@ redshift-data,redshiftdata,redshiftdataapiservice,redshiftdata,,redshiftdata,,re redshift-serverless,redshiftserverless,redshiftserverless,redshiftserverless,,redshiftserverless,,,RedshiftServerless,RedshiftServerless,,1,,,aws_redshiftserverless_,,redshiftserverless_,Redshift Serverless,Amazon,,,,, rekognition,rekognition,rekognition,rekognition,,rekognition,,,Rekognition,Rekognition,,1,,,aws_rekognition_,,rekognition_,Rekognition,Amazon,,,,, resiliencehub,resiliencehub,resiliencehub,resiliencehub,,resiliencehub,,,ResilienceHub,ResilienceHub,,1,,,aws_resiliencehub_,,resiliencehub_,Resilience Hub,AWS,,,,, +resource-explorer-2,resourceexplorer2,resourceexplorer2,resourceexplorer2,,resourceexplorer2,,,ResourceExplorer2,ResourceExplorer2,,,2,,aws_resourceexplorer2_,,resourceexplorer2_,Resource Explorer,AWS,,,,, resource-groups,resourcegroups,resourcegroups,resourcegroups,,resourcegroups,,,ResourceGroups,ResourceGroups,,1,,,aws_resourcegroups_,,resourcegroups_,Resource Groups,AWS,,,,, resourcegroupstaggingapi,resourcegroupstaggingapi,resourcegroupstaggingapi,resourcegroupstaggingapi,,resourcegroupstaggingapi,,resourcegroupstagging,ResourceGroupsTaggingAPI,ResourceGroupsTaggingAPI,,1,,,aws_resourcegroupstaggingapi_,,resourcegroupstaggingapi_,Resource Groups Tagging,AWS,,,,, robomaker,robomaker,robomaker,robomaker,,robomaker,,,RoboMaker,RoboMaker,,1,,,aws_robomaker_,,robomaker_,RoboMaker,AWS,,,,, diff --git a/website/allowed-subcategories.txt b/website/allowed-subcategories.txt index 2c6e96c9eca..edc437489f9 100644 --- a/website/allowed-subcategories.txt +++ b/website/allowed-subcategories.txt @@ -240,6 +240,7 @@ Redshift Data Redshift Serverless Rekognition Resilience Hub +Resource Explorer Resource Groups Resource Groups Tagging RoboMaker diff --git a/website/docs/guides/custom-service-endpoints.html.md b/website/docs/guides/custom-service-endpoints.html.md index 2b78fb91b61..e36eae550e2 100644 --- a/website/docs/guides/custom-service-endpoints.html.md +++ b/website/docs/guides/custom-service-endpoints.html.md @@ -304,6 +304,7 @@ provider "aws" {
  • redshiftserverless
  • rekognition
  • resiliencehub
  • +
  • resourceexplorer2
  • resourcegroups
  • resourcegroupstaggingapi (or resourcegroupstagging)
  • robomaker
  • From 9ade3416ca4e51d1da8aaeabfa4895e668351aeb Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 28 Nov 2022 18:35:15 -0500 Subject: [PATCH 02/16] 'clientConns' -> 'sdkv1Conns' and add 'sdkv2Conns'. --- internal/conns/config.go | 2 +- internal/conns/config_gen.go | 26 +++++++++++++++++++++++- internal/generate/clientconfig/file.tmpl | 19 ++++++++++++++++- internal/generate/clientconfig/main.go | 20 ++++++++---------- 4 files changed, 52 insertions(+), 15 deletions(-) diff --git a/internal/conns/config.go b/internal/conns/config.go index ce96dd451ce..d4ab04ac016 100644 --- a/internal/conns/config.go +++ b/internal/conns/config.go @@ -194,7 +194,7 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS DNSSuffix = p.DNSSuffix() } - c.clientConns(client, sess) + c.sdkv1Conns(client, sess) client.AccountID = accountID client.DefaultTagsConfig = c.DefaultTagsConfig diff --git a/internal/conns/config_gen.go b/internal/conns/config_gen.go index 54d3d5fd132..64913c1de4f 100644 --- a/internal/conns/config_gen.go +++ b/internal/conns/config_gen.go @@ -2,6 +2,10 @@ package conns import ( + aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/auditmanager" + "github.com/aws/aws-sdk-go-v2/service/ivschat" + "github.com/aws/aws-sdk-go-v2/service/resourceexplorer2" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/accessanalyzer" @@ -291,7 +295,8 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -func (c *Config) clientConns(client *AWSClient, sess *session.Session) { +// sdkv1Conns initializes AWS SDK for Go v1 clients. +func (c *Config) sdkv1Conns(client *AWSClient, sess *session.Session) { client.ACMConn = acm.New(sess.Copy(&aws.Config{Endpoint: aws.String(c.Endpoints[names.ACM])})) client.ACMPCAConn = acmpca.New(sess.Copy(&aws.Config{Endpoint: aws.String(c.Endpoints[names.ACMPCA])})) client.AMPConn = prometheusservice.New(sess.Copy(&aws.Config{Endpoint: aws.String(c.Endpoints[names.AMP])})) @@ -577,3 +582,22 @@ func (c *Config) clientConns(client *AWSClient, sess *session.Session) { client.WorkSpacesWebConn = workspacesweb.New(sess.Copy(&aws.Config{Endpoint: aws.String(c.Endpoints[names.WorkSpacesWeb])})) client.XRayConn = xray.New(sess.Copy(&aws.Config{Endpoint: aws.String(c.Endpoints[names.XRay])})) } + +// sdkv2Conns initializes AWS SDK for Go v2 clients. +func (c *Config) sdkv2Conns(client *AWSClient, cfg aws_sdkv2.Config) { + client.AuditManagerClient = auditmanager.NewFromConfig(cfg, func(o *auditmanager.Options) { + if endpoint := c.Endpoints[names.AuditManager]; endpoint != "" { + o.EndpointResolver = auditmanager.EndpointResolverFromURL(endpoint) + } + }) + client.IVSChatClient = ivschat.NewFromConfig(cfg, func(o *ivschat.Options) { + if endpoint := c.Endpoints[names.IVSChat]; endpoint != "" { + o.EndpointResolver = ivschat.EndpointResolverFromURL(endpoint) + } + }) + client.ResourceExplorer2Client = resourceexplorer2.NewFromConfig(cfg, func(o *resourceexplorer2.Options) { + if endpoint := c.Endpoints[names.ResourceExplorer2]; endpoint != "" { + o.EndpointResolver = resourceexplorer2.EndpointResolverFromURL(endpoint) + } + }) +} diff --git a/internal/generate/clientconfig/file.tmpl b/internal/generate/clientconfig/file.tmpl index 1e235a05907..61ef9eef626 100644 --- a/internal/generate/clientconfig/file.tmpl +++ b/internal/generate/clientconfig/file.tmpl @@ -4,14 +4,31 @@ package conns import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" + aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" {{- range .Services }} "github.com/aws/aws-sdk-go{{ if eq .SDKVersion "2" }}-v2{{ end }}/service/{{ .GoPackage }}" {{- end }} "github.com/hashicorp/terraform-provider-aws/names" ) -func (c *Config) clientConns(client *AWSClient, sess *session.Session) { +// sdkv1Conns initializes AWS SDK for Go v1 clients. +func (c *Config) sdkv1Conns(client *AWSClient, sess *session.Session) { {{- range .Services }} + {{- if eq .SDKVersion "1" }} client.{{ .ProviderNameUpper }}Conn = {{ .GoPackage }}.New(sess.Copy(&aws.Config{Endpoint: aws.String(c.Endpoints[names.{{ .ProviderNameUpper }}])})) {{- end }} + {{- end }} } + +// sdkv2Conns initializes AWS SDK for Go v2 clients. +func (c *Config) sdkv2Conns(client *AWSClient, cfg aws_sdkv2.Config) { + {{- range .Services }} + {{- if eq .SDKVersion "2" }} + client.{{ .ProviderNameUpper }}Client = {{ .GoPackage }}.NewFromConfig(cfg, func(o *{{ .GoPackage }}.Options) { + if endpoint := c.Endpoints[names.{{ .ProviderNameUpper }}]; endpoint != "" { + o.EndpointResolver = {{ .GoPackage }}.EndpointResolverFromURL(endpoint) + } + }) + {{- end }} + {{- end }} +} \ No newline at end of file diff --git a/internal/generate/clientconfig/main.go b/internal/generate/clientconfig/main.go index d899f451534..1c14ca84caa 100644 --- a/internal/generate/clientconfig/main.go +++ b/internal/generate/clientconfig/main.go @@ -70,19 +70,15 @@ func main() { SDKVersion: "1", GoPackage: l[names.ColGoV1Package], }) + } else if l[names.ColClientSDKV2] != "" { + td.Services = append(td.Services, ServiceDatum{ + ProviderNameUpper: l[names.ColProviderNameUpper], + SDKVersion: "2", + GoPackage: l[names.ColGoV2Package], + }) } - // if l[names.ColClientSDKV2] != "" { - // sd := ServiceDatum{ - // ProviderNameUpper: l[names.ColProviderNameUpper], - // SDKVersion: "2", - // GoPackage: l[names.ColGoV2Package], - // } - // if l[names.ColClientSDKV1] != "" { - // // Use `sdkv2` instead of `v2` to prevent collisions with e.g., `elbv2` - // sd.GoPackage = fmt.Sprintf("%s_sdkv2", l[names.ColGoV2Package]) - // } - // td.Services = append(td.Services, sd) - // } + // TODO: Lazy v2 clients for those with both SDK v1 and v2 clients. + // See internal/generate/awsclient/main.go. } sort.SliceStable(td.Services, func(i, j int) bool { From ad83ec5c1a8a4f620c22edacd6caa73caa1329c3 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Tue, 29 Nov 2022 15:54:36 -0500 Subject: [PATCH 03/16] github.com/aws/aws-sdk-go-v2/service/resourceexplorer2@v1.0.2 --- go.mod | 1 + go.sum | 2 ++ 2 files changed, 3 insertions(+) diff --git a/go.mod b/go.mod index a10578c9738..1d4d43d5fe1 100644 --- a/go.mod +++ b/go.mod @@ -18,6 +18,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/kendra v1.36.0 github.com/aws/aws-sdk-go-v2/service/medialive v1.24.2 github.com/aws/aws-sdk-go-v2/service/rds v1.31.0 + github.com/aws/aws-sdk-go-v2/service/resourceexplorer2 v1.0.2 github.com/aws/aws-sdk-go-v2/service/rolesanywhere v1.0.12 github.com/aws/aws-sdk-go-v2/service/route53domains v1.12.19 github.com/aws/aws-sdk-go-v2/service/s3control v1.26.1 diff --git a/go.sum b/go.sum index a386ba03885..5f62fb2ddf1 100644 --- a/go.sum +++ b/go.sum @@ -76,6 +76,8 @@ github.com/aws/aws-sdk-go-v2/service/medialive v1.24.2 h1:qQGI444VIllp+BlfPUAEO7 github.com/aws/aws-sdk-go-v2/service/medialive v1.24.2/go.mod h1:ToDxovZoXnH2AbxzTQ26ySXjpmME5gGa7aiH2rnAVv8= github.com/aws/aws-sdk-go-v2/service/rds v1.31.0 h1:lx8pflhN7oogISvAorwqPGFHN7eiVlGEwk21ThYcyoA= github.com/aws/aws-sdk-go-v2/service/rds v1.31.0/go.mod h1:wPFe1Cj3nZWmNWKKdkXw961l1dJheTZQ5JjPImqbMuI= +github.com/aws/aws-sdk-go-v2/service/resourceexplorer2 v1.0.2 h1:IirJpFu/wVrDitXuapCp+JqU+tSen1WwtJMvtrVzzyI= +github.com/aws/aws-sdk-go-v2/service/resourceexplorer2 v1.0.2/go.mod h1:24lb9a+B8Ckl81TXecnjnKmgAMOW0Dgn7yLTNDejOgw= github.com/aws/aws-sdk-go-v2/service/rolesanywhere v1.0.12 h1:lP9dP8V4ow1YKEZt/zcPfHu2/lAWGmW1pIzgt2iPGRY= github.com/aws/aws-sdk-go-v2/service/rolesanywhere v1.0.12/go.mod h1:pj8fwktY8PHz60AlgCg/Mwb3nG7JDomW/4eeeud+66w= github.com/aws/aws-sdk-go-v2/service/route53domains v1.12.19 h1:UNe7/1LUyQ9udyVIdAg++HfuqnBgm3Or8f2nFCfSl0U= From abb82b94a2d9f23de00e0e618e11e8888d57ab9c Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Tue, 29 Nov 2022 16:29:01 -0500 Subject: [PATCH 04/16] Generate initialization of most AWS SDK v2 clients. --- internal/conns/config.go | 95 +++--------------------------------- internal/conns/config_gen.go | 66 +++++++++++++++++++++++++ names/names_data.csv | 22 ++++----- 3 files changed, 83 insertions(+), 100 deletions(-) diff --git a/internal/conns/config.go b/internal/conns/config.go index d4ab04ac016..2cedd399cc8 100644 --- a/internal/conns/config.go +++ b/internal/conns/config.go @@ -7,22 +7,10 @@ import ( "github.com/aws/aws-sdk-go-v2/feature/ec2/imds" "github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs" - "github.com/aws/aws-sdk-go-v2/service/comprehend" - "github.com/aws/aws-sdk-go-v2/service/computeoptimizer" - "github.com/aws/aws-sdk-go-v2/service/fis" - "github.com/aws/aws-sdk-go-v2/service/identitystore" - "github.com/aws/aws-sdk-go-v2/service/inspector2" - "github.com/aws/aws-sdk-go-v2/service/ivschat" - "github.com/aws/aws-sdk-go-v2/service/kendra" - "github.com/aws/aws-sdk-go-v2/service/medialive" "github.com/aws/aws-sdk-go-v2/service/rds" - "github.com/aws/aws-sdk-go-v2/service/rolesanywhere" "github.com/aws/aws-sdk-go-v2/service/route53domains" "github.com/aws/aws-sdk-go-v2/service/s3control" - "github.com/aws/aws-sdk-go-v2/service/scheduler" - "github.com/aws/aws-sdk-go-v2/service/sesv2" "github.com/aws/aws-sdk-go-v2/service/ssm" - "github.com/aws/aws-sdk-go-v2/service/transcribe" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/aws/aws-sdk-go/aws/request" @@ -145,7 +133,7 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS cfg, err := awsbase.GetAwsConfig(ctx, &awsbaseConfig) if err != nil { - return nil, diag.Errorf("error configuring Terraform AWS Provider: %s", err) + return nil, diag.Errorf("configuring Terraform AWS Provider: %s", err) } if !c.SkipRegionValidation { @@ -157,12 +145,12 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS sess, err := awsbasev1.GetSession(&cfg, &awsbaseConfig) if err != nil { - return nil, diag.Errorf("error creating AWS SDK v1 session: %s", err) + return nil, diag.Errorf("creating AWS SDK v1 session: %s", err) } accountID, partition, err := awsbase.GetAwsAccountIDAndPartition(ctx, cfg, &awsbaseConfig) if err != nil { - return nil, diag.Errorf("error retrieving account details: %s", err) + return nil, diag.Errorf("retrieving AWS account details: %s", err) } if accountID == "" { @@ -172,7 +160,7 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS if len(c.ForbiddenAccountIds) > 0 { for _, forbiddenAccountID := range c.AllowedAccountIds { if accountID == forbiddenAccountID { - return nil, diag.Errorf("AWS Account ID not allowed: %s", accountID) + return nil, diag.Errorf("AWS account ID not allowed: %s", accountID) } } } @@ -185,7 +173,7 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS } } if !found { - return nil, diag.Errorf("AWS Account ID not allowed: %s", accountID) + return nil, diag.Errorf("AWS account ID not allowed: %s", accountID) } } @@ -195,6 +183,7 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS } c.sdkv1Conns(client, sess) + c.sdkv2Conns(client, cfg) client.AccountID = accountID client.DefaultTagsConfig = c.DefaultTagsConfig @@ -206,60 +195,6 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS client.Session = sess client.TerraformVersion = c.TerraformVersion - client.ComprehendClient = comprehend.NewFromConfig(cfg, func(o *comprehend.Options) { - if endpoint := c.Endpoints[names.Comprehend]; endpoint != "" { - o.EndpointResolver = comprehend.EndpointResolverFromURL(endpoint) - } - }) - - client.ComputeOptimizerClient = computeoptimizer.NewFromConfig(cfg, func(o *computeoptimizer.Options) { - if endpoint := c.Endpoints[names.ComputeOptimizer]; endpoint != "" { - o.EndpointResolver = computeoptimizer.EndpointResolverFromURL(endpoint) - } - }) - - client.FISClient = fis.NewFromConfig(cfg, func(o *fis.Options) { - if endpoint := c.Endpoints[names.FIS]; endpoint != "" { - o.EndpointResolver = fis.EndpointResolverFromURL(endpoint) - } - }) - - client.IdentityStoreClient = identitystore.NewFromConfig(cfg, func(o *identitystore.Options) { - if endpoint := c.Endpoints[names.IdentityStore]; endpoint != "" { - o.EndpointResolver = identitystore.EndpointResolverFromURL(endpoint) - } - }) - - client.Inspector2Client = inspector2.NewFromConfig(cfg, func(o *inspector2.Options) { - if endpoint := c.Endpoints[names.Inspector2]; endpoint != "" { - o.EndpointResolver = inspector2.EndpointResolverFromURL(endpoint) - } - }) - - client.IVSChatClient = ivschat.NewFromConfig(cfg, func(o *ivschat.Options) { - if endpoint := c.Endpoints[names.IVSChat]; endpoint != "" { - o.EndpointResolver = ivschat.EndpointResolverFromURL(endpoint) - } - }) - - client.KendraClient = kendra.NewFromConfig(cfg, func(o *kendra.Options) { - if endpoint := c.Endpoints[names.Kendra]; endpoint != "" { - o.EndpointResolver = kendra.EndpointResolverFromURL(endpoint) - } - }) - - client.MediaLiveClient = medialive.NewFromConfig(cfg, func(o *medialive.Options) { - if endpoint := c.Endpoints[names.MediaLive]; endpoint != "" { - o.EndpointResolver = medialive.EndpointResolverFromURL(endpoint) - } - }) - - client.RolesAnywhereClient = rolesanywhere.NewFromConfig(cfg, func(o *rolesanywhere.Options) { - if endpoint := c.Endpoints[names.RolesAnywhere]; endpoint != "" { - o.EndpointResolver = rolesanywhere.EndpointResolverFromURL(endpoint) - } - }) - client.Route53DomainsClient = route53domains.NewFromConfig(cfg, func(o *route53domains.Options) { if endpoint := c.Endpoints[names.Route53Domains]; endpoint != "" { o.EndpointResolver = route53domains.EndpointResolverFromURL(endpoint) @@ -275,24 +210,6 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS } }) - client.SchedulerClient = scheduler.NewFromConfig(cfg, func(o *scheduler.Options) { - if endpoint := c.Endpoints[names.Scheduler]; endpoint != "" { - o.EndpointResolver = scheduler.EndpointResolverFromURL(endpoint) - } - }) - - client.SESV2Client = sesv2.NewFromConfig(cfg, func(o *sesv2.Options) { - if endpoint := c.Endpoints[names.SESV2]; endpoint != "" { - o.EndpointResolver = sesv2.EndpointResolverFromURL(endpoint) - } - }) - - client.TranscribeClient = transcribe.NewFromConfig(cfg, func(o *transcribe.Options) { - if endpoint := c.Endpoints[names.Transcribe]; endpoint != "" { - o.EndpointResolver = transcribe.EndpointResolverFromURL(endpoint) - } - }) - client.logsClient.init(&cfg, func() *cloudwatchlogs.Client { return cloudwatchlogs.NewFromConfig(cfg, func(o *cloudwatchlogs.Options) { if endpoint := c.Endpoints[names.Logs]; endpoint != "" { diff --git a/internal/conns/config_gen.go b/internal/conns/config_gen.go index 64913c1de4f..00006ca8ee0 100644 --- a/internal/conns/config_gen.go +++ b/internal/conns/config_gen.go @@ -4,8 +4,19 @@ package conns import ( aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/auditmanager" + "github.com/aws/aws-sdk-go-v2/service/comprehend" + "github.com/aws/aws-sdk-go-v2/service/computeoptimizer" + "github.com/aws/aws-sdk-go-v2/service/fis" + "github.com/aws/aws-sdk-go-v2/service/identitystore" + "github.com/aws/aws-sdk-go-v2/service/inspector2" "github.com/aws/aws-sdk-go-v2/service/ivschat" + "github.com/aws/aws-sdk-go-v2/service/kendra" + "github.com/aws/aws-sdk-go-v2/service/medialive" "github.com/aws/aws-sdk-go-v2/service/resourceexplorer2" + "github.com/aws/aws-sdk-go-v2/service/rolesanywhere" + "github.com/aws/aws-sdk-go-v2/service/scheduler" + "github.com/aws/aws-sdk-go-v2/service/sesv2" + "github.com/aws/aws-sdk-go-v2/service/transcribe" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/accessanalyzer" @@ -590,14 +601,69 @@ func (c *Config) sdkv2Conns(client *AWSClient, cfg aws_sdkv2.Config) { o.EndpointResolver = auditmanager.EndpointResolverFromURL(endpoint) } }) + client.ComprehendClient = comprehend.NewFromConfig(cfg, func(o *comprehend.Options) { + if endpoint := c.Endpoints[names.Comprehend]; endpoint != "" { + o.EndpointResolver = comprehend.EndpointResolverFromURL(endpoint) + } + }) + client.ComputeOptimizerClient = computeoptimizer.NewFromConfig(cfg, func(o *computeoptimizer.Options) { + if endpoint := c.Endpoints[names.ComputeOptimizer]; endpoint != "" { + o.EndpointResolver = computeoptimizer.EndpointResolverFromURL(endpoint) + } + }) + client.FISClient = fis.NewFromConfig(cfg, func(o *fis.Options) { + if endpoint := c.Endpoints[names.FIS]; endpoint != "" { + o.EndpointResolver = fis.EndpointResolverFromURL(endpoint) + } + }) client.IVSChatClient = ivschat.NewFromConfig(cfg, func(o *ivschat.Options) { if endpoint := c.Endpoints[names.IVSChat]; endpoint != "" { o.EndpointResolver = ivschat.EndpointResolverFromURL(endpoint) } }) + client.IdentityStoreClient = identitystore.NewFromConfig(cfg, func(o *identitystore.Options) { + if endpoint := c.Endpoints[names.IdentityStore]; endpoint != "" { + o.EndpointResolver = identitystore.EndpointResolverFromURL(endpoint) + } + }) + client.Inspector2Client = inspector2.NewFromConfig(cfg, func(o *inspector2.Options) { + if endpoint := c.Endpoints[names.Inspector2]; endpoint != "" { + o.EndpointResolver = inspector2.EndpointResolverFromURL(endpoint) + } + }) + client.KendraClient = kendra.NewFromConfig(cfg, func(o *kendra.Options) { + if endpoint := c.Endpoints[names.Kendra]; endpoint != "" { + o.EndpointResolver = kendra.EndpointResolverFromURL(endpoint) + } + }) + client.MediaLiveClient = medialive.NewFromConfig(cfg, func(o *medialive.Options) { + if endpoint := c.Endpoints[names.MediaLive]; endpoint != "" { + o.EndpointResolver = medialive.EndpointResolverFromURL(endpoint) + } + }) client.ResourceExplorer2Client = resourceexplorer2.NewFromConfig(cfg, func(o *resourceexplorer2.Options) { if endpoint := c.Endpoints[names.ResourceExplorer2]; endpoint != "" { o.EndpointResolver = resourceexplorer2.EndpointResolverFromURL(endpoint) } }) + client.RolesAnywhereClient = rolesanywhere.NewFromConfig(cfg, func(o *rolesanywhere.Options) { + if endpoint := c.Endpoints[names.RolesAnywhere]; endpoint != "" { + o.EndpointResolver = rolesanywhere.EndpointResolverFromURL(endpoint) + } + }) + client.SESV2Client = sesv2.NewFromConfig(cfg, func(o *sesv2.Options) { + if endpoint := c.Endpoints[names.SESV2]; endpoint != "" { + o.EndpointResolver = sesv2.EndpointResolverFromURL(endpoint) + } + }) + client.SchedulerClient = scheduler.NewFromConfig(cfg, func(o *scheduler.Options) { + if endpoint := c.Endpoints[names.Scheduler]; endpoint != "" { + o.EndpointResolver = scheduler.EndpointResolverFromURL(endpoint) + } + }) + client.TranscribeClient = transcribe.NewFromConfig(cfg, func(o *transcribe.Options) { + if endpoint := c.Endpoints[names.Transcribe]; endpoint != "" { + o.EndpointResolver = transcribe.EndpointResolverFromURL(endpoint) + } + }) } diff --git a/names/names_data.csv b/names/names_data.csv index a0a5372dfda..e533761b7a4 100644 --- a/names/names_data.csv +++ b/names/names_data.csv @@ -80,9 +80,9 @@ codestar-notifications,codestarnotifications,codestarnotifications,codestarnotif cognito-identity,cognitoidentity,cognitoidentity,cognitoidentity,,cognitoidentity,,,CognitoIdentity,CognitoIdentity,,1,,aws_cognito_identity_(?!provider),aws_cognitoidentity_,,cognito_identity_pool,Cognito Identity,Amazon,,,,, cognito-idp,cognitoidp,cognitoidentityprovider,cognitoidentityprovider,,cognitoidp,,cognitoidentityprovider,CognitoIDP,CognitoIdentityProvider,,1,,aws_cognito_(identity_provider|resource|user|risk),aws_cognitoidp_,,cognito_identity_provider;cognito_resource_;cognito_user;cognito_risk,Cognito IDP (Identity Provider),Amazon,,,,, cognito-sync,cognitosync,cognitosync,cognitosync,,cognitosync,,,CognitoSync,CognitoSync,,1,,,aws_cognitosync_,,cognitosync_,Cognito Sync,Amazon,,,,, -comprehend,comprehend,comprehend,comprehend,,comprehend,,,Comprehend,Comprehend,x,,2,,aws_comprehend_,,comprehend_,Comprehend,Amazon,,,,, +comprehend,comprehend,comprehend,comprehend,,comprehend,,,Comprehend,Comprehend,,,2,,aws_comprehend_,,comprehend_,Comprehend,Amazon,,,,, comprehendmedical,comprehendmedical,comprehendmedical,comprehendmedical,,comprehendmedical,,,ComprehendMedical,ComprehendMedical,,1,,,aws_comprehendmedical_,,comprehendmedical_,Comprehend Medical,Amazon,,,,, -compute-optimizer,computeoptimizer,computeoptimizer,computeoptimizer,,computeoptimizer,,,ComputeOptimizer,ComputeOptimizer,x,,2,,aws_computeoptimizer_,,computeoptimizer_,Compute Optimizer,AWS,,,,, +compute-optimizer,computeoptimizer,computeoptimizer,computeoptimizer,,computeoptimizer,,,ComputeOptimizer,ComputeOptimizer,,,2,,aws_computeoptimizer_,,computeoptimizer_,Compute Optimizer,AWS,,,,, configservice,configservice,configservice,configservice,,configservice,,config,ConfigService,ConfigService,,1,,aws_config_,aws_configservice_,,config_,Config,AWS,,,,, connect,connect,connect,connect,,connect,,,Connect,Connect,,1,,,aws_connect_,,connect_,Connect,Amazon,,,,, connect-contact-lens,connectcontactlens,connectcontactlens,connectcontactlens,,connectcontactlens,,,ConnectContactLens,ConnectContactLens,,1,,,aws_connectcontactlens_,,connectcontactlens_,Connect Contact Lens,Amazon,,,,, @@ -134,7 +134,7 @@ elbv2,elbv2,elbv2,elasticloadbalancingv2,,elbv2,,elasticloadbalancingv2,ELBV2,EL elb,elb,elb,elasticloadbalancing,,elb,,elasticloadbalancing,ELB,ELB,,1,,aws_(app_cookie_stickiness_policy|elb|lb_cookie_stickiness_policy|lb_ssl_negotiation_policy|load_balancer_|proxy_protocol_policy),aws_elb_,,app_cookie_stickiness_policy;elb;lb_cookie_stickiness_policy;lb_ssl_negotiation_policy;load_balancer;proxy_protocol_policy,ELB Classic,,,,,, mediaconnect,mediaconnect,mediaconnect,mediaconnect,,mediaconnect,,,MediaConnect,MediaConnect,,1,,,aws_mediaconnect_,,media_connect_,Elemental MediaConnect,AWS,,,,, mediaconvert,mediaconvert,mediaconvert,mediaconvert,,mediaconvert,,,MediaConvert,MediaConvert,,1,,aws_media_convert_,aws_mediaconvert_,,media_convert_,Elemental MediaConvert,AWS,,,,, -medialive,medialive,medialive,medialive,,medialive,,,MediaLive,MediaLive,x,,2,,aws_medialive_,,medialive_,Elemental MediaLive,AWS,,,,, +medialive,medialive,medialive,medialive,,medialive,,,MediaLive,MediaLive,,,2,,aws_medialive_,,medialive_,Elemental MediaLive,AWS,,,,, mediapackage,mediapackage,mediapackage,mediapackage,,mediapackage,,,MediaPackage,MediaPackage,,1,,aws_media_package_,aws_mediapackage_,,media_package_,Elemental MediaPackage,AWS,,,,, mediapackage-vod,mediapackagevod,mediapackagevod,mediapackagevod,,mediapackagevod,,,MediaPackageVOD,MediaPackageVod,,1,,,aws_mediapackagevod_,,mediapackagevod_,Elemental MediaPackage VOD,AWS,,,,, mediastore,mediastore,mediastore,mediastore,,mediastore,,,MediaStore,MediaStore,,1,,aws_media_store_,aws_mediastore_,,media_store_,Elemental MediaStore,AWS,,,,, @@ -147,7 +147,7 @@ emr-serverless,emrserverless,emrserverless,emrserverless,,emrserverless,,,EMRSer ,,,,,,,,,,,,,,,,,End-of-Support Migration Program (EMP) for Windows Server,AWS,x,,,,No SDK support events,events,eventbridge,eventbridge,,events,,eventbridge;cloudwatchevents,Events,EventBridge,,1,,aws_cloudwatch_event_,aws_events_,,cloudwatch_event_,EventBridge,Amazon,,,,, schemas,schemas,schemas,schemas,,schemas,,,Schemas,Schemas,,1,,,aws_schemas_,,schemas_,EventBridge Schemas,Amazon,,,,, -fis,fis,fis,fis,,fis,,,FIS,FIS,x,,2,,aws_fis_,,fis_,FIS (Fault Injection Simulator),AWS,,,,, +fis,fis,fis,fis,,fis,,,FIS,FIS,,,2,,aws_fis_,,fis_,FIS (Fault Injection Simulator),AWS,,,,, finspace,finspace,finspace,finspace,,finspace,,,FinSpace,Finspace,,1,,,aws_finspace_,,finspace_,FinSpace,Amazon,,,,, finspace-data,finspacedata,finspacedata,finspacedata,,finspacedata,,,FinSpaceData,FinSpaceData,,1,,,aws_finspacedata_,,finspacedata_,FinSpace Data,Amazon,,,,, fms,fms,fms,fms,,fms,,,FMS,FMS,,1,,,aws_fms_,,fms_,FMS (Firewall Manager),AWS,,,,, @@ -168,7 +168,7 @@ honeycode,honeycode,honeycode,honeycode,,honeycode,,,Honeycode,Honeycode,,1,,,aw iam,iam,iam,iam,,iam,,,IAM,IAM,,1,,,aws_iam_,,iam_,IAM (Identity & Access Management),AWS,,,AWS_IAM_ENDPOINT,TF_AWS_IAM_ENDPOINT, accessanalyzer,accessanalyzer,accessanalyzer,accessanalyzer,,accessanalyzer,,,AccessAnalyzer,AccessAnalyzer,,1,,,aws_accessanalyzer_,,accessanalyzer_,IAM Access Analyzer,AWS,,,,, inspector,inspector,inspector,inspector,,inspector,,,Inspector,Inspector,,1,,,aws_inspector_,,inspector_,Inspector,Amazon,,,,, -inspector2,inspector2,inspector2,inspector2,,inspector2,,inspectorv2,Inspector2,Inspector2,x,,2,,aws_inspector2_,,inspector2_,Inspector V2,Amazon,,,,, +inspector2,inspector2,inspector2,inspector2,,inspector2,,inspectorv2,Inspector2,Inspector2,,,2,,aws_inspector2_,,inspector2_,Inspector V2,Amazon,,,,, iot1click-devices,iot1clickdevices,iot1clickdevicesservice,iot1clickdevicesservice,,iot1clickdevices,,iot1clickdevicesservice,IoT1ClickDevices,IoT1ClickDevicesService,,1,,,aws_iot1clickdevices_,,iot1clickdevices_,IoT 1-Click Devices,AWS,,,,, iot1click-projects,iot1clickprojects,iot1clickprojects,iot1clickprojects,,iot1clickprojects,,,IoT1ClickProjects,IoT1ClickProjects,,1,,,aws_iot1clickprojects_,,iot1clickprojects_,IoT 1-Click Projects,AWS,,,,, iotanalytics,iotanalytics,iotanalytics,iotanalytics,,iotanalytics,,,IoTAnalytics,IoTAnalytics,,1,,,aws_iotanalytics_,,iotanalytics_,IoT Analytics,AWS,,,,, @@ -193,7 +193,7 @@ iotwireless,iotwireless,iotwireless,iotwireless,,iotwireless,,,IoTWireless,IoTWi ,,,,,,,,,,,,,,,,,IQ,AWS,x,,,,No SDK support ivs,ivs,ivs,ivs,,ivs,,,IVS,IVS,,1,,,aws_ivs_,,ivs_,IVS (Interactive Video),Amazon,,,,, ivschat,ivschat,ivschat,ivschat,,ivschat,,,IVSChat,Ivschat,,,2,,aws_ivschat_,,ivschat_,IVS (Interactive Video) Chat,Amazon,,,,, -kendra,kendra,kendra,kendra,,kendra,,,Kendra,Kendra,x,,2,,aws_kendra_,,kendra_,Kendra,Amazon,,,,, +kendra,kendra,kendra,kendra,,kendra,,,Kendra,Kendra,,,2,,aws_kendra_,,kendra_,Kendra,Amazon,,,,, keyspaces,keyspaces,keyspaces,,,keyspaces,,,Keyspaces,Keyspaces,,1,,,aws_keyspaces_,,keyspaces_,Keyspaces (for Apache Cassandra),Amazon,,,,, kinesis,kinesis,kinesis,kinesis,,kinesis,,,Kinesis,Kinesis,,1,,aws_kinesis_stream,aws_kinesis_,,kinesis_stream,Kinesis,Amazon,,,,, kinesisanalytics,kinesisanalytics,kinesisanalytics,kinesisanalytics,,kinesisanalytics,,,KinesisAnalytics,KinesisAnalytics,,1,,aws_kinesis_analytics_,aws_kinesisanalytics_,,kinesis_analytics_,Kinesis Analytics,Amazon,,,,, @@ -287,7 +287,7 @@ resource-explorer-2,resourceexplorer2,resourceexplorer2,resourceexplorer2,,resou resource-groups,resourcegroups,resourcegroups,resourcegroups,,resourcegroups,,,ResourceGroups,ResourceGroups,,1,,,aws_resourcegroups_,,resourcegroups_,Resource Groups,AWS,,,,, resourcegroupstaggingapi,resourcegroupstaggingapi,resourcegroupstaggingapi,resourcegroupstaggingapi,,resourcegroupstaggingapi,,resourcegroupstagging,ResourceGroupsTaggingAPI,ResourceGroupsTaggingAPI,,1,,,aws_resourcegroupstaggingapi_,,resourcegroupstaggingapi_,Resource Groups Tagging,AWS,,,,, robomaker,robomaker,robomaker,robomaker,,robomaker,,,RoboMaker,RoboMaker,,1,,,aws_robomaker_,,robomaker_,RoboMaker,AWS,,,,, -rolesanywhere,rolesanywhere,rolesanywhere,rolesanywhere,,rolesanywhere,,,RolesAnywhere,RolesAnywhere,x,,2,,aws_rolesanywhere_,,rolesanywhere_,Roles Anywhere,AWS,,,,, +rolesanywhere,rolesanywhere,rolesanywhere,rolesanywhere,,rolesanywhere,,,RolesAnywhere,RolesAnywhere,,,2,,aws_rolesanywhere_,,rolesanywhere_,Roles Anywhere,AWS,,,,, route53,route53,route53,route53,,route53,,,Route53,Route53,x,1,,aws_route53_(?!resolver_),aws_route53_,,route53_delegation_;route53_health_;route53_hosted_;route53_key_;route53_query_;route53_record;route53_traffic_;route53_vpc_;route53_zone,Route 53,Amazon,,,,, route53domains,route53domains,route53domains,route53domains,,route53domains,,,Route53Domains,Route53Domains,x,,2,,aws_route53domains_,,route53domains_,Route 53 Domains,Amazon,,,,, route53-recovery-cluster,route53recoverycluster,route53recoverycluster,route53recoverycluster,,route53recoverycluster,,,Route53RecoveryCluster,Route53RecoveryCluster,,1,,,aws_route53recoverycluster_,,route53recoverycluster_,Route 53 Recovery Cluster,Amazon,,,,, @@ -307,7 +307,7 @@ sagemaker-runtime,sagemakerruntime,sagemakerruntime,sagemakerruntime,,sagemakerr savingsplans,savingsplans,savingsplans,savingsplans,,savingsplans,,,SavingsPlans,SavingsPlans,,1,,,aws_savingsplans_,,savingsplans_,Savings Plans,AWS,,,,, ,,,,,,,,,,,,,,,,,Schema Conversion Tool,AWS,x,,,,No SDK support sdb,sdb,simpledb,,simpledb,sdb,,sdb,SimpleDB,SimpleDB,,1,,aws_simpledb_,aws_sdb_,,simpledb_,SDB (SimpleDB),Amazon,,,,, -scheduler,scheduler,scheduler,scheduler,,scheduler,,,Scheduler,Scheduler,x,,2,,aws_scheduler_,,scheduler_,EventBridge Scheduler,Amazon,,,,, +scheduler,scheduler,scheduler,scheduler,,scheduler,,,Scheduler,Scheduler,,,2,,aws_scheduler_,,scheduler_,EventBridge Scheduler,Amazon,,,,, secretsmanager,secretsmanager,secretsmanager,secretsmanager,,secretsmanager,,,SecretsManager,SecretsManager,,1,,,aws_secretsmanager_,,secretsmanager_,Secrets Manager,AWS,,,,, securityhub,securityhub,securityhub,securityhub,,securityhub,,,SecurityHub,SecurityHub,,1,,,aws_securityhub_,,securityhub_,Security Hub,AWS,,,,, serverlessrepo,serverlessrepo,serverlessapplicationrepository,serverlessapplicationrepository,,serverlessrepo,,serverlessapprepo;serverlessapplicationrepository,ServerlessRepo,ServerlessApplicationRepository,,1,,aws_serverlessapplicationrepository_,aws_serverlessrepo_,,serverlessapplicationrepository_,Serverless Application Repository,AWS,,,,, @@ -315,7 +315,7 @@ servicecatalog,servicecatalog,servicecatalog,servicecatalog,,servicecatalog,,,Se servicecatalog-appregistry,servicecatalogappregistry,appregistry,servicecatalogappregistry,,servicecatalogappregistry,,appregistry,ServiceCatalogAppRegistry,AppRegistry,,1,,,aws_servicecatalogappregistry_,,servicecatalogappregistry_,Service Catalog AppRegistry,AWS,,,,, service-quotas,servicequotas,servicequotas,servicequotas,,servicequotas,,,ServiceQuotas,ServiceQuotas,,1,,,aws_servicequotas_,,servicequotas_,Service Quotas,,,,,, ses,ses,ses,ses,,ses,,,SES,SES,,1,,,aws_ses_,,ses_,SES (Simple Email),Amazon,,,,, -sesv2,sesv2,sesv2,sesv2,,sesv2,,,SESV2,SESV2,x,,2,,aws_sesv2_,,sesv2_,SESv2 (Simple Email V2),Amazon,,,,, +sesv2,sesv2,sesv2,sesv2,,sesv2,,,SESV2,SESV2,,,2,,aws_sesv2_,,sesv2_,SESv2 (Simple Email V2),Amazon,,,,, stepfunctions,stepfunctions,sfn,sfn,,sfn,,stepfunctions,SFN,SFN,,1,,,aws_sfn_,,sfn_,SFN (Step Functions),AWS,,,,, shield,shield,shield,shield,,shield,,,Shield,Shield,x,1,,,aws_shield_,,shield_,Shield,AWS,,,,, signer,signer,signer,signer,,signer,,,Signer,Signer,,1,,,aws_signer_,,signer_,Signer,AWS,,,,, @@ -329,7 +329,7 @@ ssm-contacts,ssmcontacts,ssmcontacts,ssmcontacts,,ssmcontacts,,,SSMContacts,SSMC ssm-incidents,ssmincidents,ssmincidents,ssmincidents,,ssmincidents,,,SSMIncidents,SSMIncidents,,1,,,aws_ssmincidents_,,ssmincidents_,SSM Incident Manager Incidents,AWS,,,,, sso,sso,sso,sso,,sso,,,SSO,SSO,,1,,,aws_sso_,,sso_,SSO (Single Sign-On),AWS,,,,, sso-admin,ssoadmin,ssoadmin,ssoadmin,,ssoadmin,,,SSOAdmin,SSOAdmin,,1,,,aws_ssoadmin_,,ssoadmin_,SSO Admin,AWS,,,,, -identitystore,identitystore,identitystore,identitystore,,identitystore,,,IdentityStore,IdentityStore,x,,2,,aws_identitystore_,,identitystore_,SSO Identity Store,AWS,,,,, +identitystore,identitystore,identitystore,identitystore,,identitystore,,,IdentityStore,IdentityStore,,,2,,aws_identitystore_,,identitystore_,SSO Identity Store,AWS,,,,, sso-oidc,ssooidc,ssooidc,ssooidc,,ssooidc,,,SSOOIDC,SSOOIDC,,1,,,aws_ssooidc_,,ssooidc_,SSO OIDC,AWS,,,,, storagegateway,storagegateway,storagegateway,storagegateway,,storagegateway,,,StorageGateway,StorageGateway,,1,,,aws_storagegateway_,,storagegateway_,Storage Gateway,AWS,,,,, sts,sts,sts,sts,,sts,,,STS,STS,x,1,,aws_caller_identity,aws_sts_,,caller_identity,STS (Security Token),AWS,,,AWS_STS_ENDPOINT,TF_AWS_STS_ENDPOINT, @@ -342,7 +342,7 @@ timestream-query,timestreamquery,timestreamquery,timestreamquery,,timestreamquer timestream-write,timestreamwrite,timestreamwrite,timestreamwrite,,timestreamwrite,,,TimestreamWrite,TimestreamWrite,,1,,,aws_timestreamwrite_,,timestreamwrite_,Timestream Write,Amazon,,,,, ,,,,,,,,,,,,,,,,,Tools for PowerShell,AWS,x,,,,No SDK support ,,,,,,,,,,,,,,,,,Training and Certification,AWS,x,,,,No SDK support -transcribe,transcribe,transcribeservice,transcribe,,transcribe,,transcribeservice,Transcribe,TranscribeService,x,,2,,aws_transcribe_,,transcribe_,Transcribe,Amazon,,,,, +transcribe,transcribe,transcribeservice,transcribe,,transcribe,,transcribeservice,Transcribe,TranscribeService,,,2,,aws_transcribe_,,transcribe_,Transcribe,Amazon,,,,, ,,transcribestreamingservice,transcribestreaming,,transcribestreaming,,transcribestreamingservice,TranscribeStreaming,TranscribeStreamingService,,1,,,aws_transcribestreaming_,,transcribestreaming_,Transcribe Streaming,Amazon,,,,, transfer,transfer,transfer,transfer,,transfer,,,Transfer,Transfer,,1,,,aws_transfer_,,transfer_,Transfer Family,AWS,,,,, ,,,,,transitgateway,ec2,,TransitGateway,,,,,aws_ec2_transit_gateway,aws_transitgateway_,transitgateway_,ec2_transit_gateway,Transit Gateway,AWS,x,x,,,Part of EC2 From 0b2f32a4700ab33f4f47076673c3a739c7a39e62 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Tue, 29 Nov 2022 16:30:42 -0500 Subject: [PATCH 05/16] Run dos2unix on 'names_data.csv'. --- names/names_data.csv | 736 +++++++++++++++++++++---------------------- 1 file changed, 368 insertions(+), 368 deletions(-) diff --git a/names/names_data.csv b/names/names_data.csv index e533761b7a4..559077ef415 100644 --- a/names/names_data.csv +++ b/names/names_data.csv @@ -1,368 +1,368 @@ -AWSCLIV2Command,AWSCLIV2CommandNoDashes,GoV1Package,GoV2Package,ProviderPackageActual,ProviderPackageCorrect,SplitPackageRealPackage,Aliases,ProviderNameUpper,GoV1ClientTypeName,SkipClientGenerate,ClientSDKV1,ClientSDKV2,ResourcePrefixActual,ResourcePrefixCorrect,FilePrefix,DocPrefix,HumanFriendly,Brand,Exclude,AllowedSubcategory,DeprecatedEnvVar,EnvVar,Note -account,account,account,account,,account,,,Account,Account,,1,,,aws_account_,,account_,Account Management,AWS,,,,, -acm,acm,acm,acm,,acm,,,ACM,ACM,,1,,,aws_acm_,,acm_,ACM (Certificate Manager),AWS,,,,, -acm-pca,acmpca,acmpca,acmpca,,acmpca,,,ACMPCA,ACMPCA,,1,,,aws_acmpca_,,acmpca_,ACM PCA (Certificate Manager Private Certificate Authority),AWS,,,,, -alexaforbusiness,alexaforbusiness,alexaforbusiness,alexaforbusiness,,alexaforbusiness,,,AlexaForBusiness,AlexaForBusiness,,1,,,aws_alexaforbusiness_,,alexaforbusiness_,Alexa for Business,,,,,, -amp,amp,prometheusservice,amp,,amp,,prometheus;prometheusservice,AMP,PrometheusService,,1,,aws_prometheus_,aws_amp_,,prometheus_,AMP (Managed Prometheus),Amazon,,,,, -amplify,amplify,amplify,amplify,,amplify,,,Amplify,Amplify,,1,,,aws_amplify_,,amplify_,Amplify,AWS,,,,, -amplifybackend,amplifybackend,amplifybackend,amplifybackend,,amplifybackend,,,AmplifyBackend,AmplifyBackend,,1,,,aws_amplifybackend_,,amplifybackend_,Amplify Backend,AWS,,,,, -amplifyuibuilder,amplifyuibuilder,amplifyuibuilder,amplifyuibuilder,,amplifyuibuilder,,,AmplifyUIBuilder,AmplifyUIBuilder,,1,,,aws_amplifyuibuilder_,,amplifyuibuilder_,Amplify UI Builder,AWS,,,,, -,,,,,,,,,,,,,,,,,Apache MXNet on AWS,AWS,x,,,,Documentation -apigateway,apigateway,apigateway,apigateway,,apigateway,,,APIGateway,APIGateway,,1,,aws_api_gateway_,aws_apigateway_,,api_gateway_,API Gateway,Amazon,,,,, -apigatewaymanagementapi,apigatewaymanagementapi,apigatewaymanagementapi,apigatewaymanagementapi,,apigatewaymanagementapi,,,APIGatewayManagementAPI,ApiGatewayManagementApi,,1,,,aws_apigatewaymanagementapi_,,apigatewaymanagementapi_,API Gateway Management API,Amazon,,,,, -apigatewayv2,apigatewayv2,apigatewayv2,apigatewayv2,,apigatewayv2,,,APIGatewayV2,ApiGatewayV2,,1,,,aws_apigatewayv2_,,apigatewayv2_,API Gateway V2,Amazon,,,,, -appmesh,appmesh,appmesh,appmesh,,appmesh,,,AppMesh,AppMesh,,1,,,aws_appmesh_,,appmesh_,App Mesh,AWS,,,,, -apprunner,apprunner,apprunner,apprunner,,apprunner,,,AppRunner,AppRunner,,1,,,aws_apprunner_,,apprunner_,App Runner,AWS,,,,, -,,,,,,,,,,,,,,,,,App2Container,AWS,x,,,,No SDK support -appconfig,appconfig,appconfig,appconfig,,appconfig,,,AppConfig,AppConfig,,1,,,aws_appconfig_,,appconfig_,AppConfig,AWS,,,,, -appconfigdata,appconfigdata,appconfigdata,appconfigdata,,appconfigdata,,,AppConfigData,AppConfigData,,1,,,aws_appconfigdata_,,appconfigdata_,AppConfig Data,AWS,,,,, -appflow,appflow,appflow,appflow,,appflow,,,AppFlow,Appflow,,1,,,aws_appflow_,,appflow_,AppFlow,Amazon,,,,, -appintegrations,appintegrations,appintegrationsservice,appintegrations,,appintegrations,,appintegrationsservice,AppIntegrations,AppIntegrationsService,,1,,,aws_appintegrations_,,appintegrations_,AppIntegrations,Amazon,,,,, -application-autoscaling,applicationautoscaling,applicationautoscaling,applicationautoscaling,appautoscaling,applicationautoscaling,,applicationautoscaling,AppAutoScaling,ApplicationAutoScaling,,1,,aws_appautoscaling_,aws_applicationautoscaling_,,appautoscaling_,Application Auto Scaling,,,,,, -applicationcostprofiler,applicationcostprofiler,applicationcostprofiler,applicationcostprofiler,,applicationcostprofiler,,,ApplicationCostProfiler,ApplicationCostProfiler,,1,,,aws_applicationcostprofiler_,,applicationcostprofiler_,Application Cost Profiler,AWS,,,,, -discovery,discovery,applicationdiscoveryservice,applicationdiscoveryservice,,discovery,,applicationdiscovery;applicationdiscoveryservice,Discovery,ApplicationDiscoveryService,,1,,,aws_discovery_,,discovery_,Application Discovery,AWS,,,,, -mgn,mgn,mgn,mgn,,mgn,,,Mgn,Mgn,,1,,,aws_mgn_,,mgn_,Application Migration (Mgn),AWS,,,,, -appstream,appstream,appstream,appstream,,appstream,,,AppStream,AppStream,,1,,,aws_appstream_,,appstream_,AppStream 2.0,Amazon,,,,, -appsync,appsync,appsync,appsync,,appsync,,,AppSync,AppSync,,1,,,aws_appsync_,,appsync_,AppSync,AWS,,,,, -,,,,,,,,,,,,,,,,,Artifact,AWS,x,,,,No SDK support -athena,athena,athena,athena,,athena,,,Athena,Athena,,1,,,aws_athena_,,athena_,Athena,Amazon,,,,, -auditmanager,auditmanager,auditmanager,auditmanager,,auditmanager,,,AuditManager,AuditManager,,,2,,aws_auditmanager_,,auditmanager_,Audit Manager,AWS,,,,, -autoscaling,autoscaling,autoscaling,autoscaling,,autoscaling,,,AutoScaling,AutoScaling,,1,,aws_(autoscaling_|launch_configuration),aws_autoscaling_,,autoscaling_;launch_configuration,Auto Scaling,,,,,, -autoscaling-plans,autoscalingplans,autoscalingplans,autoscalingplans,,autoscalingplans,,,AutoScalingPlans,AutoScalingPlans,,1,,,aws_autoscalingplans_,,autoscalingplans_,Auto Scaling Plans,,,,,, -,,,,,,,,,,,,,,,,,Backint Agent for SAP HANA,AWS,x,,,,No SDK support -backup,backup,backup,backup,,backup,,,Backup,Backup,,1,,,aws_backup_,,backup_,Backup,AWS,,,,, -backup-gateway,backupgateway,backupgateway,backupgateway,,backupgateway,,,BackupGateway,BackupGateway,,1,,,aws_backupgateway_,,backupgateway_,Backup Gateway,AWS,,,,, -batch,batch,batch,batch,,batch,,,Batch,Batch,,1,,,aws_batch_,,batch_,Batch,AWS,,,,, -billingconductor,billingconductor,billingconductor,,,billingconductor,,,BillingConductor,BillingConductor,,1,,,aws_billingconductor_,,billingconductor_,Billing Conductor,AWS,,,,, -braket,braket,braket,braket,,braket,,,Braket,Braket,,1,,,aws_braket_,,braket_,Braket,Amazon,,,,, -ce,ce,costexplorer,costexplorer,,ce,,costexplorer,CE,CostExplorer,,1,,,aws_ce_,,ce_,CE (Cost Explorer),AWS,,,,, -,,,,,,,,,,,,,,,,,Chatbot,AWS,x,,,,No SDK support -chime,chime,chime,chime,,chime,,,Chime,Chime,,1,,,aws_chime_,,chime_,Chime,Amazon,,,,, -chime-sdk-identity,chimesdkidentity,chimesdkidentity,chimesdkidentity,,chimesdkidentity,,,ChimeSDKIdentity,ChimeSDKIdentity,,1,,,aws_chimesdkidentity_,,chimesdkidentity_,Chime SDK Identity,Amazon,,,,, -chime-sdk-meetings,chimesdkmeetings,chimesdkmeetings,chimesdkmeetings,,chimesdkmeetings,,,ChimeSDKMeetings,ChimeSDKMeetings,,1,,,aws_chimesdkmeetings_,,chimesdkmeetings_,Chime SDK Meetings,Amazon,,,,, -chime-sdk-messaging,chimesdkmessaging,chimesdkmessaging,chimesdkmessaging,,chimesdkmessaging,,,ChimeSDKMessaging,ChimeSDKMessaging,,1,,,aws_chimesdkmessaging_,,chimesdkmessaging_,Chime SDK Messaging,Amazon,,,,, -,,,,,,,,,,,,,,,,,CLI (Command Line Interface),AWS,x,,,,No SDK support -configure,configure,,,,,,,,,,,,,,,,CLI Configure options,AWS,x,,,,CLI only -ddb,ddb,,,,,,,,,,,,,,,,CLI High-level DynamoDB commands,AWS,x,,,,Part of DynamoDB -s3,s3,,,,,,,,,,,,,,,,CLI High-level S3 commands,AWS,x,,,,CLI only -history,history,,,,,,,,,,,,,,,,CLI History of commands,AWS,x,,,,CLI only -importexport,importexport,,,,,,,,,,,,,,,,CLI Import/Export,AWS,x,,,,CLI only -cli-dev,clidev,,,,,,,,,,,,,,,,CLI Internal commands for development,AWS,x,,,,CLI only -cloudcontrol,cloudcontrol,cloudcontrolapi,cloudcontrol,,cloudcontrol,,cloudcontrolapi,CloudControl,CloudControlApi,,1,,aws_cloudcontrolapi_,aws_cloudcontrol_,,cloudcontrolapi_,Cloud Control API,AWS,,,,, -,,,,,,,,,,,,,,,,,Cloud Digital Interface SDK,AWS,x,,,,No SDK support -clouddirectory,clouddirectory,clouddirectory,clouddirectory,,clouddirectory,,,CloudDirectory,CloudDirectory,,1,,,aws_clouddirectory_,,clouddirectory_,Cloud Directory,Amazon,,,,, -servicediscovery,servicediscovery,servicediscovery,servicediscovery,,servicediscovery,,,ServiceDiscovery,ServiceDiscovery,,1,,aws_service_discovery_,aws_servicediscovery_,,service_discovery_,Cloud Map,AWS,,,,, -cloud9,cloud9,cloud9,cloud9,,cloud9,,,Cloud9,Cloud9,,1,,,aws_cloud9_,,cloud9_,Cloud9,AWS,,,,, -cloudformation,cloudformation,cloudformation,cloudformation,,cloudformation,,,CloudFormation,CloudFormation,,1,,,aws_cloudformation_,,cloudformation_,CloudFormation,AWS,,,,, -cloudfront,cloudfront,cloudfront,cloudfront,,cloudfront,,,CloudFront,CloudFront,,1,,,aws_cloudfront_,,cloudfront_,CloudFront,Amazon,,,,, -cloudhsm,cloudhsm,cloudhsm,cloudhsm,,,,,,,,,,,,,,CloudHSM,AWS,x,,,,Legacy -cloudhsmv2,cloudhsmv2,cloudhsmv2,cloudhsmv2,,cloudhsmv2,,cloudhsm,CloudHSMV2,CloudHSMV2,,1,,aws_cloudhsm_v2_,aws_cloudhsmv2_,,cloudhsm,CloudHSM,AWS,,,,, -cloudsearch,cloudsearch,cloudsearch,cloudsearch,,cloudsearch,,,CloudSearch,CloudSearch,,1,,,aws_cloudsearch_,,cloudsearch_,CloudSearch,Amazon,,,,, -cloudsearchdomain,cloudsearchdomain,cloudsearchdomain,cloudsearchdomain,,cloudsearchdomain,,,CloudSearchDomain,CloudSearchDomain,,1,,,aws_cloudsearchdomain_,,cloudsearchdomain_,CloudSearch Domain,Amazon,,,,, -,,,,,,,,,,,,,,,,,CloudShell,AWS,x,,,,No SDK support -cloudtrail,cloudtrail,cloudtrail,cloudtrail,,cloudtrail,,,CloudTrail,CloudTrail,,1,,aws_cloudtrail,aws_cloudtrail_,,cloudtrail,CloudTrail,AWS,,,,, -cloudwatch,cloudwatch,cloudwatch,cloudwatch,,cloudwatch,,,CloudWatch,CloudWatch,,1,,aws_cloudwatch_(?!(event_|log_|query_)),aws_cloudwatch_,,cloudwatch_dashboard;cloudwatch_metric_;cloudwatch_composite_,CloudWatch,Amazon,,,,, -application-insights,applicationinsights,applicationinsights,applicationinsights,,applicationinsights,,,ApplicationInsights,ApplicationInsights,,1,,,aws_applicationinsights_,,applicationinsights_,CloudWatch Application Insights,Amazon,,,,, -evidently,evidently,cloudwatchevidently,evidently,,evidently,,cloudwatchevidently,Evidently,CloudWatchEvidently,,1,,,aws_evidently_,,evidently_,CloudWatch Evidently,Amazon,,,,, -logs,logs,cloudwatchlogs,cloudwatchlogs,,logs,,cloudwatchlog;cloudwatchlogs,Logs,CloudWatchLogs,,1,,aws_cloudwatch_(log_|query_),aws_logs_,,cloudwatch_log_;cloudwatch_query_,CloudWatch Logs,Amazon,,,,, -rum,rum,cloudwatchrum,rum,,rum,,cloudwatchrum,RUM,CloudWatchRUM,,1,,,aws_rum_,,rum_,CloudWatch RUM,Amazon,,,,, -synthetics,synthetics,synthetics,synthetics,,synthetics,,,Synthetics,Synthetics,,1,,,aws_synthetics_,,synthetics_,CloudWatch Synthetics,Amazon,,,,, -codeartifact,codeartifact,codeartifact,codeartifact,,codeartifact,,,CodeArtifact,CodeArtifact,,1,,,aws_codeartifact_,,codeartifact_,CodeArtifact,AWS,,,,, -codebuild,codebuild,codebuild,codebuild,,codebuild,,,CodeBuild,CodeBuild,,1,,,aws_codebuild_,,codebuild_,CodeBuild,AWS,,,,, -codecommit,codecommit,codecommit,codecommit,,codecommit,,,CodeCommit,CodeCommit,,1,,,aws_codecommit_,,codecommit_,CodeCommit,AWS,,,,, -deploy,deploy,codedeploy,codedeploy,,deploy,,codedeploy,Deploy,CodeDeploy,,1,,aws_codedeploy_,aws_deploy_,,codedeploy_,CodeDeploy,AWS,,,,, -codeguruprofiler,codeguruprofiler,codeguruprofiler,codeguruprofiler,,codeguruprofiler,,,CodeGuruProfiler,CodeGuruProfiler,,1,,,aws_codeguruprofiler_,,codeguruprofiler_,CodeGuru Profiler,Amazon,,,,, -codeguru-reviewer,codegurureviewer,codegurureviewer,codegurureviewer,,codegurureviewer,,,CodeGuruReviewer,CodeGuruReviewer,,1,,,aws_codegurureviewer_,,codegurureviewer_,CodeGuru Reviewer,Amazon,,,,, -codepipeline,codepipeline,codepipeline,codepipeline,,codepipeline,,,CodePipeline,CodePipeline,,1,,aws_codepipeline,aws_codepipeline_,,codepipeline,CodePipeline,AWS,,,,, -codestar,codestar,codestar,codestar,,codestar,,,CodeStar,CodeStar,,1,,,aws_codestar_,,codestar_,CodeStar,AWS,,,,, -codestar-connections,codestarconnections,codestarconnections,codestarconnections,,codestarconnections,,,CodeStarConnections,CodeStarConnections,,1,,,aws_codestarconnections_,,codestarconnections_,CodeStar Connections,AWS,,,,, -codestar-notifications,codestarnotifications,codestarnotifications,codestarnotifications,,codestarnotifications,,,CodeStarNotifications,CodeStarNotifications,,1,,,aws_codestarnotifications_,,codestarnotifications_,CodeStar Notifications,AWS,,,,, -cognito-identity,cognitoidentity,cognitoidentity,cognitoidentity,,cognitoidentity,,,CognitoIdentity,CognitoIdentity,,1,,aws_cognito_identity_(?!provider),aws_cognitoidentity_,,cognito_identity_pool,Cognito Identity,Amazon,,,,, -cognito-idp,cognitoidp,cognitoidentityprovider,cognitoidentityprovider,,cognitoidp,,cognitoidentityprovider,CognitoIDP,CognitoIdentityProvider,,1,,aws_cognito_(identity_provider|resource|user|risk),aws_cognitoidp_,,cognito_identity_provider;cognito_resource_;cognito_user;cognito_risk,Cognito IDP (Identity Provider),Amazon,,,,, -cognito-sync,cognitosync,cognitosync,cognitosync,,cognitosync,,,CognitoSync,CognitoSync,,1,,,aws_cognitosync_,,cognitosync_,Cognito Sync,Amazon,,,,, -comprehend,comprehend,comprehend,comprehend,,comprehend,,,Comprehend,Comprehend,,,2,,aws_comprehend_,,comprehend_,Comprehend,Amazon,,,,, -comprehendmedical,comprehendmedical,comprehendmedical,comprehendmedical,,comprehendmedical,,,ComprehendMedical,ComprehendMedical,,1,,,aws_comprehendmedical_,,comprehendmedical_,Comprehend Medical,Amazon,,,,, -compute-optimizer,computeoptimizer,computeoptimizer,computeoptimizer,,computeoptimizer,,,ComputeOptimizer,ComputeOptimizer,,,2,,aws_computeoptimizer_,,computeoptimizer_,Compute Optimizer,AWS,,,,, -configservice,configservice,configservice,configservice,,configservice,,config,ConfigService,ConfigService,,1,,aws_config_,aws_configservice_,,config_,Config,AWS,,,,, -connect,connect,connect,connect,,connect,,,Connect,Connect,,1,,,aws_connect_,,connect_,Connect,Amazon,,,,, -connect-contact-lens,connectcontactlens,connectcontactlens,connectcontactlens,,connectcontactlens,,,ConnectContactLens,ConnectContactLens,,1,,,aws_connectcontactlens_,,connectcontactlens_,Connect Contact Lens,Amazon,,,,, -customer-profiles,customerprofiles,customerprofiles,customerprofiles,,customerprofiles,,,CustomerProfiles,CustomerProfiles,,1,,,aws_customerprofiles_,,customerprofiles_,Connect Customer Profiles,Amazon,,,,, -connectparticipant,connectparticipant,connectparticipant,connectparticipant,,connectparticipant,,,ConnectParticipant,ConnectParticipant,,1,,,aws_connectparticipant_,,connectparticipant_,Connect Participant,Amazon,,,,, -voice-id,voiceid,voiceid,voiceid,,voiceid,,,VoiceID,VoiceID,,1,,,aws_voiceid_,,voiceid_,Connect Voice ID,Amazon,,,,, -wisdom,wisdom,connectwisdomservice,wisdom,,wisdom,,connectwisdomservice,Wisdom,ConnectWisdomService,,1,,,aws_wisdom_,,wisdom_,Connect Wisdom,Amazon,,,,, -,,,,,,,,,,,,,,,,,Console Mobile Application,AWS,x,,,,No SDK support -controltower,controltower,controltower,controltower,,controltower,,,ControlTower,ControlTower,,1,,,aws_controltower_,,controltower_,Control Tower,AWS,,,,, -cur,cur,costandusagereportservice,costandusagereportservice,,cur,,costandusagereportservice,CUR,CostandUsageReportService,,1,,,aws_cur_,,cur_,Cost and Usage Report,AWS,,,,, -,,,,,,,,,,,,,,,,,Crypto Tools,AWS,x,,,,No SDK support -,,,,,,,,,,,,,,,,,Cryptographic Services Overview,AWS,x,,,,No SDK support -dataexchange,dataexchange,dataexchange,dataexchange,,dataexchange,,,DataExchange,DataExchange,,1,,,aws_dataexchange_,,dataexchange_,Data Exchange,AWS,,,,, -datapipeline,datapipeline,datapipeline,datapipeline,,datapipeline,,,DataPipeline,DataPipeline,,1,,,aws_datapipeline_,,datapipeline_,Data Pipeline,AWS,,,,, -datasync,datasync,datasync,datasync,,datasync,,,DataSync,DataSync,,1,,,aws_datasync_,,datasync_,DataSync,AWS,,,,, -,,,,,,,,,,,,,,,,,Deep Learning AMIs,AWS,x,,,,No SDK support -,,,,,,,,,,,,,,,,,Deep Learning Containers,AWS,x,,,,No SDK support -,,,,,,,,,,,,,,,,,DeepComposer,AWS,x,,,,No SDK support -,,,,,,,,,,,,,,,,,DeepLens,AWS,x,,,,No SDK support -,,,,,,,,,,,,,,,,,DeepRacer,AWS,x,,,,No SDK support -detective,detective,detective,detective,,detective,,,Detective,Detective,,1,,,aws_detective_,,detective_,Detective,Amazon,,,,, -devicefarm,devicefarm,devicefarm,devicefarm,,devicefarm,,,DeviceFarm,DeviceFarm,,1,,,aws_devicefarm_,,devicefarm_,Device Farm,AWS,,,,, -devops-guru,devopsguru,devopsguru,devopsguru,,devopsguru,,,DevOpsGuru,DevOpsGuru,,1,,,aws_devopsguru_,,devopsguru_,DevOps Guru,Amazon,,,,, -directconnect,directconnect,directconnect,directconnect,,directconnect,,,DirectConnect,DirectConnect,,1,,aws_dx_,aws_directconnect_,,dx_,Direct Connect,AWS,,,,, -dlm,dlm,dlm,dlm,,dlm,,,DLM,DLM,,1,,,aws_dlm_,,dlm_,DLM (Data Lifecycle Manager),Amazon,,,,, -dms,dms,databasemigrationservice,databasemigrationservice,,dms,,databasemigration;databasemigrationservice,DMS,DatabaseMigrationService,,1,,,aws_dms_,,dms_,DMS (Database Migration),AWS,,,,, -docdb,docdb,docdb,docdb,,docdb,,,DocDB,DocDB,,1,,,aws_docdb_,,docdb_,DocDB (DocumentDB),Amazon,,,,, -drs,drs,drs,drs,,drs,,,DRS,Drs,,1,,,aws_drs_,,drs_,DRS (Elastic Disaster Recovery),AWS,,,,, -ds,ds,directoryservice,directoryservice,,ds,,directoryservice,DS,DirectoryService,,1,,aws_directory_service_,aws_ds_,,directory_service_,DS (Directory Service),AWS,,,,, -dynamodb,dynamodb,dynamodb,dynamodb,,dynamodb,,,DynamoDB,DynamoDB,,1,,,aws_dynamodb_,,dynamodb_,DynamoDB,Amazon,,,AWS_DYNAMODB_ENDPOINT,TF_AWS_DYNAMODB_ENDPOINT, -dax,dax,dax,dax,,dax,,,DAX,DAX,,1,,,aws_dax_,,dax_,DynamoDB Accelerator (DAX),Amazon,,,,, -dynamodbstreams,dynamodbstreams,dynamodbstreams,dynamodbstreams,,dynamodbstreams,,,DynamoDBStreams,DynamoDBStreams,,1,,,aws_dynamodbstreams_,,dynamodbstreams_,DynamoDB Streams,Amazon,,,,, -,,,,,ec2ebs,ec2,,EC2EBS,,,,,aws_(ebs_|volume_attach|snapshot_create),aws_ec2ebs_,ebs_,ebs_;volume_attachment;snapshot_,EBS (EC2),Amazon,x,x,,,Part of EC2 -ebs,ebs,ebs,ebs,,ebs,,,EBS,EBS,,1,,,aws_ebs_,,changewhenimplemented,EBS (Elastic Block Store),Amazon,,,,, -ec2,ec2,ec2,ec2,,ec2,ec2,,EC2,EC2,,1,,aws_(ami|availability_zone|ec2_(availability|capacity|fleet|host|instance|serial|spot|tag)|eip|instance|key_pair|launch_template|placement_group|spot),aws_ec2_,ec2_,ami;availability_zone;ec2_availability_;ec2_capacity_;ec2_fleet;ec2_host;ec2_instance_;ec2_serial_;ec2_spot_;ec2_tag;eip;instance;key_pair;launch_template;placement_group;spot_,EC2 (Elastic Compute Cloud),Amazon,,,,, -imagebuilder,imagebuilder,imagebuilder,imagebuilder,,imagebuilder,,,ImageBuilder,Imagebuilder,,1,,,aws_imagebuilder_,,imagebuilder_,EC2 Image Builder,Amazon,,,,, -ec2-instance-connect,ec2instanceconnect,ec2instanceconnect,ec2instanceconnect,,ec2instanceconnect,,,EC2InstanceConnect,EC2InstanceConnect,,1,,,aws_ec2instanceconnect_,,ec2instanceconnect_,EC2 Instance Connect,AWS,,,,, -ecr,ecr,ecr,ecr,,ecr,,,ECR,ECR,,1,,,aws_ecr_,,ecr_,ECR (Elastic Container Registry),Amazon,,,,, -ecr-public,ecrpublic,ecrpublic,ecrpublic,,ecrpublic,,,ECRPublic,ECRPublic,,1,,,aws_ecrpublic_,,ecrpublic_,ECR Public,Amazon,,,,, -ecs,ecs,ecs,ecs,,ecs,,,ECS,ECS,,1,,,aws_ecs_,,ecs_,ECS (Elastic Container),Amazon,,,,, -efs,efs,efs,efs,,efs,,,EFS,EFS,,1,,,aws_efs_,,efs_,EFS (Elastic File System),Amazon,,,,, -eks,eks,eks,eks,,eks,,,EKS,EKS,,1,,,aws_eks_,,eks_,EKS (Elastic Kubernetes),Amazon,,,,, -elasticbeanstalk,elasticbeanstalk,elasticbeanstalk,elasticbeanstalk,,elasticbeanstalk,,beanstalk,ElasticBeanstalk,ElasticBeanstalk,,1,,aws_elastic_beanstalk_,aws_elasticbeanstalk_,,elastic_beanstalk_,Elastic Beanstalk,AWS,,,,, -elastic-inference,elasticinference,elasticinference,elasticinference,,elasticinference,,,ElasticInference,ElasticInference,,1,,,aws_elasticinference_,,elasticinference_,Elastic Inference,Amazon,,,,, -elastictranscoder,elastictranscoder,elastictranscoder,elastictranscoder,,elastictranscoder,,,ElasticTranscoder,ElasticTranscoder,,1,,,aws_elastictranscoder_,,elastictranscoder_,Elastic Transcoder,Amazon,,,,, -elasticache,elasticache,elasticache,elasticache,,elasticache,,,ElastiCache,ElastiCache,,1,,,aws_elasticache_,,elasticache_,ElastiCache,Amazon,,,,, -es,es,elasticsearchservice,elasticsearchservice,elasticsearch,es,,es;elasticsearchservice,Elasticsearch,ElasticsearchService,,1,,aws_elasticsearch_,aws_es_,,elasticsearch_,Elasticsearch,Amazon,,,,, -elbv2,elbv2,elbv2,elasticloadbalancingv2,,elbv2,,elasticloadbalancingv2,ELBV2,ELBV2,,1,,aws_a?lb(\b|_listener|_target_group),aws_elbv2_,,lb\.;lb_listener;lb_target_group;lb_hosted,ELB (Elastic Load Balancing),,,,,, -elb,elb,elb,elasticloadbalancing,,elb,,elasticloadbalancing,ELB,ELB,,1,,aws_(app_cookie_stickiness_policy|elb|lb_cookie_stickiness_policy|lb_ssl_negotiation_policy|load_balancer_|proxy_protocol_policy),aws_elb_,,app_cookie_stickiness_policy;elb;lb_cookie_stickiness_policy;lb_ssl_negotiation_policy;load_balancer;proxy_protocol_policy,ELB Classic,,,,,, -mediaconnect,mediaconnect,mediaconnect,mediaconnect,,mediaconnect,,,MediaConnect,MediaConnect,,1,,,aws_mediaconnect_,,media_connect_,Elemental MediaConnect,AWS,,,,, -mediaconvert,mediaconvert,mediaconvert,mediaconvert,,mediaconvert,,,MediaConvert,MediaConvert,,1,,aws_media_convert_,aws_mediaconvert_,,media_convert_,Elemental MediaConvert,AWS,,,,, -medialive,medialive,medialive,medialive,,medialive,,,MediaLive,MediaLive,,,2,,aws_medialive_,,medialive_,Elemental MediaLive,AWS,,,,, -mediapackage,mediapackage,mediapackage,mediapackage,,mediapackage,,,MediaPackage,MediaPackage,,1,,aws_media_package_,aws_mediapackage_,,media_package_,Elemental MediaPackage,AWS,,,,, -mediapackage-vod,mediapackagevod,mediapackagevod,mediapackagevod,,mediapackagevod,,,MediaPackageVOD,MediaPackageVod,,1,,,aws_mediapackagevod_,,mediapackagevod_,Elemental MediaPackage VOD,AWS,,,,, -mediastore,mediastore,mediastore,mediastore,,mediastore,,,MediaStore,MediaStore,,1,,aws_media_store_,aws_mediastore_,,media_store_,Elemental MediaStore,AWS,,,,, -mediastore-data,mediastoredata,mediastoredata,mediastoredata,,mediastoredata,,,MediaStoreData,MediaStoreData,,1,,,aws_mediastoredata_,,mediastoredata_,Elemental MediaStore Data,AWS,,,,, -mediatailor,mediatailor,mediatailor,mediatailor,,mediatailor,,,MediaTailor,MediaTailor,,1,,,aws_mediatailor_,,media_tailor_,Elemental MediaTailor,AWS,,,,, -,,,,,,,,,,,,,,,,,Elemental On-Premises,AWS,x,,,,No SDK support -emr,emr,emr,emr,,emr,,,EMR,EMR,,1,,,aws_emr_,,emr_,EMR,Amazon,,,,, -emr-containers,emrcontainers,emrcontainers,emrcontainers,,emrcontainers,,,EMRContainers,EMRContainers,,1,,,aws_emrcontainers_,,emrcontainers_,EMR Containers,Amazon,,,,, -emr-serverless,emrserverless,emrserverless,emrserverless,,emrserverless,,,EMRServerless,EMRServerless,,1,,,aws_emrserverless_,,emrserverless_,EMR Serverless,Amazon,,,,, -,,,,,,,,,,,,,,,,,End-of-Support Migration Program (EMP) for Windows Server,AWS,x,,,,No SDK support -events,events,eventbridge,eventbridge,,events,,eventbridge;cloudwatchevents,Events,EventBridge,,1,,aws_cloudwatch_event_,aws_events_,,cloudwatch_event_,EventBridge,Amazon,,,,, -schemas,schemas,schemas,schemas,,schemas,,,Schemas,Schemas,,1,,,aws_schemas_,,schemas_,EventBridge Schemas,Amazon,,,,, -fis,fis,fis,fis,,fis,,,FIS,FIS,,,2,,aws_fis_,,fis_,FIS (Fault Injection Simulator),AWS,,,,, -finspace,finspace,finspace,finspace,,finspace,,,FinSpace,Finspace,,1,,,aws_finspace_,,finspace_,FinSpace,Amazon,,,,, -finspace-data,finspacedata,finspacedata,finspacedata,,finspacedata,,,FinSpaceData,FinSpaceData,,1,,,aws_finspacedata_,,finspacedata_,FinSpace Data,Amazon,,,,, -fms,fms,fms,fms,,fms,,,FMS,FMS,,1,,,aws_fms_,,fms_,FMS (Firewall Manager),AWS,,,,, -forecast,forecast,forecastservice,forecast,,forecast,,forecastservice,Forecast,ForecastService,,1,,,aws_forecast_,,forecast_,Forecast,Amazon,,,,, -forecastquery,forecastquery,forecastqueryservice,forecastquery,,forecastquery,,forecastqueryservice,ForecastQuery,ForecastQueryService,,1,,,aws_forecastquery_,,forecastquery_,Forecast Query,Amazon,,,,, -frauddetector,frauddetector,frauddetector,frauddetector,,frauddetector,,,FraudDetector,FraudDetector,,1,,,aws_frauddetector_,,frauddetector_,Fraud Detector,Amazon,,,,, -,,,,,,,,,,,,,,,,,FreeRTOS,,x,,,,No SDK support -fsx,fsx,fsx,fsx,,fsx,,,FSx,FSx,,1,,,aws_fsx_,,fsx_,FSx,Amazon,,,,, -gamelift,gamelift,gamelift,gamelift,,gamelift,,,GameLift,GameLift,,1,,,aws_gamelift_,,gamelift_,GameLift,Amazon,,,,, -globalaccelerator,globalaccelerator,globalaccelerator,globalaccelerator,,globalaccelerator,,,GlobalAccelerator,GlobalAccelerator,x,1,,,aws_globalaccelerator_,,globalaccelerator_,Global Accelerator,AWS,,,,, -glue,glue,glue,glue,,glue,,,Glue,Glue,,1,,,aws_glue_,,glue_,Glue,AWS,,,,, -databrew,databrew,gluedatabrew,databrew,,databrew,,gluedatabrew,DataBrew,GlueDataBrew,,1,,,aws_databrew_,,databrew_,Glue DataBrew,AWS,,,,, -groundstation,groundstation,groundstation,groundstation,,groundstation,,,GroundStation,GroundStation,,1,,,aws_groundstation_,,groundstation_,Ground Station,AWS,,,,, -guardduty,guardduty,guardduty,guardduty,,guardduty,,,GuardDuty,GuardDuty,,1,,,aws_guardduty_,,guardduty_,GuardDuty,Amazon,,,,, -health,health,health,health,,health,,,Health,Health,,1,,,aws_health_,,health_,Health,AWS,,,,, -healthlake,healthlake,healthlake,healthlake,,healthlake,,,HealthLake,HealthLake,,1,,,aws_healthlake_,,healthlake_,HealthLake,Amazon,,,,, -honeycode,honeycode,honeycode,honeycode,,honeycode,,,Honeycode,Honeycode,,1,,,aws_honeycode_,,honeycode_,Honeycode,Amazon,,,,, -iam,iam,iam,iam,,iam,,,IAM,IAM,,1,,,aws_iam_,,iam_,IAM (Identity & Access Management),AWS,,,AWS_IAM_ENDPOINT,TF_AWS_IAM_ENDPOINT, -accessanalyzer,accessanalyzer,accessanalyzer,accessanalyzer,,accessanalyzer,,,AccessAnalyzer,AccessAnalyzer,,1,,,aws_accessanalyzer_,,accessanalyzer_,IAM Access Analyzer,AWS,,,,, -inspector,inspector,inspector,inspector,,inspector,,,Inspector,Inspector,,1,,,aws_inspector_,,inspector_,Inspector,Amazon,,,,, -inspector2,inspector2,inspector2,inspector2,,inspector2,,inspectorv2,Inspector2,Inspector2,,,2,,aws_inspector2_,,inspector2_,Inspector V2,Amazon,,,,, -iot1click-devices,iot1clickdevices,iot1clickdevicesservice,iot1clickdevicesservice,,iot1clickdevices,,iot1clickdevicesservice,IoT1ClickDevices,IoT1ClickDevicesService,,1,,,aws_iot1clickdevices_,,iot1clickdevices_,IoT 1-Click Devices,AWS,,,,, -iot1click-projects,iot1clickprojects,iot1clickprojects,iot1clickprojects,,iot1clickprojects,,,IoT1ClickProjects,IoT1ClickProjects,,1,,,aws_iot1clickprojects_,,iot1clickprojects_,IoT 1-Click Projects,AWS,,,,, -iotanalytics,iotanalytics,iotanalytics,iotanalytics,,iotanalytics,,,IoTAnalytics,IoTAnalytics,,1,,,aws_iotanalytics_,,iotanalytics_,IoT Analytics,AWS,,,,, -iot,iot,iot,iot,,iot,,,IoT,IoT,,1,,,aws_iot_,,iot_,IoT Core,AWS,,,,, -iot-data,iotdata,iotdataplane,iotdataplane,,iotdata,,iotdataplane,IoTData,IoTDataPlane,,1,,,aws_iotdata_,,iotdata_,IoT Data Plane,AWS,,,,, -,,,,,,,,,,,,,,,,,IoT Device Defender,AWS,x,,,,Part of IoT -iotdeviceadvisor,iotdeviceadvisor,iotdeviceadvisor,iotdeviceadvisor,,iotdeviceadvisor,,,IoTDeviceAdvisor,IoTDeviceAdvisor,,1,,,aws_iotdeviceadvisor_,,iotdeviceadvisor_,IoT Device Management,AWS,,,,, -iotevents,iotevents,iotevents,iotevents,,iotevents,,,IoTEvents,IoTEvents,,1,,,aws_iotevents_,,iotevents_,IoT Events,AWS,,,,, -iotevents-data,ioteventsdata,ioteventsdata,ioteventsdata,,ioteventsdata,,,IoTEventsData,IoTEventsData,,1,,,aws_ioteventsdata_,,ioteventsdata_,IoT Events Data,AWS,,,,, -,,,,,,,,,,,,,,,,,IoT ExpressLink,AWS,x,,,,No SDK support -iotfleethub,iotfleethub,iotfleethub,iotfleethub,,iotfleethub,,,IoTFleetHub,IoTFleetHub,,1,,,aws_iotfleethub_,,iotfleethub_,IoT Fleet Hub,AWS,,,,, -,,,,,,,,,,,,,,,,,IoT FleetWise,AWS,x,,,,No SDK support -greengrass,greengrass,greengrass,greengrass,,greengrass,,,Greengrass,Greengrass,,1,,,aws_greengrass_,,greengrass_,IoT Greengrass,AWS,,,,, -greengrassv2,greengrassv2,greengrassv2,greengrassv2,,greengrassv2,,,GreengrassV2,GreengrassV2,,1,,,aws_greengrassv2_,,greengrassv2_,IoT Greengrass V2,AWS,,,,, -iot-jobs-data,iotjobsdata,iotjobsdataplane,iotjobsdataplane,,iotjobsdata,,iotjobsdataplane,IoTJobsData,IoTJobsDataPlane,,1,,,aws_iotjobsdata_,,iotjobsdata_,IoT Jobs Data Plane,AWS,,,,, -,,,,,,,,,,,,,,,,,IoT RoboRunner,AWS,x,,,,No SDK support -iotsecuretunneling,iotsecuretunneling,iotsecuretunneling,iotsecuretunneling,,iotsecuretunneling,,,IoTSecureTunneling,IoTSecureTunneling,,1,,,aws_iotsecuretunneling_,,iotsecuretunneling_,IoT Secure Tunneling,AWS,,,,, -iotsitewise,iotsitewise,iotsitewise,iotsitewise,,iotsitewise,,,IoTSiteWise,IoTSiteWise,,1,,,aws_iotsitewise_,,iotsitewise_,IoT SiteWise,AWS,,,,, -iotthingsgraph,iotthingsgraph,iotthingsgraph,iotthingsgraph,,iotthingsgraph,,,IoTThingsGraph,IoTThingsGraph,,1,,,aws_iotthingsgraph_,,iotthingsgraph_,IoT Things Graph,AWS,,,,, -iottwinmaker,iottwinmaker,iottwinmaker,iottwinmaker,,iottwinmaker,,,IoTTwinMaker,IoTTwinMaker,,1,,,aws_iottwinmaker_,,iottwinmaker_,IoT TwinMaker,AWS,,,,, -iotwireless,iotwireless,iotwireless,iotwireless,,iotwireless,,,IoTWireless,IoTWireless,,1,,,aws_iotwireless_,,iotwireless_,IoT Wireless,AWS,,,,, -,,,,,,,,,,,,,,,,,IQ,AWS,x,,,,No SDK support -ivs,ivs,ivs,ivs,,ivs,,,IVS,IVS,,1,,,aws_ivs_,,ivs_,IVS (Interactive Video),Amazon,,,,, -ivschat,ivschat,ivschat,ivschat,,ivschat,,,IVSChat,Ivschat,,,2,,aws_ivschat_,,ivschat_,IVS (Interactive Video) Chat,Amazon,,,,, -kendra,kendra,kendra,kendra,,kendra,,,Kendra,Kendra,,,2,,aws_kendra_,,kendra_,Kendra,Amazon,,,,, -keyspaces,keyspaces,keyspaces,,,keyspaces,,,Keyspaces,Keyspaces,,1,,,aws_keyspaces_,,keyspaces_,Keyspaces (for Apache Cassandra),Amazon,,,,, -kinesis,kinesis,kinesis,kinesis,,kinesis,,,Kinesis,Kinesis,,1,,aws_kinesis_stream,aws_kinesis_,,kinesis_stream,Kinesis,Amazon,,,,, -kinesisanalytics,kinesisanalytics,kinesisanalytics,kinesisanalytics,,kinesisanalytics,,,KinesisAnalytics,KinesisAnalytics,,1,,aws_kinesis_analytics_,aws_kinesisanalytics_,,kinesis_analytics_,Kinesis Analytics,Amazon,,,,, -kinesisanalyticsv2,kinesisanalyticsv2,kinesisanalyticsv2,kinesisanalyticsv2,,kinesisanalyticsv2,,,KinesisAnalyticsV2,KinesisAnalyticsV2,,1,,,aws_kinesisanalyticsv2_,,kinesisanalyticsv2_,Kinesis Analytics V2,Amazon,,,,, -firehose,firehose,firehose,firehose,,firehose,,,Firehose,Firehose,,1,,aws_kinesis_firehose_,aws_firehose_,,kinesis_firehose_,Kinesis Firehose,Amazon,,,,, -kinesisvideo,kinesisvideo,kinesisvideo,kinesisvideo,,kinesisvideo,,,KinesisVideo,KinesisVideo,,1,,,aws_kinesisvideo_,,kinesis_video_,Kinesis Video,Amazon,,,,, -kinesis-video-archived-media,kinesisvideoarchivedmedia,kinesisvideoarchivedmedia,kinesisvideoarchivedmedia,,kinesisvideoarchivedmedia,,,KinesisVideoArchivedMedia,KinesisVideoArchivedMedia,,1,,,aws_kinesisvideoarchivedmedia_,,kinesisvideoarchivedmedia_,Kinesis Video Archived Media,Amazon,,,,, -kinesis-video-media,kinesisvideomedia,kinesisvideomedia,kinesisvideomedia,,kinesisvideomedia,,,KinesisVideoMedia,KinesisVideoMedia,,1,,,aws_kinesisvideomedia_,,kinesisvideomedia_,Kinesis Video Media,Amazon,,,,, -kinesis-video-signaling,kinesisvideosignaling,kinesisvideosignalingchannels,kinesisvideosignaling,,kinesisvideosignaling,,kinesisvideosignalingchannels,KinesisVideoSignaling,KinesisVideoSignalingChannels,,1,,,aws_kinesisvideosignaling_,,kinesisvideosignaling_,Kinesis Video Signaling,Amazon,,,,, -kms,kms,kms,kms,,kms,,,KMS,KMS,,1,,,aws_kms_,,kms_,KMS (Key Management),AWS,,,,, -lakeformation,lakeformation,lakeformation,lakeformation,,lakeformation,,,LakeFormation,LakeFormation,,1,,,aws_lakeformation_,,lakeformation_,Lake Formation,AWS,,,,, -lambda,lambda,lambda,lambda,,lambda,,,Lambda,Lambda,,1,,,aws_lambda_,,lambda_,Lambda,AWS,,,,, -,,,,,,,,,,,,,,,,,Launch Wizard,AWS,x,,,,No SDK support -lex-models,lexmodels,lexmodelbuildingservice,lexmodelbuildingservice,,lexmodels,,lexmodelbuilding;lexmodelbuildingservice;lex,LexModels,LexModelBuildingService,,1,,aws_lex_,aws_lexmodels_,,lex_,Lex Model Building,Amazon,,,,, -lexv2-models,lexv2models,lexmodelsv2,lexmodelsv2,,lexmodelsv2,,lexv2models,LexModelsV2,LexModelsV2,,1,,,aws_lexmodelsv2_,,lexmodelsv2_,Lex Models V2,Amazon,,,,, -lex-runtime,lexruntime,lexruntimeservice,lexruntimeservice,,lexruntime,,lexruntimeservice,LexRuntime,LexRuntimeService,,1,,,aws_lexruntime_,,lexruntime_,Lex Runtime,Amazon,,,,, -lexv2-runtime,lexv2runtime,lexruntimev2,lexruntimev2,,lexruntimev2,,lexv2runtime,LexRuntimeV2,LexRuntimeV2,,1,,,aws_lexruntimev2_,,lexruntimev2_,Lex Runtime V2,Amazon,,,,, -license-manager,licensemanager,licensemanager,licensemanager,,licensemanager,,,LicenseManager,LicenseManager,,1,,,aws_licensemanager_,,licensemanager_,License Manager,AWS,,,,, -lightsail,lightsail,lightsail,lightsail,,lightsail,,,Lightsail,Lightsail,,1,,,aws_lightsail_,,lightsail_,Lightsail,Amazon,,,,, -location,location,locationservice,location,,location,,locationservice,Location,LocationService,,1,,,aws_location_,,location_,Location,Amazon,,,,, -lookoutequipment,lookoutequipment,lookoutequipment,lookoutequipment,,lookoutequipment,,,LookoutEquipment,LookoutEquipment,,1,,,aws_lookoutequipment_,,lookoutequipment_,Lookout for Equipment,Amazon,,,,, -lookoutmetrics,lookoutmetrics,lookoutmetrics,lookoutmetrics,,lookoutmetrics,,,LookoutMetrics,LookoutMetrics,,1,,,aws_lookoutmetrics_,,lookoutmetrics_,Lookout for Metrics,Amazon,,,,, -lookoutvision,lookoutvision,lookoutforvision,lookoutvision,,lookoutvision,,lookoutforvision,LookoutVision,LookoutForVision,,1,,,aws_lookoutvision_,,lookoutvision_,Lookout for Vision,Amazon,,,,, -,,,,,,,,,,,,,,,,,Lumberyard,Amazon,x,,,,No SDK support -machinelearning,machinelearning,machinelearning,machinelearning,,machinelearning,,,MachineLearning,MachineLearning,,1,,,aws_machinelearning_,,machinelearning_,Machine Learning,Amazon,,,,, -macie2,macie2,macie2,macie2,,macie2,,,Macie2,Macie2,,1,,,aws_macie2_,,macie2_,Macie,Amazon,,,,, -macie,macie,macie,macie,,macie,,,Macie,Macie,,1,,,aws_macie_,,macie_,Macie Classic,Amazon,,,,, -,,,,,,,,,,,,,,,,,Mainframe Modernization,AWS,x,,,,No SDK support -managedblockchain,managedblockchain,managedblockchain,managedblockchain,,managedblockchain,,,ManagedBlockchain,ManagedBlockchain,,1,,,aws_managedblockchain_,,managedblockchain_,Managed Blockchain,Amazon,,,,, -grafana,grafana,managedgrafana,grafana,,grafana,,managedgrafana;amg,Grafana,ManagedGrafana,,1,,,aws_grafana_,,grafana_,Managed Grafana,Amazon,,,,, -kafka,kafka,kafka,kafka,,kafka,,msk,Kafka,Kafka,,1,,aws_msk_,aws_kafka_,,msk_,Managed Streaming for Kafka,Amazon,,,,, -kafkaconnect,kafkaconnect,kafkaconnect,kafkaconnect,,kafkaconnect,,,KafkaConnect,KafkaConnect,,1,,aws_mskconnect_,aws_kafkaconnect_,,mskconnect_,Managed Streaming for Kafka Connect,Amazon,,,,, -,,,,,,,,,,,,,,,,,Management Console,AWS,x,,,,No SDK support -marketplace-catalog,marketplacecatalog,marketplacecatalog,marketplacecatalog,,marketplacecatalog,,,MarketplaceCatalog,MarketplaceCatalog,,1,,,aws_marketplacecatalog_,,marketplace_catalog_,Marketplace Catalog,AWS,,,,, -marketplacecommerceanalytics,marketplacecommerceanalytics,marketplacecommerceanalytics,marketplacecommerceanalytics,,marketplacecommerceanalytics,,,MarketplaceCommerceAnalytics,MarketplaceCommerceAnalytics,,1,,,aws_marketplacecommerceanalytics_,,marketplacecommerceanalytics_,Marketplace Commerce Analytics,AWS,,,,, -marketplace-entitlement,marketplaceentitlement,marketplaceentitlementservice,marketplaceentitlementservice,,marketplaceentitlement,,marketplaceentitlementservice,MarketplaceEntitlement,MarketplaceEntitlementService,,1,,,aws_marketplaceentitlement_,,marketplaceentitlement_,Marketplace Entitlement,AWS,,,,, -meteringmarketplace,meteringmarketplace,marketplacemetering,marketplacemetering,,marketplacemetering,,meteringmarketplace,MarketplaceMetering,MarketplaceMetering,,1,,,aws_marketplacemetering_,,marketplacemetering_,Marketplace Metering,AWS,,,,, -memorydb,memorydb,memorydb,memorydb,,memorydb,,,MemoryDB,MemoryDB,,1,,,aws_memorydb_,,memorydb_,MemoryDB for Redis,Amazon,,,,, -,,,,,meta,,,Meta,,,,,aws_(arn|billing_service_account|default_tags|ip_ranges|partition|regions?|service)$,aws_meta_,,arn;ip_ranges;billing_service_account;default_tags;partition;region;service\.,Meta Data Sources,,x,x,,,Not an AWS service (metadata) -mgh,mgh,migrationhub,migrationhub,,mgh,,migrationhub,MgH,MigrationHub,,1,,,aws_mgh_,,mgh_,MgH (Migration Hub),AWS,,,,, -,,,,,,,,,,,,,,,,,Microservice Extractor for .NET,AWS,x,,,,No SDK support -migrationhub-config,migrationhubconfig,migrationhubconfig,migrationhubconfig,,migrationhubconfig,,,MigrationHubConfig,MigrationHubConfig,,1,,,aws_migrationhubconfig_,,migrationhubconfig_,Migration Hub Config,AWS,,,,, -migration-hub-refactor-spaces,migrationhubrefactorspaces,migrationhubrefactorspaces,migrationhubrefactorspaces,,migrationhubrefactorspaces,,,MigrationHubRefactorSpaces,MigrationHubRefactorSpaces,,1,,,aws_migrationhubrefactorspaces_,,migrationhubrefactorspaces_,Migration Hub Refactor Spaces,AWS,,,,, -migrationhubstrategy,migrationhubstrategy,migrationhubstrategyrecommendations,migrationhubstrategy,,migrationhubstrategy,,migrationhubstrategyrecommendations,MigrationHubStrategy,MigrationHubStrategyRecommendations,,1,,,aws_migrationhubstrategy_,,migrationhubstrategy_,Migration Hub Strategy,AWS,,,,, -mobile,mobile,mobile,mobile,,mobile,,,Mobile,Mobile,,1,,,aws_mobile_,,mobile_,Mobile,AWS,,,,, -,,mobileanalytics,,,,,,MobileAnalytics,MobileAnalytics,,,,,,,,Mobile Analytics,AWS,x,,,,Only in Go SDK v1 -,,,,,,,,,,,,,,,,,Mobile SDK for Unity,AWS,x,,,,No SDK support -,,,,,,,,,,,,,,,,,Mobile SDK for Xamarin,AWS,x,,,,No SDK support -,,,,,,,,,,,,,,,,,Monitron,Amazon,x,,,,No SDK support -mq,mq,mq,mq,,mq,,,MQ,MQ,,1,,,aws_mq_,,mq_,MQ,Amazon,,,,, -mturk,mturk,mturk,mturk,,mturk,,,MTurk,MTurk,,1,,,aws_mturk_,,mturk_,MTurk (Mechanical Turk),Amazon,,,,, -mwaa,mwaa,mwaa,mwaa,,mwaa,,,MWAA,MWAA,,1,,,aws_mwaa_,,mwaa_,MWAA (Managed Workflows for Apache Airflow),Amazon,,,,, -neptune,neptune,neptune,neptune,,neptune,,,Neptune,Neptune,,1,,,aws_neptune_,,neptune_,Neptune,Amazon,,,,, -network-firewall,networkfirewall,networkfirewall,networkfirewall,,networkfirewall,,,NetworkFirewall,NetworkFirewall,,1,,,aws_networkfirewall_,,networkfirewall_,Network Firewall,AWS,,,,, -networkmanager,networkmanager,networkmanager,networkmanager,,networkmanager,,,NetworkManager,NetworkManager,,1,,,aws_networkmanager_,,networkmanager_,Network Manager,AWS,,,,, -,,,,,,,,,,,,,,,,,NICE DCV,,x,,,,No SDK support -nimble,nimble,nimblestudio,nimble,,nimble,,nimblestudio,Nimble,NimbleStudio,,1,,,aws_nimble_,,nimble_,Nimble Studio,Amazon,,,,, -opensearch,opensearch,opensearchservice,opensearch,,opensearch,,opensearchservice,OpenSearch,OpenSearchService,,1,,,aws_opensearch_,,opensearch_,OpenSearch,Amazon,,,,, -opsworks,opsworks,opsworks,opsworks,,opsworks,,,OpsWorks,OpsWorks,,1,,,aws_opsworks_,,opsworks_,OpsWorks,AWS,,,,, -opsworks-cm,opsworkscm,opsworkscm,opsworkscm,,opsworkscm,,,OpsWorksCM,OpsWorksCM,,1,,,aws_opsworkscm_,,opsworkscm_,OpsWorks CM,AWS,,,,, -organizations,organizations,organizations,organizations,,organizations,,,Organizations,Organizations,,1,,,aws_organizations_,,organizations_,Organizations,AWS,,,,, -outposts,outposts,outposts,outposts,,outposts,,,Outposts,Outposts,,1,,,aws_outposts_,,outposts_,Outposts,AWS,,,,, -,,,,,ec2outposts,ec2,,EC2Outposts,,,,,aws_ec2_(coip_pool|local_gateway),aws_ec2outposts_,outposts_,ec2_coip_pool;ec2_local_gateway,Outposts (EC2),AWS,x,x,,,Part of EC2 -panorama,panorama,panorama,panorama,,panorama,,,Panorama,Panorama,,1,,,aws_panorama_,,panorama_,Panorama,AWS,,,,, -,,,,,,,,,,,,,,,,,ParallelCluster,AWS,x,,,,No SDK support -personalize,personalize,personalize,personalize,,personalize,,,Personalize,Personalize,,1,,,aws_personalize_,,personalize_,Personalize,Amazon,,,,, -personalize-events,personalizeevents,personalizeevents,personalizeevents,,personalizeevents,,,PersonalizeEvents,PersonalizeEvents,,1,,,aws_personalizeevents_,,personalizeevents_,Personalize Events,Amazon,,,,, -personalize-runtime,personalizeruntime,personalizeruntime,personalizeruntime,,personalizeruntime,,,PersonalizeRuntime,PersonalizeRuntime,,1,,,aws_personalizeruntime_,,personalizeruntime_,Personalize Runtime,Amazon,,,,, -pinpoint,pinpoint,pinpoint,pinpoint,,pinpoint,,,Pinpoint,Pinpoint,,1,,,aws_pinpoint_,,pinpoint_,Pinpoint,Amazon,,,,, -pinpoint-email,pinpointemail,pinpointemail,pinpointemail,,pinpointemail,,,PinpointEmail,PinpointEmail,,1,,,aws_pinpointemail_,,pinpointemail_,Pinpoint Email,Amazon,,,,, -pinpoint-sms-voice,pinpointsmsvoice,pinpointsmsvoice,pinpointsmsvoice,,pinpointsmsvoice,,,PinpointSMSVoice,PinpointSMSVoice,,1,,,aws_pinpointsmsvoice_,,pinpointsmsvoice_,Pinpoint SMS and Voice,Amazon,,,,, -polly,polly,polly,polly,,polly,,,Polly,Polly,,1,,,aws_polly_,,polly_,Polly,Amazon,,,,, -,,,,,,,,,,,,,,,,,Porting Assistant for .NET,,x,,,,No SDK support -pricing,pricing,pricing,pricing,,pricing,,,Pricing,Pricing,,1,,,aws_pricing_,,pricing_,Pricing Calculator,AWS,,,,, -proton,proton,proton,proton,,proton,,,Proton,Proton,,1,,,aws_proton_,,proton_,Proton,AWS,,,,, -qldb,qldb,qldb,qldb,,qldb,,,QLDB,QLDB,,1,,,aws_qldb_,,qldb_,QLDB (Quantum Ledger Database),Amazon,,,,, -qldb-session,qldbsession,qldbsession,qldbsession,,qldbsession,,,QLDBSession,QLDBSession,,1,,,aws_qldbsession_,,qldbsession_,QLDB Session,Amazon,,,,, -quicksight,quicksight,quicksight,quicksight,,quicksight,,,QuickSight,QuickSight,,1,,,aws_quicksight_,,quicksight_,QuickSight,Amazon,,,,, -ram,ram,ram,ram,,ram,,,RAM,RAM,,1,,,aws_ram_,,ram_,RAM (Resource Access Manager),AWS,,,,, -rds,rds,rds,rds,,rds,,,RDS,RDS,,1,,aws_(db_|rds_),aws_rds_,,rds_;db_,RDS (Relational Database),Amazon,,,,, -rds-data,rdsdata,rdsdataservice,rdsdata,,rdsdata,,rdsdataservice,RDSData,RDSDataService,,1,,,aws_rdsdata_,,rdsdata_,RDS Data,Amazon,,,,, -pi,pi,pi,pi,,pi,,,PI,PI,,1,,,aws_pi_,,pi_,RDS Performance Insights (PI),Amazon,,,,, -rbin,rbin,recyclebin,rbin,,rbin,,recyclebin,RBin,RecycleBin,,1,,,aws_rbin_,,rbin_,Recycle Bin (RBin),Amazon,,,,, -,,,,,,,,,,,,,,,,,Red Hat OpenShift Service on AWS (ROSA),AWS,x,,,,No SDK support -redshift,redshift,redshift,redshift,,redshift,,,Redshift,Redshift,,1,,,aws_redshift_,,redshift_,Redshift,Amazon,,,,, -redshift-data,redshiftdata,redshiftdataapiservice,redshiftdata,,redshiftdata,,redshiftdataapiservice,RedshiftData,RedshiftDataAPIService,,1,,,aws_redshiftdata_,,redshiftdata_,Redshift Data,Amazon,,,,, -redshift-serverless,redshiftserverless,redshiftserverless,redshiftserverless,,redshiftserverless,,,RedshiftServerless,RedshiftServerless,,1,,,aws_redshiftserverless_,,redshiftserverless_,Redshift Serverless,Amazon,,,,, -rekognition,rekognition,rekognition,rekognition,,rekognition,,,Rekognition,Rekognition,,1,,,aws_rekognition_,,rekognition_,Rekognition,Amazon,,,,, -resiliencehub,resiliencehub,resiliencehub,resiliencehub,,resiliencehub,,,ResilienceHub,ResilienceHub,,1,,,aws_resiliencehub_,,resiliencehub_,Resilience Hub,AWS,,,,, -resource-explorer-2,resourceexplorer2,resourceexplorer2,resourceexplorer2,,resourceexplorer2,,,ResourceExplorer2,ResourceExplorer2,,,2,,aws_resourceexplorer2_,,resourceexplorer2_,Resource Explorer,AWS,,,,, -resource-groups,resourcegroups,resourcegroups,resourcegroups,,resourcegroups,,,ResourceGroups,ResourceGroups,,1,,,aws_resourcegroups_,,resourcegroups_,Resource Groups,AWS,,,,, -resourcegroupstaggingapi,resourcegroupstaggingapi,resourcegroupstaggingapi,resourcegroupstaggingapi,,resourcegroupstaggingapi,,resourcegroupstagging,ResourceGroupsTaggingAPI,ResourceGroupsTaggingAPI,,1,,,aws_resourcegroupstaggingapi_,,resourcegroupstaggingapi_,Resource Groups Tagging,AWS,,,,, -robomaker,robomaker,robomaker,robomaker,,robomaker,,,RoboMaker,RoboMaker,,1,,,aws_robomaker_,,robomaker_,RoboMaker,AWS,,,,, -rolesanywhere,rolesanywhere,rolesanywhere,rolesanywhere,,rolesanywhere,,,RolesAnywhere,RolesAnywhere,,,2,,aws_rolesanywhere_,,rolesanywhere_,Roles Anywhere,AWS,,,,, -route53,route53,route53,route53,,route53,,,Route53,Route53,x,1,,aws_route53_(?!resolver_),aws_route53_,,route53_delegation_;route53_health_;route53_hosted_;route53_key_;route53_query_;route53_record;route53_traffic_;route53_vpc_;route53_zone,Route 53,Amazon,,,,, -route53domains,route53domains,route53domains,route53domains,,route53domains,,,Route53Domains,Route53Domains,x,,2,,aws_route53domains_,,route53domains_,Route 53 Domains,Amazon,,,,, -route53-recovery-cluster,route53recoverycluster,route53recoverycluster,route53recoverycluster,,route53recoverycluster,,,Route53RecoveryCluster,Route53RecoveryCluster,,1,,,aws_route53recoverycluster_,,route53recoverycluster_,Route 53 Recovery Cluster,Amazon,,,,, -route53-recovery-control-config,route53recoverycontrolconfig,route53recoverycontrolconfig,route53recoverycontrolconfig,,route53recoverycontrolconfig,,,Route53RecoveryControlConfig,Route53RecoveryControlConfig,x,1,,,aws_route53recoverycontrolconfig_,,route53recoverycontrolconfig_,Route 53 Recovery Control Config,Amazon,,,,, -route53-recovery-readiness,route53recoveryreadiness,route53recoveryreadiness,route53recoveryreadiness,,route53recoveryreadiness,,,Route53RecoveryReadiness,Route53RecoveryReadiness,x,1,,,aws_route53recoveryreadiness_,,route53recoveryreadiness_,Route 53 Recovery Readiness,Amazon,,,,, -route53resolver,route53resolver,route53resolver,route53resolver,,route53resolver,,,Route53Resolver,Route53Resolver,,1,,aws_route53_resolver_,aws_route53resolver_,,route53_resolver_,Route 53 Resolver,Amazon,,,,, -s3api,s3api,s3,s3,,s3,,s3api,S3,S3,x,1,,aws_(canonical_user_id|s3_bucket|s3_object),aws_s3_,,s3_bucket;s3_object;canonical_user_id,S3 (Simple Storage),Amazon,,,AWS_S3_ENDPOINT,TF_AWS_S3_ENDPOINT, -s3control,s3control,s3control,s3control,,s3control,,,S3Control,S3Control,,1,2,aws_(s3_account_|s3control_|s3_access_),aws_s3control_,,s3control;s3_account_;s3_access_,S3 Control,Amazon,,,,, -glacier,glacier,glacier,glacier,,glacier,,,Glacier,Glacier,,1,,,aws_glacier_,,glacier_,S3 Glacier,Amazon,,,,, -s3outposts,s3outposts,s3outposts,s3outposts,,s3outposts,,,S3Outposts,S3Outposts,,1,,,aws_s3outposts_,,s3outposts_,S3 on Outposts,Amazon,,,,, -sagemaker,sagemaker,sagemaker,sagemaker,,sagemaker,,,SageMaker,SageMaker,,1,,,aws_sagemaker_,,sagemaker_,SageMaker,Amazon,,,,, -sagemaker-a2i-runtime,sagemakera2iruntime,augmentedairuntime,sagemakera2iruntime,,sagemakera2iruntime,,augmentedairuntime,SageMakerA2IRuntime,AugmentedAIRuntime,,1,,,aws_sagemakera2iruntime_,,sagemakera2iruntime_,SageMaker A2I (Augmented AI),Amazon,,,,, -sagemaker-edge,sagemakeredge,sagemakeredgemanager,sagemakeredge,,sagemakeredge,,sagemakeredgemanager,SageMakerEdge,SagemakerEdgeManager,,1,,,aws_sagemakeredge_,,sagemakeredge_,SageMaker Edge Manager,Amazon,,,,, -sagemaker-featurestore-runtime,sagemakerfeaturestoreruntime,sagemakerfeaturestoreruntime,sagemakerfeaturestoreruntime,,sagemakerfeaturestoreruntime,,,SageMakerFeatureStoreRuntime,SageMakerFeatureStoreRuntime,,1,,,aws_sagemakerfeaturestoreruntime_,,sagemakerfeaturestoreruntime_,SageMaker Feature Store Runtime,Amazon,,,,, -sagemaker-runtime,sagemakerruntime,sagemakerruntime,sagemakerruntime,,sagemakerruntime,,,SageMakerRuntime,SageMakerRuntime,,1,,,aws_sagemakerruntime_,,sagemakerruntime_,SageMaker Runtime,Amazon,,,,, -,,,,,,,,,,,,,,,,,SAM (Serverless Application Model),AWS,x,,,,No SDK support -savingsplans,savingsplans,savingsplans,savingsplans,,savingsplans,,,SavingsPlans,SavingsPlans,,1,,,aws_savingsplans_,,savingsplans_,Savings Plans,AWS,,,,, -,,,,,,,,,,,,,,,,,Schema Conversion Tool,AWS,x,,,,No SDK support -sdb,sdb,simpledb,,simpledb,sdb,,sdb,SimpleDB,SimpleDB,,1,,aws_simpledb_,aws_sdb_,,simpledb_,SDB (SimpleDB),Amazon,,,,, -scheduler,scheduler,scheduler,scheduler,,scheduler,,,Scheduler,Scheduler,,,2,,aws_scheduler_,,scheduler_,EventBridge Scheduler,Amazon,,,,, -secretsmanager,secretsmanager,secretsmanager,secretsmanager,,secretsmanager,,,SecretsManager,SecretsManager,,1,,,aws_secretsmanager_,,secretsmanager_,Secrets Manager,AWS,,,,, -securityhub,securityhub,securityhub,securityhub,,securityhub,,,SecurityHub,SecurityHub,,1,,,aws_securityhub_,,securityhub_,Security Hub,AWS,,,,, -serverlessrepo,serverlessrepo,serverlessapplicationrepository,serverlessapplicationrepository,,serverlessrepo,,serverlessapprepo;serverlessapplicationrepository,ServerlessRepo,ServerlessApplicationRepository,,1,,aws_serverlessapplicationrepository_,aws_serverlessrepo_,,serverlessapplicationrepository_,Serverless Application Repository,AWS,,,,, -servicecatalog,servicecatalog,servicecatalog,servicecatalog,,servicecatalog,,,ServiceCatalog,ServiceCatalog,,1,,,aws_servicecatalog_,,servicecatalog_,Service Catalog,AWS,,,,, -servicecatalog-appregistry,servicecatalogappregistry,appregistry,servicecatalogappregistry,,servicecatalogappregistry,,appregistry,ServiceCatalogAppRegistry,AppRegistry,,1,,,aws_servicecatalogappregistry_,,servicecatalogappregistry_,Service Catalog AppRegistry,AWS,,,,, -service-quotas,servicequotas,servicequotas,servicequotas,,servicequotas,,,ServiceQuotas,ServiceQuotas,,1,,,aws_servicequotas_,,servicequotas_,Service Quotas,,,,,, -ses,ses,ses,ses,,ses,,,SES,SES,,1,,,aws_ses_,,ses_,SES (Simple Email),Amazon,,,,, -sesv2,sesv2,sesv2,sesv2,,sesv2,,,SESV2,SESV2,,,2,,aws_sesv2_,,sesv2_,SESv2 (Simple Email V2),Amazon,,,,, -stepfunctions,stepfunctions,sfn,sfn,,sfn,,stepfunctions,SFN,SFN,,1,,,aws_sfn_,,sfn_,SFN (Step Functions),AWS,,,,, -shield,shield,shield,shield,,shield,,,Shield,Shield,x,1,,,aws_shield_,,shield_,Shield,AWS,,,,, -signer,signer,signer,signer,,signer,,,Signer,Signer,,1,,,aws_signer_,,signer_,Signer,AWS,,,,, -sms,sms,sms,sms,,sms,,,SMS,SMS,,1,,,aws_sms_,,sms_,SMS (Server Migration),AWS,,,,, -snow-device-management,snowdevicemanagement,snowdevicemanagement,snowdevicemanagement,,snowdevicemanagement,,,SnowDeviceManagement,SnowDeviceManagement,,1,,,aws_snowdevicemanagement_,,snowdevicemanagement_,Snow Device Management,AWS,,,,, -snowball,snowball,snowball,snowball,,snowball,,,Snowball,Snowball,,1,,,aws_snowball_,,snowball_,Snow Family,AWS,,,,, -sns,sns,sns,sns,,sns,,,SNS,SNS,,1,,,aws_sns_,,sns_,SNS (Simple Notification),Amazon,,,,, -sqs,sqs,sqs,sqs,,sqs,,,SQS,SQS,,1,,,aws_sqs_,,sqs_,SQS (Simple Queue),Amazon,,,,, -ssm,ssm,ssm,ssm,,ssm,,,SSM,SSM,,1,,,aws_ssm_,,ssm_,SSM (Systems Manager),AWS,,,,, -ssm-contacts,ssmcontacts,ssmcontacts,ssmcontacts,,ssmcontacts,,,SSMContacts,SSMContacts,,1,,,aws_ssmcontacts_,,ssmcontacts_,SSM Incident Manager Contacts,AWS,,,,, -ssm-incidents,ssmincidents,ssmincidents,ssmincidents,,ssmincidents,,,SSMIncidents,SSMIncidents,,1,,,aws_ssmincidents_,,ssmincidents_,SSM Incident Manager Incidents,AWS,,,,, -sso,sso,sso,sso,,sso,,,SSO,SSO,,1,,,aws_sso_,,sso_,SSO (Single Sign-On),AWS,,,,, -sso-admin,ssoadmin,ssoadmin,ssoadmin,,ssoadmin,,,SSOAdmin,SSOAdmin,,1,,,aws_ssoadmin_,,ssoadmin_,SSO Admin,AWS,,,,, -identitystore,identitystore,identitystore,identitystore,,identitystore,,,IdentityStore,IdentityStore,,,2,,aws_identitystore_,,identitystore_,SSO Identity Store,AWS,,,,, -sso-oidc,ssooidc,ssooidc,ssooidc,,ssooidc,,,SSOOIDC,SSOOIDC,,1,,,aws_ssooidc_,,ssooidc_,SSO OIDC,AWS,,,,, -storagegateway,storagegateway,storagegateway,storagegateway,,storagegateway,,,StorageGateway,StorageGateway,,1,,,aws_storagegateway_,,storagegateway_,Storage Gateway,AWS,,,,, -sts,sts,sts,sts,,sts,,,STS,STS,x,1,,aws_caller_identity,aws_sts_,,caller_identity,STS (Security Token),AWS,,,AWS_STS_ENDPOINT,TF_AWS_STS_ENDPOINT, -,,,,,,,,,,,,,,,,,Sumerian,Amazon,x,,,,No SDK support -support,support,support,support,,support,,,Support,Support,,1,,,aws_support_,,support_,Support,AWS,,,,, -swf,swf,swf,swf,,swf,,,SWF,SWF,,1,,,aws_swf_,,swf_,SWF (Simple Workflow),Amazon,,,,, -,,,,,,,,,,,,,,,,,Tag Editor,AWS,x,,,,Part of Resource Groups Tagging -textract,textract,textract,textract,,textract,,,Textract,Textract,,1,,,aws_textract_,,textract_,Textract,Amazon,,,,, -timestream-query,timestreamquery,timestreamquery,timestreamquery,,timestreamquery,,,TimestreamQuery,TimestreamQuery,,1,,,aws_timestreamquery_,,timestreamquery_,Timestream Query,Amazon,,,,, -timestream-write,timestreamwrite,timestreamwrite,timestreamwrite,,timestreamwrite,,,TimestreamWrite,TimestreamWrite,,1,,,aws_timestreamwrite_,,timestreamwrite_,Timestream Write,Amazon,,,,, -,,,,,,,,,,,,,,,,,Tools for PowerShell,AWS,x,,,,No SDK support -,,,,,,,,,,,,,,,,,Training and Certification,AWS,x,,,,No SDK support -transcribe,transcribe,transcribeservice,transcribe,,transcribe,,transcribeservice,Transcribe,TranscribeService,,,2,,aws_transcribe_,,transcribe_,Transcribe,Amazon,,,,, -,,transcribestreamingservice,transcribestreaming,,transcribestreaming,,transcribestreamingservice,TranscribeStreaming,TranscribeStreamingService,,1,,,aws_transcribestreaming_,,transcribestreaming_,Transcribe Streaming,Amazon,,,,, -transfer,transfer,transfer,transfer,,transfer,,,Transfer,Transfer,,1,,,aws_transfer_,,transfer_,Transfer Family,AWS,,,,, -,,,,,transitgateway,ec2,,TransitGateway,,,,,aws_ec2_transit_gateway,aws_transitgateway_,transitgateway_,ec2_transit_gateway,Transit Gateway,AWS,x,x,,,Part of EC2 -translate,translate,translate,translate,,translate,,,Translate,Translate,,1,,,aws_translate_,,translate_,Translate,Amazon,,,,, -,,,,,,,,,,,,,,,,,Trusted Advisor,AWS,x,,,,Part of Support -,,,,,vpc,ec2,,VPC,,,,,aws_((default_)?(network_acl|route_table|security_group|subnet|vpc(?!_ipam))|ec2_(managed|network|subnet|traffic)|egress_only_internet|flow_log|internet_gateway|main_route_table_association|nat_gateway|network_interface|prefix_list|route\b),aws_vpc_,vpc_,default_network_;default_route_;default_security_;default_subnet;default_vpc;ec2_managed_;ec2_network_;ec2_subnet_;ec2_traffic_;egress_only_;flow_log;internet_gateway;main_route_;nat_;network_;prefix_list;route_;route\.;security_group;subnet;vpc_dhcp_;vpc_endpoint;vpc_ipv;vpc_peering_;vpc\.;vpcs\.,VPC (Virtual Private Cloud),Amazon,x,x,,,Part of EC2 -,,,,,ipam,ec2,,IPAM,,,,,aws_vpc_ipam,aws_ipam_,ipam_,vpc_ipam,VPC IPAM (IP Address Manager),Amazon,x,x,,,Part of EC2 -,,,,,vpnclient,ec2,,ClientVPN,,,,,aws_ec2_client_vpn,aws_vpnclient_,vpnclient_,ec2_client_vpn_,VPN (Client),AWS,x,x,,,Part of EC2 -,,,,,vpnsite,ec2,,SiteVPN,,,,,aws_(customer_gateway|vpn_),aws_vpnsite_,vpnsite_,customer_gateway;vpn_,VPN (Site-to-Site),AWS,x,x,,,Part of EC2 -wafv2,wafv2,wafv2,wafv2,,wafv2,,,WAFV2,WAFV2,,1,,,aws_wafv2_,,wafv2_,WAF,AWS,,,,, -waf,waf,waf,waf,,waf,,,WAF,WAF,,1,,,aws_waf_,,waf_,WAF Classic,AWS,,,,, -waf-regional,wafregional,wafregional,wafregional,,wafregional,,,WAFRegional,WAFRegional,,1,,,aws_wafregional_,,wafregional_,WAF Classic Regional,AWS,,,,, -,,,,,,,,,,,,,,,,,WAM (WorkSpaces Application Manager),Amazon,x,,,,No SDK support -,,,,,wavelength,ec2,,Wavelength,,,,,aws_ec2_carrier_gateway,aws_wavelength_,wavelength_,ec2_carrier_,Wavelength,AWS,x,x,,,Part of EC2 -budgets,budgets,budgets,budgets,,budgets,,,Budgets,Budgets,,1,,,aws_budgets_,,budgets_,Web Services Budgets,Amazon,,,,, -wellarchitected,wellarchitected,wellarchitected,wellarchitected,,wellarchitected,,,WellArchitected,WellArchitected,,1,,,aws_wellarchitected_,,wellarchitected_,Well-Architected Tool,AWS,,,,, -workdocs,workdocs,workdocs,workdocs,,workdocs,,,WorkDocs,WorkDocs,,1,,,aws_workdocs_,,workdocs_,WorkDocs,Amazon,,,,, -worklink,worklink,worklink,worklink,,worklink,,,WorkLink,WorkLink,,1,,,aws_worklink_,,worklink_,WorkLink,Amazon,,,,, -workmail,workmail,workmail,workmail,,workmail,,,WorkMail,WorkMail,,1,,,aws_workmail_,,workmail_,WorkMail,Amazon,,,,, -workmailmessageflow,workmailmessageflow,workmailmessageflow,workmailmessageflow,,workmailmessageflow,,,WorkMailMessageFlow,WorkMailMessageFlow,,1,,,aws_workmailmessageflow_,,workmailmessageflow_,WorkMail Message Flow,Amazon,,,,, -workspaces,workspaces,workspaces,workspaces,,workspaces,,,WorkSpaces,WorkSpaces,,1,,,aws_workspaces_,,workspaces_,WorkSpaces,Amazon,,,,, -workspaces-web,workspacesweb,workspacesweb,workspacesweb,,workspacesweb,,,WorkSpacesWeb,WorkSpacesWeb,,1,,,aws_workspacesweb_,,workspacesweb_,WorkSpaces Web,Amazon,,,,, -xray,xray,xray,xray,,xray,,,XRay,XRay,,1,,,aws_xray_,,xray_,X-Ray,AWS,,,,, +AWSCLIV2Command,AWSCLIV2CommandNoDashes,GoV1Package,GoV2Package,ProviderPackageActual,ProviderPackageCorrect,SplitPackageRealPackage,Aliases,ProviderNameUpper,GoV1ClientTypeName,SkipClientGenerate,ClientSDKV1,ClientSDKV2,ResourcePrefixActual,ResourcePrefixCorrect,FilePrefix,DocPrefix,HumanFriendly,Brand,Exclude,AllowedSubcategory,DeprecatedEnvVar,EnvVar,Note +account,account,account,account,,account,,,Account,Account,,1,,,aws_account_,,account_,Account Management,AWS,,,,, +acm,acm,acm,acm,,acm,,,ACM,ACM,,1,,,aws_acm_,,acm_,ACM (Certificate Manager),AWS,,,,, +acm-pca,acmpca,acmpca,acmpca,,acmpca,,,ACMPCA,ACMPCA,,1,,,aws_acmpca_,,acmpca_,ACM PCA (Certificate Manager Private Certificate Authority),AWS,,,,, +alexaforbusiness,alexaforbusiness,alexaforbusiness,alexaforbusiness,,alexaforbusiness,,,AlexaForBusiness,AlexaForBusiness,,1,,,aws_alexaforbusiness_,,alexaforbusiness_,Alexa for Business,,,,,, +amp,amp,prometheusservice,amp,,amp,,prometheus;prometheusservice,AMP,PrometheusService,,1,,aws_prometheus_,aws_amp_,,prometheus_,AMP (Managed Prometheus),Amazon,,,,, +amplify,amplify,amplify,amplify,,amplify,,,Amplify,Amplify,,1,,,aws_amplify_,,amplify_,Amplify,AWS,,,,, +amplifybackend,amplifybackend,amplifybackend,amplifybackend,,amplifybackend,,,AmplifyBackend,AmplifyBackend,,1,,,aws_amplifybackend_,,amplifybackend_,Amplify Backend,AWS,,,,, +amplifyuibuilder,amplifyuibuilder,amplifyuibuilder,amplifyuibuilder,,amplifyuibuilder,,,AmplifyUIBuilder,AmplifyUIBuilder,,1,,,aws_amplifyuibuilder_,,amplifyuibuilder_,Amplify UI Builder,AWS,,,,, +,,,,,,,,,,,,,,,,,Apache MXNet on AWS,AWS,x,,,,Documentation +apigateway,apigateway,apigateway,apigateway,,apigateway,,,APIGateway,APIGateway,,1,,aws_api_gateway_,aws_apigateway_,,api_gateway_,API Gateway,Amazon,,,,, +apigatewaymanagementapi,apigatewaymanagementapi,apigatewaymanagementapi,apigatewaymanagementapi,,apigatewaymanagementapi,,,APIGatewayManagementAPI,ApiGatewayManagementApi,,1,,,aws_apigatewaymanagementapi_,,apigatewaymanagementapi_,API Gateway Management API,Amazon,,,,, +apigatewayv2,apigatewayv2,apigatewayv2,apigatewayv2,,apigatewayv2,,,APIGatewayV2,ApiGatewayV2,,1,,,aws_apigatewayv2_,,apigatewayv2_,API Gateway V2,Amazon,,,,, +appmesh,appmesh,appmesh,appmesh,,appmesh,,,AppMesh,AppMesh,,1,,,aws_appmesh_,,appmesh_,App Mesh,AWS,,,,, +apprunner,apprunner,apprunner,apprunner,,apprunner,,,AppRunner,AppRunner,,1,,,aws_apprunner_,,apprunner_,App Runner,AWS,,,,, +,,,,,,,,,,,,,,,,,App2Container,AWS,x,,,,No SDK support +appconfig,appconfig,appconfig,appconfig,,appconfig,,,AppConfig,AppConfig,,1,,,aws_appconfig_,,appconfig_,AppConfig,AWS,,,,, +appconfigdata,appconfigdata,appconfigdata,appconfigdata,,appconfigdata,,,AppConfigData,AppConfigData,,1,,,aws_appconfigdata_,,appconfigdata_,AppConfig Data,AWS,,,,, +appflow,appflow,appflow,appflow,,appflow,,,AppFlow,Appflow,,1,,,aws_appflow_,,appflow_,AppFlow,Amazon,,,,, +appintegrations,appintegrations,appintegrationsservice,appintegrations,,appintegrations,,appintegrationsservice,AppIntegrations,AppIntegrationsService,,1,,,aws_appintegrations_,,appintegrations_,AppIntegrations,Amazon,,,,, +application-autoscaling,applicationautoscaling,applicationautoscaling,applicationautoscaling,appautoscaling,applicationautoscaling,,applicationautoscaling,AppAutoScaling,ApplicationAutoScaling,,1,,aws_appautoscaling_,aws_applicationautoscaling_,,appautoscaling_,Application Auto Scaling,,,,,, +applicationcostprofiler,applicationcostprofiler,applicationcostprofiler,applicationcostprofiler,,applicationcostprofiler,,,ApplicationCostProfiler,ApplicationCostProfiler,,1,,,aws_applicationcostprofiler_,,applicationcostprofiler_,Application Cost Profiler,AWS,,,,, +discovery,discovery,applicationdiscoveryservice,applicationdiscoveryservice,,discovery,,applicationdiscovery;applicationdiscoveryservice,Discovery,ApplicationDiscoveryService,,1,,,aws_discovery_,,discovery_,Application Discovery,AWS,,,,, +mgn,mgn,mgn,mgn,,mgn,,,Mgn,Mgn,,1,,,aws_mgn_,,mgn_,Application Migration (Mgn),AWS,,,,, +appstream,appstream,appstream,appstream,,appstream,,,AppStream,AppStream,,1,,,aws_appstream_,,appstream_,AppStream 2.0,Amazon,,,,, +appsync,appsync,appsync,appsync,,appsync,,,AppSync,AppSync,,1,,,aws_appsync_,,appsync_,AppSync,AWS,,,,, +,,,,,,,,,,,,,,,,,Artifact,AWS,x,,,,No SDK support +athena,athena,athena,athena,,athena,,,Athena,Athena,,1,,,aws_athena_,,athena_,Athena,Amazon,,,,, +auditmanager,auditmanager,auditmanager,auditmanager,,auditmanager,,,AuditManager,AuditManager,,,2,,aws_auditmanager_,,auditmanager_,Audit Manager,AWS,,,,, +autoscaling,autoscaling,autoscaling,autoscaling,,autoscaling,,,AutoScaling,AutoScaling,,1,,aws_(autoscaling_|launch_configuration),aws_autoscaling_,,autoscaling_;launch_configuration,Auto Scaling,,,,,, +autoscaling-plans,autoscalingplans,autoscalingplans,autoscalingplans,,autoscalingplans,,,AutoScalingPlans,AutoScalingPlans,,1,,,aws_autoscalingplans_,,autoscalingplans_,Auto Scaling Plans,,,,,, +,,,,,,,,,,,,,,,,,Backint Agent for SAP HANA,AWS,x,,,,No SDK support +backup,backup,backup,backup,,backup,,,Backup,Backup,,1,,,aws_backup_,,backup_,Backup,AWS,,,,, +backup-gateway,backupgateway,backupgateway,backupgateway,,backupgateway,,,BackupGateway,BackupGateway,,1,,,aws_backupgateway_,,backupgateway_,Backup Gateway,AWS,,,,, +batch,batch,batch,batch,,batch,,,Batch,Batch,,1,,,aws_batch_,,batch_,Batch,AWS,,,,, +billingconductor,billingconductor,billingconductor,,,billingconductor,,,BillingConductor,BillingConductor,,1,,,aws_billingconductor_,,billingconductor_,Billing Conductor,AWS,,,,, +braket,braket,braket,braket,,braket,,,Braket,Braket,,1,,,aws_braket_,,braket_,Braket,Amazon,,,,, +ce,ce,costexplorer,costexplorer,,ce,,costexplorer,CE,CostExplorer,,1,,,aws_ce_,,ce_,CE (Cost Explorer),AWS,,,,, +,,,,,,,,,,,,,,,,,Chatbot,AWS,x,,,,No SDK support +chime,chime,chime,chime,,chime,,,Chime,Chime,,1,,,aws_chime_,,chime_,Chime,Amazon,,,,, +chime-sdk-identity,chimesdkidentity,chimesdkidentity,chimesdkidentity,,chimesdkidentity,,,ChimeSDKIdentity,ChimeSDKIdentity,,1,,,aws_chimesdkidentity_,,chimesdkidentity_,Chime SDK Identity,Amazon,,,,, +chime-sdk-meetings,chimesdkmeetings,chimesdkmeetings,chimesdkmeetings,,chimesdkmeetings,,,ChimeSDKMeetings,ChimeSDKMeetings,,1,,,aws_chimesdkmeetings_,,chimesdkmeetings_,Chime SDK Meetings,Amazon,,,,, +chime-sdk-messaging,chimesdkmessaging,chimesdkmessaging,chimesdkmessaging,,chimesdkmessaging,,,ChimeSDKMessaging,ChimeSDKMessaging,,1,,,aws_chimesdkmessaging_,,chimesdkmessaging_,Chime SDK Messaging,Amazon,,,,, +,,,,,,,,,,,,,,,,,CLI (Command Line Interface),AWS,x,,,,No SDK support +configure,configure,,,,,,,,,,,,,,,,CLI Configure options,AWS,x,,,,CLI only +ddb,ddb,,,,,,,,,,,,,,,,CLI High-level DynamoDB commands,AWS,x,,,,Part of DynamoDB +s3,s3,,,,,,,,,,,,,,,,CLI High-level S3 commands,AWS,x,,,,CLI only +history,history,,,,,,,,,,,,,,,,CLI History of commands,AWS,x,,,,CLI only +importexport,importexport,,,,,,,,,,,,,,,,CLI Import/Export,AWS,x,,,,CLI only +cli-dev,clidev,,,,,,,,,,,,,,,,CLI Internal commands for development,AWS,x,,,,CLI only +cloudcontrol,cloudcontrol,cloudcontrolapi,cloudcontrol,,cloudcontrol,,cloudcontrolapi,CloudControl,CloudControlApi,,1,,aws_cloudcontrolapi_,aws_cloudcontrol_,,cloudcontrolapi_,Cloud Control API,AWS,,,,, +,,,,,,,,,,,,,,,,,Cloud Digital Interface SDK,AWS,x,,,,No SDK support +clouddirectory,clouddirectory,clouddirectory,clouddirectory,,clouddirectory,,,CloudDirectory,CloudDirectory,,1,,,aws_clouddirectory_,,clouddirectory_,Cloud Directory,Amazon,,,,, +servicediscovery,servicediscovery,servicediscovery,servicediscovery,,servicediscovery,,,ServiceDiscovery,ServiceDiscovery,,1,,aws_service_discovery_,aws_servicediscovery_,,service_discovery_,Cloud Map,AWS,,,,, +cloud9,cloud9,cloud9,cloud9,,cloud9,,,Cloud9,Cloud9,,1,,,aws_cloud9_,,cloud9_,Cloud9,AWS,,,,, +cloudformation,cloudformation,cloudformation,cloudformation,,cloudformation,,,CloudFormation,CloudFormation,,1,,,aws_cloudformation_,,cloudformation_,CloudFormation,AWS,,,,, +cloudfront,cloudfront,cloudfront,cloudfront,,cloudfront,,,CloudFront,CloudFront,,1,,,aws_cloudfront_,,cloudfront_,CloudFront,Amazon,,,,, +cloudhsm,cloudhsm,cloudhsm,cloudhsm,,,,,,,,,,,,,,CloudHSM,AWS,x,,,,Legacy +cloudhsmv2,cloudhsmv2,cloudhsmv2,cloudhsmv2,,cloudhsmv2,,cloudhsm,CloudHSMV2,CloudHSMV2,,1,,aws_cloudhsm_v2_,aws_cloudhsmv2_,,cloudhsm,CloudHSM,AWS,,,,, +cloudsearch,cloudsearch,cloudsearch,cloudsearch,,cloudsearch,,,CloudSearch,CloudSearch,,1,,,aws_cloudsearch_,,cloudsearch_,CloudSearch,Amazon,,,,, +cloudsearchdomain,cloudsearchdomain,cloudsearchdomain,cloudsearchdomain,,cloudsearchdomain,,,CloudSearchDomain,CloudSearchDomain,,1,,,aws_cloudsearchdomain_,,cloudsearchdomain_,CloudSearch Domain,Amazon,,,,, +,,,,,,,,,,,,,,,,,CloudShell,AWS,x,,,,No SDK support +cloudtrail,cloudtrail,cloudtrail,cloudtrail,,cloudtrail,,,CloudTrail,CloudTrail,,1,,aws_cloudtrail,aws_cloudtrail_,,cloudtrail,CloudTrail,AWS,,,,, +cloudwatch,cloudwatch,cloudwatch,cloudwatch,,cloudwatch,,,CloudWatch,CloudWatch,,1,,aws_cloudwatch_(?!(event_|log_|query_)),aws_cloudwatch_,,cloudwatch_dashboard;cloudwatch_metric_;cloudwatch_composite_,CloudWatch,Amazon,,,,, +application-insights,applicationinsights,applicationinsights,applicationinsights,,applicationinsights,,,ApplicationInsights,ApplicationInsights,,1,,,aws_applicationinsights_,,applicationinsights_,CloudWatch Application Insights,Amazon,,,,, +evidently,evidently,cloudwatchevidently,evidently,,evidently,,cloudwatchevidently,Evidently,CloudWatchEvidently,,1,,,aws_evidently_,,evidently_,CloudWatch Evidently,Amazon,,,,, +logs,logs,cloudwatchlogs,cloudwatchlogs,,logs,,cloudwatchlog;cloudwatchlogs,Logs,CloudWatchLogs,,1,,aws_cloudwatch_(log_|query_),aws_logs_,,cloudwatch_log_;cloudwatch_query_,CloudWatch Logs,Amazon,,,,, +rum,rum,cloudwatchrum,rum,,rum,,cloudwatchrum,RUM,CloudWatchRUM,,1,,,aws_rum_,,rum_,CloudWatch RUM,Amazon,,,,, +synthetics,synthetics,synthetics,synthetics,,synthetics,,,Synthetics,Synthetics,,1,,,aws_synthetics_,,synthetics_,CloudWatch Synthetics,Amazon,,,,, +codeartifact,codeartifact,codeartifact,codeartifact,,codeartifact,,,CodeArtifact,CodeArtifact,,1,,,aws_codeartifact_,,codeartifact_,CodeArtifact,AWS,,,,, +codebuild,codebuild,codebuild,codebuild,,codebuild,,,CodeBuild,CodeBuild,,1,,,aws_codebuild_,,codebuild_,CodeBuild,AWS,,,,, +codecommit,codecommit,codecommit,codecommit,,codecommit,,,CodeCommit,CodeCommit,,1,,,aws_codecommit_,,codecommit_,CodeCommit,AWS,,,,, +deploy,deploy,codedeploy,codedeploy,,deploy,,codedeploy,Deploy,CodeDeploy,,1,,aws_codedeploy_,aws_deploy_,,codedeploy_,CodeDeploy,AWS,,,,, +codeguruprofiler,codeguruprofiler,codeguruprofiler,codeguruprofiler,,codeguruprofiler,,,CodeGuruProfiler,CodeGuruProfiler,,1,,,aws_codeguruprofiler_,,codeguruprofiler_,CodeGuru Profiler,Amazon,,,,, +codeguru-reviewer,codegurureviewer,codegurureviewer,codegurureviewer,,codegurureviewer,,,CodeGuruReviewer,CodeGuruReviewer,,1,,,aws_codegurureviewer_,,codegurureviewer_,CodeGuru Reviewer,Amazon,,,,, +codepipeline,codepipeline,codepipeline,codepipeline,,codepipeline,,,CodePipeline,CodePipeline,,1,,aws_codepipeline,aws_codepipeline_,,codepipeline,CodePipeline,AWS,,,,, +codestar,codestar,codestar,codestar,,codestar,,,CodeStar,CodeStar,,1,,,aws_codestar_,,codestar_,CodeStar,AWS,,,,, +codestar-connections,codestarconnections,codestarconnections,codestarconnections,,codestarconnections,,,CodeStarConnections,CodeStarConnections,,1,,,aws_codestarconnections_,,codestarconnections_,CodeStar Connections,AWS,,,,, +codestar-notifications,codestarnotifications,codestarnotifications,codestarnotifications,,codestarnotifications,,,CodeStarNotifications,CodeStarNotifications,,1,,,aws_codestarnotifications_,,codestarnotifications_,CodeStar Notifications,AWS,,,,, +cognito-identity,cognitoidentity,cognitoidentity,cognitoidentity,,cognitoidentity,,,CognitoIdentity,CognitoIdentity,,1,,aws_cognito_identity_(?!provider),aws_cognitoidentity_,,cognito_identity_pool,Cognito Identity,Amazon,,,,, +cognito-idp,cognitoidp,cognitoidentityprovider,cognitoidentityprovider,,cognitoidp,,cognitoidentityprovider,CognitoIDP,CognitoIdentityProvider,,1,,aws_cognito_(identity_provider|resource|user|risk),aws_cognitoidp_,,cognito_identity_provider;cognito_resource_;cognito_user;cognito_risk,Cognito IDP (Identity Provider),Amazon,,,,, +cognito-sync,cognitosync,cognitosync,cognitosync,,cognitosync,,,CognitoSync,CognitoSync,,1,,,aws_cognitosync_,,cognitosync_,Cognito Sync,Amazon,,,,, +comprehend,comprehend,comprehend,comprehend,,comprehend,,,Comprehend,Comprehend,,,2,,aws_comprehend_,,comprehend_,Comprehend,Amazon,,,,, +comprehendmedical,comprehendmedical,comprehendmedical,comprehendmedical,,comprehendmedical,,,ComprehendMedical,ComprehendMedical,,1,,,aws_comprehendmedical_,,comprehendmedical_,Comprehend Medical,Amazon,,,,, +compute-optimizer,computeoptimizer,computeoptimizer,computeoptimizer,,computeoptimizer,,,ComputeOptimizer,ComputeOptimizer,,,2,,aws_computeoptimizer_,,computeoptimizer_,Compute Optimizer,AWS,,,,, +configservice,configservice,configservice,configservice,,configservice,,config,ConfigService,ConfigService,,1,,aws_config_,aws_configservice_,,config_,Config,AWS,,,,, +connect,connect,connect,connect,,connect,,,Connect,Connect,,1,,,aws_connect_,,connect_,Connect,Amazon,,,,, +connect-contact-lens,connectcontactlens,connectcontactlens,connectcontactlens,,connectcontactlens,,,ConnectContactLens,ConnectContactLens,,1,,,aws_connectcontactlens_,,connectcontactlens_,Connect Contact Lens,Amazon,,,,, +customer-profiles,customerprofiles,customerprofiles,customerprofiles,,customerprofiles,,,CustomerProfiles,CustomerProfiles,,1,,,aws_customerprofiles_,,customerprofiles_,Connect Customer Profiles,Amazon,,,,, +connectparticipant,connectparticipant,connectparticipant,connectparticipant,,connectparticipant,,,ConnectParticipant,ConnectParticipant,,1,,,aws_connectparticipant_,,connectparticipant_,Connect Participant,Amazon,,,,, +voice-id,voiceid,voiceid,voiceid,,voiceid,,,VoiceID,VoiceID,,1,,,aws_voiceid_,,voiceid_,Connect Voice ID,Amazon,,,,, +wisdom,wisdom,connectwisdomservice,wisdom,,wisdom,,connectwisdomservice,Wisdom,ConnectWisdomService,,1,,,aws_wisdom_,,wisdom_,Connect Wisdom,Amazon,,,,, +,,,,,,,,,,,,,,,,,Console Mobile Application,AWS,x,,,,No SDK support +controltower,controltower,controltower,controltower,,controltower,,,ControlTower,ControlTower,,1,,,aws_controltower_,,controltower_,Control Tower,AWS,,,,, +cur,cur,costandusagereportservice,costandusagereportservice,,cur,,costandusagereportservice,CUR,CostandUsageReportService,,1,,,aws_cur_,,cur_,Cost and Usage Report,AWS,,,,, +,,,,,,,,,,,,,,,,,Crypto Tools,AWS,x,,,,No SDK support +,,,,,,,,,,,,,,,,,Cryptographic Services Overview,AWS,x,,,,No SDK support +dataexchange,dataexchange,dataexchange,dataexchange,,dataexchange,,,DataExchange,DataExchange,,1,,,aws_dataexchange_,,dataexchange_,Data Exchange,AWS,,,,, +datapipeline,datapipeline,datapipeline,datapipeline,,datapipeline,,,DataPipeline,DataPipeline,,1,,,aws_datapipeline_,,datapipeline_,Data Pipeline,AWS,,,,, +datasync,datasync,datasync,datasync,,datasync,,,DataSync,DataSync,,1,,,aws_datasync_,,datasync_,DataSync,AWS,,,,, +,,,,,,,,,,,,,,,,,Deep Learning AMIs,AWS,x,,,,No SDK support +,,,,,,,,,,,,,,,,,Deep Learning Containers,AWS,x,,,,No SDK support +,,,,,,,,,,,,,,,,,DeepComposer,AWS,x,,,,No SDK support +,,,,,,,,,,,,,,,,,DeepLens,AWS,x,,,,No SDK support +,,,,,,,,,,,,,,,,,DeepRacer,AWS,x,,,,No SDK support +detective,detective,detective,detective,,detective,,,Detective,Detective,,1,,,aws_detective_,,detective_,Detective,Amazon,,,,, +devicefarm,devicefarm,devicefarm,devicefarm,,devicefarm,,,DeviceFarm,DeviceFarm,,1,,,aws_devicefarm_,,devicefarm_,Device Farm,AWS,,,,, +devops-guru,devopsguru,devopsguru,devopsguru,,devopsguru,,,DevOpsGuru,DevOpsGuru,,1,,,aws_devopsguru_,,devopsguru_,DevOps Guru,Amazon,,,,, +directconnect,directconnect,directconnect,directconnect,,directconnect,,,DirectConnect,DirectConnect,,1,,aws_dx_,aws_directconnect_,,dx_,Direct Connect,AWS,,,,, +dlm,dlm,dlm,dlm,,dlm,,,DLM,DLM,,1,,,aws_dlm_,,dlm_,DLM (Data Lifecycle Manager),Amazon,,,,, +dms,dms,databasemigrationservice,databasemigrationservice,,dms,,databasemigration;databasemigrationservice,DMS,DatabaseMigrationService,,1,,,aws_dms_,,dms_,DMS (Database Migration),AWS,,,,, +docdb,docdb,docdb,docdb,,docdb,,,DocDB,DocDB,,1,,,aws_docdb_,,docdb_,DocDB (DocumentDB),Amazon,,,,, +drs,drs,drs,drs,,drs,,,DRS,Drs,,1,,,aws_drs_,,drs_,DRS (Elastic Disaster Recovery),AWS,,,,, +ds,ds,directoryservice,directoryservice,,ds,,directoryservice,DS,DirectoryService,,1,,aws_directory_service_,aws_ds_,,directory_service_,DS (Directory Service),AWS,,,,, +dynamodb,dynamodb,dynamodb,dynamodb,,dynamodb,,,DynamoDB,DynamoDB,,1,,,aws_dynamodb_,,dynamodb_,DynamoDB,Amazon,,,AWS_DYNAMODB_ENDPOINT,TF_AWS_DYNAMODB_ENDPOINT, +dax,dax,dax,dax,,dax,,,DAX,DAX,,1,,,aws_dax_,,dax_,DynamoDB Accelerator (DAX),Amazon,,,,, +dynamodbstreams,dynamodbstreams,dynamodbstreams,dynamodbstreams,,dynamodbstreams,,,DynamoDBStreams,DynamoDBStreams,,1,,,aws_dynamodbstreams_,,dynamodbstreams_,DynamoDB Streams,Amazon,,,,, +,,,,,ec2ebs,ec2,,EC2EBS,,,,,aws_(ebs_|volume_attach|snapshot_create),aws_ec2ebs_,ebs_,ebs_;volume_attachment;snapshot_,EBS (EC2),Amazon,x,x,,,Part of EC2 +ebs,ebs,ebs,ebs,,ebs,,,EBS,EBS,,1,,,aws_ebs_,,changewhenimplemented,EBS (Elastic Block Store),Amazon,,,,, +ec2,ec2,ec2,ec2,,ec2,ec2,,EC2,EC2,,1,,aws_(ami|availability_zone|ec2_(availability|capacity|fleet|host|instance|serial|spot|tag)|eip|instance|key_pair|launch_template|placement_group|spot),aws_ec2_,ec2_,ami;availability_zone;ec2_availability_;ec2_capacity_;ec2_fleet;ec2_host;ec2_instance_;ec2_serial_;ec2_spot_;ec2_tag;eip;instance;key_pair;launch_template;placement_group;spot_,EC2 (Elastic Compute Cloud),Amazon,,,,, +imagebuilder,imagebuilder,imagebuilder,imagebuilder,,imagebuilder,,,ImageBuilder,Imagebuilder,,1,,,aws_imagebuilder_,,imagebuilder_,EC2 Image Builder,Amazon,,,,, +ec2-instance-connect,ec2instanceconnect,ec2instanceconnect,ec2instanceconnect,,ec2instanceconnect,,,EC2InstanceConnect,EC2InstanceConnect,,1,,,aws_ec2instanceconnect_,,ec2instanceconnect_,EC2 Instance Connect,AWS,,,,, +ecr,ecr,ecr,ecr,,ecr,,,ECR,ECR,,1,,,aws_ecr_,,ecr_,ECR (Elastic Container Registry),Amazon,,,,, +ecr-public,ecrpublic,ecrpublic,ecrpublic,,ecrpublic,,,ECRPublic,ECRPublic,,1,,,aws_ecrpublic_,,ecrpublic_,ECR Public,Amazon,,,,, +ecs,ecs,ecs,ecs,,ecs,,,ECS,ECS,,1,,,aws_ecs_,,ecs_,ECS (Elastic Container),Amazon,,,,, +efs,efs,efs,efs,,efs,,,EFS,EFS,,1,,,aws_efs_,,efs_,EFS (Elastic File System),Amazon,,,,, +eks,eks,eks,eks,,eks,,,EKS,EKS,,1,,,aws_eks_,,eks_,EKS (Elastic Kubernetes),Amazon,,,,, +elasticbeanstalk,elasticbeanstalk,elasticbeanstalk,elasticbeanstalk,,elasticbeanstalk,,beanstalk,ElasticBeanstalk,ElasticBeanstalk,,1,,aws_elastic_beanstalk_,aws_elasticbeanstalk_,,elastic_beanstalk_,Elastic Beanstalk,AWS,,,,, +elastic-inference,elasticinference,elasticinference,elasticinference,,elasticinference,,,ElasticInference,ElasticInference,,1,,,aws_elasticinference_,,elasticinference_,Elastic Inference,Amazon,,,,, +elastictranscoder,elastictranscoder,elastictranscoder,elastictranscoder,,elastictranscoder,,,ElasticTranscoder,ElasticTranscoder,,1,,,aws_elastictranscoder_,,elastictranscoder_,Elastic Transcoder,Amazon,,,,, +elasticache,elasticache,elasticache,elasticache,,elasticache,,,ElastiCache,ElastiCache,,1,,,aws_elasticache_,,elasticache_,ElastiCache,Amazon,,,,, +es,es,elasticsearchservice,elasticsearchservice,elasticsearch,es,,es;elasticsearchservice,Elasticsearch,ElasticsearchService,,1,,aws_elasticsearch_,aws_es_,,elasticsearch_,Elasticsearch,Amazon,,,,, +elbv2,elbv2,elbv2,elasticloadbalancingv2,,elbv2,,elasticloadbalancingv2,ELBV2,ELBV2,,1,,aws_a?lb(\b|_listener|_target_group),aws_elbv2_,,lb\.;lb_listener;lb_target_group;lb_hosted,ELB (Elastic Load Balancing),,,,,, +elb,elb,elb,elasticloadbalancing,,elb,,elasticloadbalancing,ELB,ELB,,1,,aws_(app_cookie_stickiness_policy|elb|lb_cookie_stickiness_policy|lb_ssl_negotiation_policy|load_balancer_|proxy_protocol_policy),aws_elb_,,app_cookie_stickiness_policy;elb;lb_cookie_stickiness_policy;lb_ssl_negotiation_policy;load_balancer;proxy_protocol_policy,ELB Classic,,,,,, +mediaconnect,mediaconnect,mediaconnect,mediaconnect,,mediaconnect,,,MediaConnect,MediaConnect,,1,,,aws_mediaconnect_,,media_connect_,Elemental MediaConnect,AWS,,,,, +mediaconvert,mediaconvert,mediaconvert,mediaconvert,,mediaconvert,,,MediaConvert,MediaConvert,,1,,aws_media_convert_,aws_mediaconvert_,,media_convert_,Elemental MediaConvert,AWS,,,,, +medialive,medialive,medialive,medialive,,medialive,,,MediaLive,MediaLive,,,2,,aws_medialive_,,medialive_,Elemental MediaLive,AWS,,,,, +mediapackage,mediapackage,mediapackage,mediapackage,,mediapackage,,,MediaPackage,MediaPackage,,1,,aws_media_package_,aws_mediapackage_,,media_package_,Elemental MediaPackage,AWS,,,,, +mediapackage-vod,mediapackagevod,mediapackagevod,mediapackagevod,,mediapackagevod,,,MediaPackageVOD,MediaPackageVod,,1,,,aws_mediapackagevod_,,mediapackagevod_,Elemental MediaPackage VOD,AWS,,,,, +mediastore,mediastore,mediastore,mediastore,,mediastore,,,MediaStore,MediaStore,,1,,aws_media_store_,aws_mediastore_,,media_store_,Elemental MediaStore,AWS,,,,, +mediastore-data,mediastoredata,mediastoredata,mediastoredata,,mediastoredata,,,MediaStoreData,MediaStoreData,,1,,,aws_mediastoredata_,,mediastoredata_,Elemental MediaStore Data,AWS,,,,, +mediatailor,mediatailor,mediatailor,mediatailor,,mediatailor,,,MediaTailor,MediaTailor,,1,,,aws_mediatailor_,,media_tailor_,Elemental MediaTailor,AWS,,,,, +,,,,,,,,,,,,,,,,,Elemental On-Premises,AWS,x,,,,No SDK support +emr,emr,emr,emr,,emr,,,EMR,EMR,,1,,,aws_emr_,,emr_,EMR,Amazon,,,,, +emr-containers,emrcontainers,emrcontainers,emrcontainers,,emrcontainers,,,EMRContainers,EMRContainers,,1,,,aws_emrcontainers_,,emrcontainers_,EMR Containers,Amazon,,,,, +emr-serverless,emrserverless,emrserverless,emrserverless,,emrserverless,,,EMRServerless,EMRServerless,,1,,,aws_emrserverless_,,emrserverless_,EMR Serverless,Amazon,,,,, +,,,,,,,,,,,,,,,,,End-of-Support Migration Program (EMP) for Windows Server,AWS,x,,,,No SDK support +events,events,eventbridge,eventbridge,,events,,eventbridge;cloudwatchevents,Events,EventBridge,,1,,aws_cloudwatch_event_,aws_events_,,cloudwatch_event_,EventBridge,Amazon,,,,, +schemas,schemas,schemas,schemas,,schemas,,,Schemas,Schemas,,1,,,aws_schemas_,,schemas_,EventBridge Schemas,Amazon,,,,, +fis,fis,fis,fis,,fis,,,FIS,FIS,,,2,,aws_fis_,,fis_,FIS (Fault Injection Simulator),AWS,,,,, +finspace,finspace,finspace,finspace,,finspace,,,FinSpace,Finspace,,1,,,aws_finspace_,,finspace_,FinSpace,Amazon,,,,, +finspace-data,finspacedata,finspacedata,finspacedata,,finspacedata,,,FinSpaceData,FinSpaceData,,1,,,aws_finspacedata_,,finspacedata_,FinSpace Data,Amazon,,,,, +fms,fms,fms,fms,,fms,,,FMS,FMS,,1,,,aws_fms_,,fms_,FMS (Firewall Manager),AWS,,,,, +forecast,forecast,forecastservice,forecast,,forecast,,forecastservice,Forecast,ForecastService,,1,,,aws_forecast_,,forecast_,Forecast,Amazon,,,,, +forecastquery,forecastquery,forecastqueryservice,forecastquery,,forecastquery,,forecastqueryservice,ForecastQuery,ForecastQueryService,,1,,,aws_forecastquery_,,forecastquery_,Forecast Query,Amazon,,,,, +frauddetector,frauddetector,frauddetector,frauddetector,,frauddetector,,,FraudDetector,FraudDetector,,1,,,aws_frauddetector_,,frauddetector_,Fraud Detector,Amazon,,,,, +,,,,,,,,,,,,,,,,,FreeRTOS,,x,,,,No SDK support +fsx,fsx,fsx,fsx,,fsx,,,FSx,FSx,,1,,,aws_fsx_,,fsx_,FSx,Amazon,,,,, +gamelift,gamelift,gamelift,gamelift,,gamelift,,,GameLift,GameLift,,1,,,aws_gamelift_,,gamelift_,GameLift,Amazon,,,,, +globalaccelerator,globalaccelerator,globalaccelerator,globalaccelerator,,globalaccelerator,,,GlobalAccelerator,GlobalAccelerator,x,1,,,aws_globalaccelerator_,,globalaccelerator_,Global Accelerator,AWS,,,,, +glue,glue,glue,glue,,glue,,,Glue,Glue,,1,,,aws_glue_,,glue_,Glue,AWS,,,,, +databrew,databrew,gluedatabrew,databrew,,databrew,,gluedatabrew,DataBrew,GlueDataBrew,,1,,,aws_databrew_,,databrew_,Glue DataBrew,AWS,,,,, +groundstation,groundstation,groundstation,groundstation,,groundstation,,,GroundStation,GroundStation,,1,,,aws_groundstation_,,groundstation_,Ground Station,AWS,,,,, +guardduty,guardduty,guardduty,guardduty,,guardduty,,,GuardDuty,GuardDuty,,1,,,aws_guardduty_,,guardduty_,GuardDuty,Amazon,,,,, +health,health,health,health,,health,,,Health,Health,,1,,,aws_health_,,health_,Health,AWS,,,,, +healthlake,healthlake,healthlake,healthlake,,healthlake,,,HealthLake,HealthLake,,1,,,aws_healthlake_,,healthlake_,HealthLake,Amazon,,,,, +honeycode,honeycode,honeycode,honeycode,,honeycode,,,Honeycode,Honeycode,,1,,,aws_honeycode_,,honeycode_,Honeycode,Amazon,,,,, +iam,iam,iam,iam,,iam,,,IAM,IAM,,1,,,aws_iam_,,iam_,IAM (Identity & Access Management),AWS,,,AWS_IAM_ENDPOINT,TF_AWS_IAM_ENDPOINT, +accessanalyzer,accessanalyzer,accessanalyzer,accessanalyzer,,accessanalyzer,,,AccessAnalyzer,AccessAnalyzer,,1,,,aws_accessanalyzer_,,accessanalyzer_,IAM Access Analyzer,AWS,,,,, +inspector,inspector,inspector,inspector,,inspector,,,Inspector,Inspector,,1,,,aws_inspector_,,inspector_,Inspector,Amazon,,,,, +inspector2,inspector2,inspector2,inspector2,,inspector2,,inspectorv2,Inspector2,Inspector2,,,2,,aws_inspector2_,,inspector2_,Inspector V2,Amazon,,,,, +iot1click-devices,iot1clickdevices,iot1clickdevicesservice,iot1clickdevicesservice,,iot1clickdevices,,iot1clickdevicesservice,IoT1ClickDevices,IoT1ClickDevicesService,,1,,,aws_iot1clickdevices_,,iot1clickdevices_,IoT 1-Click Devices,AWS,,,,, +iot1click-projects,iot1clickprojects,iot1clickprojects,iot1clickprojects,,iot1clickprojects,,,IoT1ClickProjects,IoT1ClickProjects,,1,,,aws_iot1clickprojects_,,iot1clickprojects_,IoT 1-Click Projects,AWS,,,,, +iotanalytics,iotanalytics,iotanalytics,iotanalytics,,iotanalytics,,,IoTAnalytics,IoTAnalytics,,1,,,aws_iotanalytics_,,iotanalytics_,IoT Analytics,AWS,,,,, +iot,iot,iot,iot,,iot,,,IoT,IoT,,1,,,aws_iot_,,iot_,IoT Core,AWS,,,,, +iot-data,iotdata,iotdataplane,iotdataplane,,iotdata,,iotdataplane,IoTData,IoTDataPlane,,1,,,aws_iotdata_,,iotdata_,IoT Data Plane,AWS,,,,, +,,,,,,,,,,,,,,,,,IoT Device Defender,AWS,x,,,,Part of IoT +iotdeviceadvisor,iotdeviceadvisor,iotdeviceadvisor,iotdeviceadvisor,,iotdeviceadvisor,,,IoTDeviceAdvisor,IoTDeviceAdvisor,,1,,,aws_iotdeviceadvisor_,,iotdeviceadvisor_,IoT Device Management,AWS,,,,, +iotevents,iotevents,iotevents,iotevents,,iotevents,,,IoTEvents,IoTEvents,,1,,,aws_iotevents_,,iotevents_,IoT Events,AWS,,,,, +iotevents-data,ioteventsdata,ioteventsdata,ioteventsdata,,ioteventsdata,,,IoTEventsData,IoTEventsData,,1,,,aws_ioteventsdata_,,ioteventsdata_,IoT Events Data,AWS,,,,, +,,,,,,,,,,,,,,,,,IoT ExpressLink,AWS,x,,,,No SDK support +iotfleethub,iotfleethub,iotfleethub,iotfleethub,,iotfleethub,,,IoTFleetHub,IoTFleetHub,,1,,,aws_iotfleethub_,,iotfleethub_,IoT Fleet Hub,AWS,,,,, +,,,,,,,,,,,,,,,,,IoT FleetWise,AWS,x,,,,No SDK support +greengrass,greengrass,greengrass,greengrass,,greengrass,,,Greengrass,Greengrass,,1,,,aws_greengrass_,,greengrass_,IoT Greengrass,AWS,,,,, +greengrassv2,greengrassv2,greengrassv2,greengrassv2,,greengrassv2,,,GreengrassV2,GreengrassV2,,1,,,aws_greengrassv2_,,greengrassv2_,IoT Greengrass V2,AWS,,,,, +iot-jobs-data,iotjobsdata,iotjobsdataplane,iotjobsdataplane,,iotjobsdata,,iotjobsdataplane,IoTJobsData,IoTJobsDataPlane,,1,,,aws_iotjobsdata_,,iotjobsdata_,IoT Jobs Data Plane,AWS,,,,, +,,,,,,,,,,,,,,,,,IoT RoboRunner,AWS,x,,,,No SDK support +iotsecuretunneling,iotsecuretunneling,iotsecuretunneling,iotsecuretunneling,,iotsecuretunneling,,,IoTSecureTunneling,IoTSecureTunneling,,1,,,aws_iotsecuretunneling_,,iotsecuretunneling_,IoT Secure Tunneling,AWS,,,,, +iotsitewise,iotsitewise,iotsitewise,iotsitewise,,iotsitewise,,,IoTSiteWise,IoTSiteWise,,1,,,aws_iotsitewise_,,iotsitewise_,IoT SiteWise,AWS,,,,, +iotthingsgraph,iotthingsgraph,iotthingsgraph,iotthingsgraph,,iotthingsgraph,,,IoTThingsGraph,IoTThingsGraph,,1,,,aws_iotthingsgraph_,,iotthingsgraph_,IoT Things Graph,AWS,,,,, +iottwinmaker,iottwinmaker,iottwinmaker,iottwinmaker,,iottwinmaker,,,IoTTwinMaker,IoTTwinMaker,,1,,,aws_iottwinmaker_,,iottwinmaker_,IoT TwinMaker,AWS,,,,, +iotwireless,iotwireless,iotwireless,iotwireless,,iotwireless,,,IoTWireless,IoTWireless,,1,,,aws_iotwireless_,,iotwireless_,IoT Wireless,AWS,,,,, +,,,,,,,,,,,,,,,,,IQ,AWS,x,,,,No SDK support +ivs,ivs,ivs,ivs,,ivs,,,IVS,IVS,,1,,,aws_ivs_,,ivs_,IVS (Interactive Video),Amazon,,,,, +ivschat,ivschat,ivschat,ivschat,,ivschat,,,IVSChat,Ivschat,,,2,,aws_ivschat_,,ivschat_,IVS (Interactive Video) Chat,Amazon,,,,, +kendra,kendra,kendra,kendra,,kendra,,,Kendra,Kendra,,,2,,aws_kendra_,,kendra_,Kendra,Amazon,,,,, +keyspaces,keyspaces,keyspaces,,,keyspaces,,,Keyspaces,Keyspaces,,1,,,aws_keyspaces_,,keyspaces_,Keyspaces (for Apache Cassandra),Amazon,,,,, +kinesis,kinesis,kinesis,kinesis,,kinesis,,,Kinesis,Kinesis,,1,,aws_kinesis_stream,aws_kinesis_,,kinesis_stream,Kinesis,Amazon,,,,, +kinesisanalytics,kinesisanalytics,kinesisanalytics,kinesisanalytics,,kinesisanalytics,,,KinesisAnalytics,KinesisAnalytics,,1,,aws_kinesis_analytics_,aws_kinesisanalytics_,,kinesis_analytics_,Kinesis Analytics,Amazon,,,,, +kinesisanalyticsv2,kinesisanalyticsv2,kinesisanalyticsv2,kinesisanalyticsv2,,kinesisanalyticsv2,,,KinesisAnalyticsV2,KinesisAnalyticsV2,,1,,,aws_kinesisanalyticsv2_,,kinesisanalyticsv2_,Kinesis Analytics V2,Amazon,,,,, +firehose,firehose,firehose,firehose,,firehose,,,Firehose,Firehose,,1,,aws_kinesis_firehose_,aws_firehose_,,kinesis_firehose_,Kinesis Firehose,Amazon,,,,, +kinesisvideo,kinesisvideo,kinesisvideo,kinesisvideo,,kinesisvideo,,,KinesisVideo,KinesisVideo,,1,,,aws_kinesisvideo_,,kinesis_video_,Kinesis Video,Amazon,,,,, +kinesis-video-archived-media,kinesisvideoarchivedmedia,kinesisvideoarchivedmedia,kinesisvideoarchivedmedia,,kinesisvideoarchivedmedia,,,KinesisVideoArchivedMedia,KinesisVideoArchivedMedia,,1,,,aws_kinesisvideoarchivedmedia_,,kinesisvideoarchivedmedia_,Kinesis Video Archived Media,Amazon,,,,, +kinesis-video-media,kinesisvideomedia,kinesisvideomedia,kinesisvideomedia,,kinesisvideomedia,,,KinesisVideoMedia,KinesisVideoMedia,,1,,,aws_kinesisvideomedia_,,kinesisvideomedia_,Kinesis Video Media,Amazon,,,,, +kinesis-video-signaling,kinesisvideosignaling,kinesisvideosignalingchannels,kinesisvideosignaling,,kinesisvideosignaling,,kinesisvideosignalingchannels,KinesisVideoSignaling,KinesisVideoSignalingChannels,,1,,,aws_kinesisvideosignaling_,,kinesisvideosignaling_,Kinesis Video Signaling,Amazon,,,,, +kms,kms,kms,kms,,kms,,,KMS,KMS,,1,,,aws_kms_,,kms_,KMS (Key Management),AWS,,,,, +lakeformation,lakeformation,lakeformation,lakeformation,,lakeformation,,,LakeFormation,LakeFormation,,1,,,aws_lakeformation_,,lakeformation_,Lake Formation,AWS,,,,, +lambda,lambda,lambda,lambda,,lambda,,,Lambda,Lambda,,1,,,aws_lambda_,,lambda_,Lambda,AWS,,,,, +,,,,,,,,,,,,,,,,,Launch Wizard,AWS,x,,,,No SDK support +lex-models,lexmodels,lexmodelbuildingservice,lexmodelbuildingservice,,lexmodels,,lexmodelbuilding;lexmodelbuildingservice;lex,LexModels,LexModelBuildingService,,1,,aws_lex_,aws_lexmodels_,,lex_,Lex Model Building,Amazon,,,,, +lexv2-models,lexv2models,lexmodelsv2,lexmodelsv2,,lexmodelsv2,,lexv2models,LexModelsV2,LexModelsV2,,1,,,aws_lexmodelsv2_,,lexmodelsv2_,Lex Models V2,Amazon,,,,, +lex-runtime,lexruntime,lexruntimeservice,lexruntimeservice,,lexruntime,,lexruntimeservice,LexRuntime,LexRuntimeService,,1,,,aws_lexruntime_,,lexruntime_,Lex Runtime,Amazon,,,,, +lexv2-runtime,lexv2runtime,lexruntimev2,lexruntimev2,,lexruntimev2,,lexv2runtime,LexRuntimeV2,LexRuntimeV2,,1,,,aws_lexruntimev2_,,lexruntimev2_,Lex Runtime V2,Amazon,,,,, +license-manager,licensemanager,licensemanager,licensemanager,,licensemanager,,,LicenseManager,LicenseManager,,1,,,aws_licensemanager_,,licensemanager_,License Manager,AWS,,,,, +lightsail,lightsail,lightsail,lightsail,,lightsail,,,Lightsail,Lightsail,,1,,,aws_lightsail_,,lightsail_,Lightsail,Amazon,,,,, +location,location,locationservice,location,,location,,locationservice,Location,LocationService,,1,,,aws_location_,,location_,Location,Amazon,,,,, +lookoutequipment,lookoutequipment,lookoutequipment,lookoutequipment,,lookoutequipment,,,LookoutEquipment,LookoutEquipment,,1,,,aws_lookoutequipment_,,lookoutequipment_,Lookout for Equipment,Amazon,,,,, +lookoutmetrics,lookoutmetrics,lookoutmetrics,lookoutmetrics,,lookoutmetrics,,,LookoutMetrics,LookoutMetrics,,1,,,aws_lookoutmetrics_,,lookoutmetrics_,Lookout for Metrics,Amazon,,,,, +lookoutvision,lookoutvision,lookoutforvision,lookoutvision,,lookoutvision,,lookoutforvision,LookoutVision,LookoutForVision,,1,,,aws_lookoutvision_,,lookoutvision_,Lookout for Vision,Amazon,,,,, +,,,,,,,,,,,,,,,,,Lumberyard,Amazon,x,,,,No SDK support +machinelearning,machinelearning,machinelearning,machinelearning,,machinelearning,,,MachineLearning,MachineLearning,,1,,,aws_machinelearning_,,machinelearning_,Machine Learning,Amazon,,,,, +macie2,macie2,macie2,macie2,,macie2,,,Macie2,Macie2,,1,,,aws_macie2_,,macie2_,Macie,Amazon,,,,, +macie,macie,macie,macie,,macie,,,Macie,Macie,,1,,,aws_macie_,,macie_,Macie Classic,Amazon,,,,, +,,,,,,,,,,,,,,,,,Mainframe Modernization,AWS,x,,,,No SDK support +managedblockchain,managedblockchain,managedblockchain,managedblockchain,,managedblockchain,,,ManagedBlockchain,ManagedBlockchain,,1,,,aws_managedblockchain_,,managedblockchain_,Managed Blockchain,Amazon,,,,, +grafana,grafana,managedgrafana,grafana,,grafana,,managedgrafana;amg,Grafana,ManagedGrafana,,1,,,aws_grafana_,,grafana_,Managed Grafana,Amazon,,,,, +kafka,kafka,kafka,kafka,,kafka,,msk,Kafka,Kafka,,1,,aws_msk_,aws_kafka_,,msk_,Managed Streaming for Kafka,Amazon,,,,, +kafkaconnect,kafkaconnect,kafkaconnect,kafkaconnect,,kafkaconnect,,,KafkaConnect,KafkaConnect,,1,,aws_mskconnect_,aws_kafkaconnect_,,mskconnect_,Managed Streaming for Kafka Connect,Amazon,,,,, +,,,,,,,,,,,,,,,,,Management Console,AWS,x,,,,No SDK support +marketplace-catalog,marketplacecatalog,marketplacecatalog,marketplacecatalog,,marketplacecatalog,,,MarketplaceCatalog,MarketplaceCatalog,,1,,,aws_marketplacecatalog_,,marketplace_catalog_,Marketplace Catalog,AWS,,,,, +marketplacecommerceanalytics,marketplacecommerceanalytics,marketplacecommerceanalytics,marketplacecommerceanalytics,,marketplacecommerceanalytics,,,MarketplaceCommerceAnalytics,MarketplaceCommerceAnalytics,,1,,,aws_marketplacecommerceanalytics_,,marketplacecommerceanalytics_,Marketplace Commerce Analytics,AWS,,,,, +marketplace-entitlement,marketplaceentitlement,marketplaceentitlementservice,marketplaceentitlementservice,,marketplaceentitlement,,marketplaceentitlementservice,MarketplaceEntitlement,MarketplaceEntitlementService,,1,,,aws_marketplaceentitlement_,,marketplaceentitlement_,Marketplace Entitlement,AWS,,,,, +meteringmarketplace,meteringmarketplace,marketplacemetering,marketplacemetering,,marketplacemetering,,meteringmarketplace,MarketplaceMetering,MarketplaceMetering,,1,,,aws_marketplacemetering_,,marketplacemetering_,Marketplace Metering,AWS,,,,, +memorydb,memorydb,memorydb,memorydb,,memorydb,,,MemoryDB,MemoryDB,,1,,,aws_memorydb_,,memorydb_,MemoryDB for Redis,Amazon,,,,, +,,,,,meta,,,Meta,,,,,aws_(arn|billing_service_account|default_tags|ip_ranges|partition|regions?|service)$,aws_meta_,,arn;ip_ranges;billing_service_account;default_tags;partition;region;service\.,Meta Data Sources,,x,x,,,Not an AWS service (metadata) +mgh,mgh,migrationhub,migrationhub,,mgh,,migrationhub,MgH,MigrationHub,,1,,,aws_mgh_,,mgh_,MgH (Migration Hub),AWS,,,,, +,,,,,,,,,,,,,,,,,Microservice Extractor for .NET,AWS,x,,,,No SDK support +migrationhub-config,migrationhubconfig,migrationhubconfig,migrationhubconfig,,migrationhubconfig,,,MigrationHubConfig,MigrationHubConfig,,1,,,aws_migrationhubconfig_,,migrationhubconfig_,Migration Hub Config,AWS,,,,, +migration-hub-refactor-spaces,migrationhubrefactorspaces,migrationhubrefactorspaces,migrationhubrefactorspaces,,migrationhubrefactorspaces,,,MigrationHubRefactorSpaces,MigrationHubRefactorSpaces,,1,,,aws_migrationhubrefactorspaces_,,migrationhubrefactorspaces_,Migration Hub Refactor Spaces,AWS,,,,, +migrationhubstrategy,migrationhubstrategy,migrationhubstrategyrecommendations,migrationhubstrategy,,migrationhubstrategy,,migrationhubstrategyrecommendations,MigrationHubStrategy,MigrationHubStrategyRecommendations,,1,,,aws_migrationhubstrategy_,,migrationhubstrategy_,Migration Hub Strategy,AWS,,,,, +mobile,mobile,mobile,mobile,,mobile,,,Mobile,Mobile,,1,,,aws_mobile_,,mobile_,Mobile,AWS,,,,, +,,mobileanalytics,,,,,,MobileAnalytics,MobileAnalytics,,,,,,,,Mobile Analytics,AWS,x,,,,Only in Go SDK v1 +,,,,,,,,,,,,,,,,,Mobile SDK for Unity,AWS,x,,,,No SDK support +,,,,,,,,,,,,,,,,,Mobile SDK for Xamarin,AWS,x,,,,No SDK support +,,,,,,,,,,,,,,,,,Monitron,Amazon,x,,,,No SDK support +mq,mq,mq,mq,,mq,,,MQ,MQ,,1,,,aws_mq_,,mq_,MQ,Amazon,,,,, +mturk,mturk,mturk,mturk,,mturk,,,MTurk,MTurk,,1,,,aws_mturk_,,mturk_,MTurk (Mechanical Turk),Amazon,,,,, +mwaa,mwaa,mwaa,mwaa,,mwaa,,,MWAA,MWAA,,1,,,aws_mwaa_,,mwaa_,MWAA (Managed Workflows for Apache Airflow),Amazon,,,,, +neptune,neptune,neptune,neptune,,neptune,,,Neptune,Neptune,,1,,,aws_neptune_,,neptune_,Neptune,Amazon,,,,, +network-firewall,networkfirewall,networkfirewall,networkfirewall,,networkfirewall,,,NetworkFirewall,NetworkFirewall,,1,,,aws_networkfirewall_,,networkfirewall_,Network Firewall,AWS,,,,, +networkmanager,networkmanager,networkmanager,networkmanager,,networkmanager,,,NetworkManager,NetworkManager,,1,,,aws_networkmanager_,,networkmanager_,Network Manager,AWS,,,,, +,,,,,,,,,,,,,,,,,NICE DCV,,x,,,,No SDK support +nimble,nimble,nimblestudio,nimble,,nimble,,nimblestudio,Nimble,NimbleStudio,,1,,,aws_nimble_,,nimble_,Nimble Studio,Amazon,,,,, +opensearch,opensearch,opensearchservice,opensearch,,opensearch,,opensearchservice,OpenSearch,OpenSearchService,,1,,,aws_opensearch_,,opensearch_,OpenSearch,Amazon,,,,, +opsworks,opsworks,opsworks,opsworks,,opsworks,,,OpsWorks,OpsWorks,,1,,,aws_opsworks_,,opsworks_,OpsWorks,AWS,,,,, +opsworks-cm,opsworkscm,opsworkscm,opsworkscm,,opsworkscm,,,OpsWorksCM,OpsWorksCM,,1,,,aws_opsworkscm_,,opsworkscm_,OpsWorks CM,AWS,,,,, +organizations,organizations,organizations,organizations,,organizations,,,Organizations,Organizations,,1,,,aws_organizations_,,organizations_,Organizations,AWS,,,,, +outposts,outposts,outposts,outposts,,outposts,,,Outposts,Outposts,,1,,,aws_outposts_,,outposts_,Outposts,AWS,,,,, +,,,,,ec2outposts,ec2,,EC2Outposts,,,,,aws_ec2_(coip_pool|local_gateway),aws_ec2outposts_,outposts_,ec2_coip_pool;ec2_local_gateway,Outposts (EC2),AWS,x,x,,,Part of EC2 +panorama,panorama,panorama,panorama,,panorama,,,Panorama,Panorama,,1,,,aws_panorama_,,panorama_,Panorama,AWS,,,,, +,,,,,,,,,,,,,,,,,ParallelCluster,AWS,x,,,,No SDK support +personalize,personalize,personalize,personalize,,personalize,,,Personalize,Personalize,,1,,,aws_personalize_,,personalize_,Personalize,Amazon,,,,, +personalize-events,personalizeevents,personalizeevents,personalizeevents,,personalizeevents,,,PersonalizeEvents,PersonalizeEvents,,1,,,aws_personalizeevents_,,personalizeevents_,Personalize Events,Amazon,,,,, +personalize-runtime,personalizeruntime,personalizeruntime,personalizeruntime,,personalizeruntime,,,PersonalizeRuntime,PersonalizeRuntime,,1,,,aws_personalizeruntime_,,personalizeruntime_,Personalize Runtime,Amazon,,,,, +pinpoint,pinpoint,pinpoint,pinpoint,,pinpoint,,,Pinpoint,Pinpoint,,1,,,aws_pinpoint_,,pinpoint_,Pinpoint,Amazon,,,,, +pinpoint-email,pinpointemail,pinpointemail,pinpointemail,,pinpointemail,,,PinpointEmail,PinpointEmail,,1,,,aws_pinpointemail_,,pinpointemail_,Pinpoint Email,Amazon,,,,, +pinpoint-sms-voice,pinpointsmsvoice,pinpointsmsvoice,pinpointsmsvoice,,pinpointsmsvoice,,,PinpointSMSVoice,PinpointSMSVoice,,1,,,aws_pinpointsmsvoice_,,pinpointsmsvoice_,Pinpoint SMS and Voice,Amazon,,,,, +polly,polly,polly,polly,,polly,,,Polly,Polly,,1,,,aws_polly_,,polly_,Polly,Amazon,,,,, +,,,,,,,,,,,,,,,,,Porting Assistant for .NET,,x,,,,No SDK support +pricing,pricing,pricing,pricing,,pricing,,,Pricing,Pricing,,1,,,aws_pricing_,,pricing_,Pricing Calculator,AWS,,,,, +proton,proton,proton,proton,,proton,,,Proton,Proton,,1,,,aws_proton_,,proton_,Proton,AWS,,,,, +qldb,qldb,qldb,qldb,,qldb,,,QLDB,QLDB,,1,,,aws_qldb_,,qldb_,QLDB (Quantum Ledger Database),Amazon,,,,, +qldb-session,qldbsession,qldbsession,qldbsession,,qldbsession,,,QLDBSession,QLDBSession,,1,,,aws_qldbsession_,,qldbsession_,QLDB Session,Amazon,,,,, +quicksight,quicksight,quicksight,quicksight,,quicksight,,,QuickSight,QuickSight,,1,,,aws_quicksight_,,quicksight_,QuickSight,Amazon,,,,, +ram,ram,ram,ram,,ram,,,RAM,RAM,,1,,,aws_ram_,,ram_,RAM (Resource Access Manager),AWS,,,,, +rds,rds,rds,rds,,rds,,,RDS,RDS,,1,,aws_(db_|rds_),aws_rds_,,rds_;db_,RDS (Relational Database),Amazon,,,,, +rds-data,rdsdata,rdsdataservice,rdsdata,,rdsdata,,rdsdataservice,RDSData,RDSDataService,,1,,,aws_rdsdata_,,rdsdata_,RDS Data,Amazon,,,,, +pi,pi,pi,pi,,pi,,,PI,PI,,1,,,aws_pi_,,pi_,RDS Performance Insights (PI),Amazon,,,,, +rbin,rbin,recyclebin,rbin,,rbin,,recyclebin,RBin,RecycleBin,,1,,,aws_rbin_,,rbin_,Recycle Bin (RBin),Amazon,,,,, +,,,,,,,,,,,,,,,,,Red Hat OpenShift Service on AWS (ROSA),AWS,x,,,,No SDK support +redshift,redshift,redshift,redshift,,redshift,,,Redshift,Redshift,,1,,,aws_redshift_,,redshift_,Redshift,Amazon,,,,, +redshift-data,redshiftdata,redshiftdataapiservice,redshiftdata,,redshiftdata,,redshiftdataapiservice,RedshiftData,RedshiftDataAPIService,,1,,,aws_redshiftdata_,,redshiftdata_,Redshift Data,Amazon,,,,, +redshift-serverless,redshiftserverless,redshiftserverless,redshiftserverless,,redshiftserverless,,,RedshiftServerless,RedshiftServerless,,1,,,aws_redshiftserverless_,,redshiftserverless_,Redshift Serverless,Amazon,,,,, +rekognition,rekognition,rekognition,rekognition,,rekognition,,,Rekognition,Rekognition,,1,,,aws_rekognition_,,rekognition_,Rekognition,Amazon,,,,, +resiliencehub,resiliencehub,resiliencehub,resiliencehub,,resiliencehub,,,ResilienceHub,ResilienceHub,,1,,,aws_resiliencehub_,,resiliencehub_,Resilience Hub,AWS,,,,, +resource-explorer-2,resourceexplorer2,resourceexplorer2,resourceexplorer2,,resourceexplorer2,,,ResourceExplorer2,ResourceExplorer2,,,2,,aws_resourceexplorer2_,,resourceexplorer2_,Resource Explorer,AWS,,,,, +resource-groups,resourcegroups,resourcegroups,resourcegroups,,resourcegroups,,,ResourceGroups,ResourceGroups,,1,,,aws_resourcegroups_,,resourcegroups_,Resource Groups,AWS,,,,, +resourcegroupstaggingapi,resourcegroupstaggingapi,resourcegroupstaggingapi,resourcegroupstaggingapi,,resourcegroupstaggingapi,,resourcegroupstagging,ResourceGroupsTaggingAPI,ResourceGroupsTaggingAPI,,1,,,aws_resourcegroupstaggingapi_,,resourcegroupstaggingapi_,Resource Groups Tagging,AWS,,,,, +robomaker,robomaker,robomaker,robomaker,,robomaker,,,RoboMaker,RoboMaker,,1,,,aws_robomaker_,,robomaker_,RoboMaker,AWS,,,,, +rolesanywhere,rolesanywhere,rolesanywhere,rolesanywhere,,rolesanywhere,,,RolesAnywhere,RolesAnywhere,,,2,,aws_rolesanywhere_,,rolesanywhere_,Roles Anywhere,AWS,,,,, +route53,route53,route53,route53,,route53,,,Route53,Route53,x,1,,aws_route53_(?!resolver_),aws_route53_,,route53_delegation_;route53_health_;route53_hosted_;route53_key_;route53_query_;route53_record;route53_traffic_;route53_vpc_;route53_zone,Route 53,Amazon,,,,, +route53domains,route53domains,route53domains,route53domains,,route53domains,,,Route53Domains,Route53Domains,x,,2,,aws_route53domains_,,route53domains_,Route 53 Domains,Amazon,,,,, +route53-recovery-cluster,route53recoverycluster,route53recoverycluster,route53recoverycluster,,route53recoverycluster,,,Route53RecoveryCluster,Route53RecoveryCluster,,1,,,aws_route53recoverycluster_,,route53recoverycluster_,Route 53 Recovery Cluster,Amazon,,,,, +route53-recovery-control-config,route53recoverycontrolconfig,route53recoverycontrolconfig,route53recoverycontrolconfig,,route53recoverycontrolconfig,,,Route53RecoveryControlConfig,Route53RecoveryControlConfig,x,1,,,aws_route53recoverycontrolconfig_,,route53recoverycontrolconfig_,Route 53 Recovery Control Config,Amazon,,,,, +route53-recovery-readiness,route53recoveryreadiness,route53recoveryreadiness,route53recoveryreadiness,,route53recoveryreadiness,,,Route53RecoveryReadiness,Route53RecoveryReadiness,x,1,,,aws_route53recoveryreadiness_,,route53recoveryreadiness_,Route 53 Recovery Readiness,Amazon,,,,, +route53resolver,route53resolver,route53resolver,route53resolver,,route53resolver,,,Route53Resolver,Route53Resolver,,1,,aws_route53_resolver_,aws_route53resolver_,,route53_resolver_,Route 53 Resolver,Amazon,,,,, +s3api,s3api,s3,s3,,s3,,s3api,S3,S3,x,1,,aws_(canonical_user_id|s3_bucket|s3_object),aws_s3_,,s3_bucket;s3_object;canonical_user_id,S3 (Simple Storage),Amazon,,,AWS_S3_ENDPOINT,TF_AWS_S3_ENDPOINT, +s3control,s3control,s3control,s3control,,s3control,,,S3Control,S3Control,,1,2,aws_(s3_account_|s3control_|s3_access_),aws_s3control_,,s3control;s3_account_;s3_access_,S3 Control,Amazon,,,,, +glacier,glacier,glacier,glacier,,glacier,,,Glacier,Glacier,,1,,,aws_glacier_,,glacier_,S3 Glacier,Amazon,,,,, +s3outposts,s3outposts,s3outposts,s3outposts,,s3outposts,,,S3Outposts,S3Outposts,,1,,,aws_s3outposts_,,s3outposts_,S3 on Outposts,Amazon,,,,, +sagemaker,sagemaker,sagemaker,sagemaker,,sagemaker,,,SageMaker,SageMaker,,1,,,aws_sagemaker_,,sagemaker_,SageMaker,Amazon,,,,, +sagemaker-a2i-runtime,sagemakera2iruntime,augmentedairuntime,sagemakera2iruntime,,sagemakera2iruntime,,augmentedairuntime,SageMakerA2IRuntime,AugmentedAIRuntime,,1,,,aws_sagemakera2iruntime_,,sagemakera2iruntime_,SageMaker A2I (Augmented AI),Amazon,,,,, +sagemaker-edge,sagemakeredge,sagemakeredgemanager,sagemakeredge,,sagemakeredge,,sagemakeredgemanager,SageMakerEdge,SagemakerEdgeManager,,1,,,aws_sagemakeredge_,,sagemakeredge_,SageMaker Edge Manager,Amazon,,,,, +sagemaker-featurestore-runtime,sagemakerfeaturestoreruntime,sagemakerfeaturestoreruntime,sagemakerfeaturestoreruntime,,sagemakerfeaturestoreruntime,,,SageMakerFeatureStoreRuntime,SageMakerFeatureStoreRuntime,,1,,,aws_sagemakerfeaturestoreruntime_,,sagemakerfeaturestoreruntime_,SageMaker Feature Store Runtime,Amazon,,,,, +sagemaker-runtime,sagemakerruntime,sagemakerruntime,sagemakerruntime,,sagemakerruntime,,,SageMakerRuntime,SageMakerRuntime,,1,,,aws_sagemakerruntime_,,sagemakerruntime_,SageMaker Runtime,Amazon,,,,, +,,,,,,,,,,,,,,,,,SAM (Serverless Application Model),AWS,x,,,,No SDK support +savingsplans,savingsplans,savingsplans,savingsplans,,savingsplans,,,SavingsPlans,SavingsPlans,,1,,,aws_savingsplans_,,savingsplans_,Savings Plans,AWS,,,,, +,,,,,,,,,,,,,,,,,Schema Conversion Tool,AWS,x,,,,No SDK support +sdb,sdb,simpledb,,simpledb,sdb,,sdb,SimpleDB,SimpleDB,,1,,aws_simpledb_,aws_sdb_,,simpledb_,SDB (SimpleDB),Amazon,,,,, +scheduler,scheduler,scheduler,scheduler,,scheduler,,,Scheduler,Scheduler,,,2,,aws_scheduler_,,scheduler_,EventBridge Scheduler,Amazon,,,,, +secretsmanager,secretsmanager,secretsmanager,secretsmanager,,secretsmanager,,,SecretsManager,SecretsManager,,1,,,aws_secretsmanager_,,secretsmanager_,Secrets Manager,AWS,,,,, +securityhub,securityhub,securityhub,securityhub,,securityhub,,,SecurityHub,SecurityHub,,1,,,aws_securityhub_,,securityhub_,Security Hub,AWS,,,,, +serverlessrepo,serverlessrepo,serverlessapplicationrepository,serverlessapplicationrepository,,serverlessrepo,,serverlessapprepo;serverlessapplicationrepository,ServerlessRepo,ServerlessApplicationRepository,,1,,aws_serverlessapplicationrepository_,aws_serverlessrepo_,,serverlessapplicationrepository_,Serverless Application Repository,AWS,,,,, +servicecatalog,servicecatalog,servicecatalog,servicecatalog,,servicecatalog,,,ServiceCatalog,ServiceCatalog,,1,,,aws_servicecatalog_,,servicecatalog_,Service Catalog,AWS,,,,, +servicecatalog-appregistry,servicecatalogappregistry,appregistry,servicecatalogappregistry,,servicecatalogappregistry,,appregistry,ServiceCatalogAppRegistry,AppRegistry,,1,,,aws_servicecatalogappregistry_,,servicecatalogappregistry_,Service Catalog AppRegistry,AWS,,,,, +service-quotas,servicequotas,servicequotas,servicequotas,,servicequotas,,,ServiceQuotas,ServiceQuotas,,1,,,aws_servicequotas_,,servicequotas_,Service Quotas,,,,,, +ses,ses,ses,ses,,ses,,,SES,SES,,1,,,aws_ses_,,ses_,SES (Simple Email),Amazon,,,,, +sesv2,sesv2,sesv2,sesv2,,sesv2,,,SESV2,SESV2,,,2,,aws_sesv2_,,sesv2_,SESv2 (Simple Email V2),Amazon,,,,, +stepfunctions,stepfunctions,sfn,sfn,,sfn,,stepfunctions,SFN,SFN,,1,,,aws_sfn_,,sfn_,SFN (Step Functions),AWS,,,,, +shield,shield,shield,shield,,shield,,,Shield,Shield,x,1,,,aws_shield_,,shield_,Shield,AWS,,,,, +signer,signer,signer,signer,,signer,,,Signer,Signer,,1,,,aws_signer_,,signer_,Signer,AWS,,,,, +sms,sms,sms,sms,,sms,,,SMS,SMS,,1,,,aws_sms_,,sms_,SMS (Server Migration),AWS,,,,, +snow-device-management,snowdevicemanagement,snowdevicemanagement,snowdevicemanagement,,snowdevicemanagement,,,SnowDeviceManagement,SnowDeviceManagement,,1,,,aws_snowdevicemanagement_,,snowdevicemanagement_,Snow Device Management,AWS,,,,, +snowball,snowball,snowball,snowball,,snowball,,,Snowball,Snowball,,1,,,aws_snowball_,,snowball_,Snow Family,AWS,,,,, +sns,sns,sns,sns,,sns,,,SNS,SNS,,1,,,aws_sns_,,sns_,SNS (Simple Notification),Amazon,,,,, +sqs,sqs,sqs,sqs,,sqs,,,SQS,SQS,,1,,,aws_sqs_,,sqs_,SQS (Simple Queue),Amazon,,,,, +ssm,ssm,ssm,ssm,,ssm,,,SSM,SSM,,1,,,aws_ssm_,,ssm_,SSM (Systems Manager),AWS,,,,, +ssm-contacts,ssmcontacts,ssmcontacts,ssmcontacts,,ssmcontacts,,,SSMContacts,SSMContacts,,1,,,aws_ssmcontacts_,,ssmcontacts_,SSM Incident Manager Contacts,AWS,,,,, +ssm-incidents,ssmincidents,ssmincidents,ssmincidents,,ssmincidents,,,SSMIncidents,SSMIncidents,,1,,,aws_ssmincidents_,,ssmincidents_,SSM Incident Manager Incidents,AWS,,,,, +sso,sso,sso,sso,,sso,,,SSO,SSO,,1,,,aws_sso_,,sso_,SSO (Single Sign-On),AWS,,,,, +sso-admin,ssoadmin,ssoadmin,ssoadmin,,ssoadmin,,,SSOAdmin,SSOAdmin,,1,,,aws_ssoadmin_,,ssoadmin_,SSO Admin,AWS,,,,, +identitystore,identitystore,identitystore,identitystore,,identitystore,,,IdentityStore,IdentityStore,,,2,,aws_identitystore_,,identitystore_,SSO Identity Store,AWS,,,,, +sso-oidc,ssooidc,ssooidc,ssooidc,,ssooidc,,,SSOOIDC,SSOOIDC,,1,,,aws_ssooidc_,,ssooidc_,SSO OIDC,AWS,,,,, +storagegateway,storagegateway,storagegateway,storagegateway,,storagegateway,,,StorageGateway,StorageGateway,,1,,,aws_storagegateway_,,storagegateway_,Storage Gateway,AWS,,,,, +sts,sts,sts,sts,,sts,,,STS,STS,x,1,,aws_caller_identity,aws_sts_,,caller_identity,STS (Security Token),AWS,,,AWS_STS_ENDPOINT,TF_AWS_STS_ENDPOINT, +,,,,,,,,,,,,,,,,,Sumerian,Amazon,x,,,,No SDK support +support,support,support,support,,support,,,Support,Support,,1,,,aws_support_,,support_,Support,AWS,,,,, +swf,swf,swf,swf,,swf,,,SWF,SWF,,1,,,aws_swf_,,swf_,SWF (Simple Workflow),Amazon,,,,, +,,,,,,,,,,,,,,,,,Tag Editor,AWS,x,,,,Part of Resource Groups Tagging +textract,textract,textract,textract,,textract,,,Textract,Textract,,1,,,aws_textract_,,textract_,Textract,Amazon,,,,, +timestream-query,timestreamquery,timestreamquery,timestreamquery,,timestreamquery,,,TimestreamQuery,TimestreamQuery,,1,,,aws_timestreamquery_,,timestreamquery_,Timestream Query,Amazon,,,,, +timestream-write,timestreamwrite,timestreamwrite,timestreamwrite,,timestreamwrite,,,TimestreamWrite,TimestreamWrite,,1,,,aws_timestreamwrite_,,timestreamwrite_,Timestream Write,Amazon,,,,, +,,,,,,,,,,,,,,,,,Tools for PowerShell,AWS,x,,,,No SDK support +,,,,,,,,,,,,,,,,,Training and Certification,AWS,x,,,,No SDK support +transcribe,transcribe,transcribeservice,transcribe,,transcribe,,transcribeservice,Transcribe,TranscribeService,,,2,,aws_transcribe_,,transcribe_,Transcribe,Amazon,,,,, +,,transcribestreamingservice,transcribestreaming,,transcribestreaming,,transcribestreamingservice,TranscribeStreaming,TranscribeStreamingService,,1,,,aws_transcribestreaming_,,transcribestreaming_,Transcribe Streaming,Amazon,,,,, +transfer,transfer,transfer,transfer,,transfer,,,Transfer,Transfer,,1,,,aws_transfer_,,transfer_,Transfer Family,AWS,,,,, +,,,,,transitgateway,ec2,,TransitGateway,,,,,aws_ec2_transit_gateway,aws_transitgateway_,transitgateway_,ec2_transit_gateway,Transit Gateway,AWS,x,x,,,Part of EC2 +translate,translate,translate,translate,,translate,,,Translate,Translate,,1,,,aws_translate_,,translate_,Translate,Amazon,,,,, +,,,,,,,,,,,,,,,,,Trusted Advisor,AWS,x,,,,Part of Support +,,,,,vpc,ec2,,VPC,,,,,aws_((default_)?(network_acl|route_table|security_group|subnet|vpc(?!_ipam))|ec2_(managed|network|subnet|traffic)|egress_only_internet|flow_log|internet_gateway|main_route_table_association|nat_gateway|network_interface|prefix_list|route\b),aws_vpc_,vpc_,default_network_;default_route_;default_security_;default_subnet;default_vpc;ec2_managed_;ec2_network_;ec2_subnet_;ec2_traffic_;egress_only_;flow_log;internet_gateway;main_route_;nat_;network_;prefix_list;route_;route\.;security_group;subnet;vpc_dhcp_;vpc_endpoint;vpc_ipv;vpc_peering_;vpc\.;vpcs\.,VPC (Virtual Private Cloud),Amazon,x,x,,,Part of EC2 +,,,,,ipam,ec2,,IPAM,,,,,aws_vpc_ipam,aws_ipam_,ipam_,vpc_ipam,VPC IPAM (IP Address Manager),Amazon,x,x,,,Part of EC2 +,,,,,vpnclient,ec2,,ClientVPN,,,,,aws_ec2_client_vpn,aws_vpnclient_,vpnclient_,ec2_client_vpn_,VPN (Client),AWS,x,x,,,Part of EC2 +,,,,,vpnsite,ec2,,SiteVPN,,,,,aws_(customer_gateway|vpn_),aws_vpnsite_,vpnsite_,customer_gateway;vpn_,VPN (Site-to-Site),AWS,x,x,,,Part of EC2 +wafv2,wafv2,wafv2,wafv2,,wafv2,,,WAFV2,WAFV2,,1,,,aws_wafv2_,,wafv2_,WAF,AWS,,,,, +waf,waf,waf,waf,,waf,,,WAF,WAF,,1,,,aws_waf_,,waf_,WAF Classic,AWS,,,,, +waf-regional,wafregional,wafregional,wafregional,,wafregional,,,WAFRegional,WAFRegional,,1,,,aws_wafregional_,,wafregional_,WAF Classic Regional,AWS,,,,, +,,,,,,,,,,,,,,,,,WAM (WorkSpaces Application Manager),Amazon,x,,,,No SDK support +,,,,,wavelength,ec2,,Wavelength,,,,,aws_ec2_carrier_gateway,aws_wavelength_,wavelength_,ec2_carrier_,Wavelength,AWS,x,x,,,Part of EC2 +budgets,budgets,budgets,budgets,,budgets,,,Budgets,Budgets,,1,,,aws_budgets_,,budgets_,Web Services Budgets,Amazon,,,,, +wellarchitected,wellarchitected,wellarchitected,wellarchitected,,wellarchitected,,,WellArchitected,WellArchitected,,1,,,aws_wellarchitected_,,wellarchitected_,Well-Architected Tool,AWS,,,,, +workdocs,workdocs,workdocs,workdocs,,workdocs,,,WorkDocs,WorkDocs,,1,,,aws_workdocs_,,workdocs_,WorkDocs,Amazon,,,,, +worklink,worklink,worklink,worklink,,worklink,,,WorkLink,WorkLink,,1,,,aws_worklink_,,worklink_,WorkLink,Amazon,,,,, +workmail,workmail,workmail,workmail,,workmail,,,WorkMail,WorkMail,,1,,,aws_workmail_,,workmail_,WorkMail,Amazon,,,,, +workmailmessageflow,workmailmessageflow,workmailmessageflow,workmailmessageflow,,workmailmessageflow,,,WorkMailMessageFlow,WorkMailMessageFlow,,1,,,aws_workmailmessageflow_,,workmailmessageflow_,WorkMail Message Flow,Amazon,,,,, +workspaces,workspaces,workspaces,workspaces,,workspaces,,,WorkSpaces,WorkSpaces,,1,,,aws_workspaces_,,workspaces_,WorkSpaces,Amazon,,,,, +workspaces-web,workspacesweb,workspacesweb,workspacesweb,,workspacesweb,,,WorkSpacesWeb,WorkSpacesWeb,,1,,,aws_workspacesweb_,,workspacesweb_,WorkSpaces Web,Amazon,,,,, +xray,xray,xray,xray,,xray,,,XRay,XRay,,1,,,aws_xray_,,xray_,X-Ray,AWS,,,,, From ac28c30aba495defaa31f7e1cddb48e3d926fbd2 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Tue, 29 Nov 2022 16:48:35 -0500 Subject: [PATCH 06/16] Tweak generated file templates. --- internal/generate/awsclient/file.tmpl | 6 +++--- internal/generate/clientconfig/file.tmpl | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/generate/awsclient/file.tmpl b/internal/generate/awsclient/file.tmpl index 7bdf6063092..a8e186c0a15 100644 --- a/internal/generate/awsclient/file.tmpl +++ b/internal/generate/awsclient/file.tmpl @@ -3,7 +3,7 @@ package conns import ( {{ range .Services }} - {{ if ne .GoPackageOverride "" }}{{ .GoPackageOverride }}{{ end -}} "github.com/aws/aws-sdk-go{{ if eq .SDKVersion "2" }}-v2{{ end }}/service/{{ .GoPackage }}" + {{ .GoPackageOverride }} "github.com/aws/aws-sdk-go{{ if eq .SDKVersion "2" }}-v2{{ end }}/service/{{ .GoPackage }}" {{- end }} cloudwatchlogs_sdkv2 "github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs" rds_sdkv2 "github.com/aws/aws-sdk-go-v2/service/rds" @@ -32,7 +32,7 @@ type AWSClient struct { rdsClient lazyClient[*rds_sdkv2.Client] ssmClient lazyClient[*ssm_sdkv2.Client] - {{ range .Services }} +{{ range .Services }} {{ .ProviderNameUpper }}{{ if eq .SDKVersion "1" }}Conn{{ else }}Client{{end}} *{{ if ne .GoPackageOverride "" }}{{ .GoPackageOverride }}{{ else }}{{ .GoPackage }}{{ end }}.{{ .ClientTypeName }} - {{- end }} +{{- end }} } diff --git a/internal/generate/clientconfig/file.tmpl b/internal/generate/clientconfig/file.tmpl index 61ef9eef626..660228b5433 100644 --- a/internal/generate/clientconfig/file.tmpl +++ b/internal/generate/clientconfig/file.tmpl @@ -13,16 +13,16 @@ import ( // sdkv1Conns initializes AWS SDK for Go v1 clients. func (c *Config) sdkv1Conns(client *AWSClient, sess *session.Session) { - {{- range .Services }} +{{- range .Services }} {{- if eq .SDKVersion "1" }} client.{{ .ProviderNameUpper }}Conn = {{ .GoPackage }}.New(sess.Copy(&aws.Config{Endpoint: aws.String(c.Endpoints[names.{{ .ProviderNameUpper }}])})) {{- end }} - {{- end }} +{{- end }} } // sdkv2Conns initializes AWS SDK for Go v2 clients. func (c *Config) sdkv2Conns(client *AWSClient, cfg aws_sdkv2.Config) { - {{- range .Services }} +{{- range .Services }} {{- if eq .SDKVersion "2" }} client.{{ .ProviderNameUpper }}Client = {{ .GoPackage }}.NewFromConfig(cfg, func(o *{{ .GoPackage }}.Options) { if endpoint := c.Endpoints[names.{{ .ProviderNameUpper }}]; endpoint != "" { @@ -30,5 +30,5 @@ func (c *Config) sdkv2Conns(client *AWSClient, cfg aws_sdkv2.Config) { } }) {{- end }} - {{- end }} +{{- end }} } \ No newline at end of file From d06e06a1c1d80f2b34552ba17881effdb8ae273e Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Tue, 29 Nov 2022 18:10:31 -0500 Subject: [PATCH 07/16] Generate lazy-load clients for services with both SDK for Go v1 and v2 resource implementations. --- internal/conns/awsclient_gen.go | 8 +-- internal/conns/config.go | 89 ++++++++---------------- internal/conns/config_gen.go | 36 ++++++++++ internal/generate/awsclient/file.tmpl | 25 ++++--- internal/generate/awsclient/main.go | 25 ++++--- internal/generate/clientconfig/file.tmpl | 34 +++++++-- internal/generate/clientconfig/main.go | 32 ++++++--- names/names_data.csv | 6 +- 8 files changed, 156 insertions(+), 99 deletions(-) diff --git a/internal/conns/awsclient_gen.go b/internal/conns/awsclient_gen.go index 9e2552f4702..7a3790bc6e1 100644 --- a/internal/conns/awsclient_gen.go +++ b/internal/conns/awsclient_gen.go @@ -332,9 +332,10 @@ type AWSClient struct { SupportedPlatforms []string TerraformVersion string - logsClient lazyClient[*cloudwatchlogs_sdkv2.Client] - rdsClient lazyClient[*rds_sdkv2.Client] - ssmClient lazyClient[*ssm_sdkv2.Client] + logsClient lazyClient[*cloudwatchlogs_sdkv2.Client] + rdsClient lazyClient[*rds_sdkv2.Client] + s3controlClient lazyClient[*s3control_sdkv2.Client] + ssmClient lazyClient[*ssm_sdkv2.Client] ACMConn *acm.ACM ACMPCAConn *acmpca.ACMPCA @@ -584,7 +585,6 @@ type AWSClient struct { Route53ResolverConn *route53resolver.Route53Resolver S3Conn *s3.S3 S3ControlConn *s3control.S3Control - S3ControlClient *s3control_sdkv2.Client S3OutpostsConn *s3outposts.S3Outposts SESConn *ses.SES SESV2Client *sesv2.Client diff --git a/internal/conns/config.go b/internal/conns/config.go index 2cedd399cc8..92dce56ae35 100644 --- a/internal/conns/config.go +++ b/internal/conns/config.go @@ -6,11 +6,7 @@ import ( "strings" "github.com/aws/aws-sdk-go-v2/feature/ec2/imds" - "github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs" - "github.com/aws/aws-sdk-go-v2/service/rds" "github.com/aws/aws-sdk-go-v2/service/route53domains" - "github.com/aws/aws-sdk-go-v2/service/s3control" - "github.com/aws/aws-sdk-go-v2/service/ssm" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/aws/aws-sdk-go/aws/request" @@ -182,9 +178,6 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS DNSSuffix = p.DNSSuffix() } - c.sdkv1Conns(client, sess) - c.sdkv2Conns(client, cfg) - client.AccountID = accountID client.DefaultTagsConfig = c.DefaultTagsConfig client.DNSSuffix = DNSSuffix @@ -195,57 +188,35 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS client.Session = sess client.TerraformVersion = c.TerraformVersion - client.Route53DomainsClient = route53domains.NewFromConfig(cfg, func(o *route53domains.Options) { - if endpoint := c.Endpoints[names.Route53Domains]; endpoint != "" { - o.EndpointResolver = route53domains.EndpointResolverFromURL(endpoint) - } else if partition == endpoints.AwsPartitionID { - // Route 53 Domains is only available in AWS Commercial us-east-1 Region. - o.Region = endpoints.UsEast1RegionID - } - }) - - client.S3ControlClient = s3control.NewFromConfig(cfg, func(o *s3control.Options) { - if endpoint := c.Endpoints[names.S3Control]; endpoint != "" { - o.EndpointResolver = s3control.EndpointResolverFromURL(endpoint) - } - }) + // API clients (generated). + c.sdkv1Conns(client, sess) + c.sdkv2Conns(client, cfg) + c.sdkv2LazyConns(client, cfg) - client.logsClient.init(&cfg, func() *cloudwatchlogs.Client { - return cloudwatchlogs.NewFromConfig(cfg, func(o *cloudwatchlogs.Options) { - if endpoint := c.Endpoints[names.Logs]; endpoint != "" { - o.EndpointResolver = cloudwatchlogs.EndpointResolverFromURL(endpoint) - } - }) - }) + // API clients (custom). - client.rdsClient.init(&cfg, func() *rds.Client { - return rds.NewFromConfig(cfg, func(o *rds.Options) { - if endpoint := c.Endpoints[names.RDS]; endpoint != "" { - o.EndpointResolver = rds.EndpointResolverFromURL(endpoint) - } - }) - }) + // AWS SDK for Go v1. - client.ssmClient.init(&cfg, func() *ssm.Client { - return ssm.NewFromConfig(cfg, func(o *ssm.Options) { - if endpoint := c.Endpoints[names.SSM]; endpoint != "" { - o.EndpointResolver = ssm.EndpointResolverFromURL(endpoint) - } - }) - }) - - // sts + // STS. stsConfig := &aws.Config{ Endpoint: aws.String(c.Endpoints[names.STS]), } - if c.STSRegion != "" { stsConfig.Region = aws.String(c.STSRegion) } - client.STSConn = sts.New(sess.Copy(stsConfig)) - // "Global" services that require customizations + // Services that require multiple client configurations. + s3Config := &aws.Config{ + Endpoint: aws.String(c.Endpoints[names.S3]), + S3ForcePathStyle: aws.Bool(c.S3UsePathStyle), + } + client.S3Conn = s3.New(sess.Copy(s3Config)) + + s3Config.DisableRestProtocolURICleaning = aws.Bool(true) + client.S3ConnURICleaningDisabled = s3.New(sess.Copy(s3Config)) + + // "Global" services that require customizations. globalAcceleratorConfig := &aws.Config{ Endpoint: aws.String(c.Endpoints[names.GlobalAccelerator]), } @@ -262,18 +233,7 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS Endpoint: aws.String(c.Endpoints[names.Shield]), } - // Services that require multiple client configurations - s3Config := &aws.Config{ - Endpoint: aws.String(c.Endpoints[names.S3]), - S3ForcePathStyle: aws.Bool(c.S3UsePathStyle), - } - - client.S3Conn = s3.New(sess.Copy(s3Config)) - - s3Config.DisableRestProtocolURICleaning = aws.Bool(true) - client.S3ConnURICleaningDisabled = s3.New(sess.Copy(s3Config)) - - // Force "global" services to correct regions + // Force "global" services to correct Regions. switch partition { case endpoints.AwsPartitionID: globalAcceleratorConfig.Region = aws.String(endpoints.UsWest2RegionID) @@ -555,6 +515,17 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS } }) + // AWS SDK for Go v2. + + client.Route53DomainsClient = route53domains.NewFromConfig(cfg, func(o *route53domains.Options) { + if endpoint := c.Endpoints[names.Route53Domains]; endpoint != "" { + o.EndpointResolver = route53domains.EndpointResolverFromURL(endpoint) + } else if partition == endpoints.AwsPartitionID { + // Route 53 Domains is only available in AWS Commercial us-east-1 Region. + o.Region = endpoints.UsEast1RegionID + } + }) + if !c.SkipGetEC2Platforms { supportedPlatforms, err := GetSupportedEC2Platforms(client.EC2Conn) if err != nil { diff --git a/internal/conns/config_gen.go b/internal/conns/config_gen.go index 00006ca8ee0..fdce5e230fe 100644 --- a/internal/conns/config_gen.go +++ b/internal/conns/config_gen.go @@ -4,6 +4,7 @@ package conns import ( aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/auditmanager" + cloudwatchlogs_sdkv2 "github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs" "github.com/aws/aws-sdk-go-v2/service/comprehend" "github.com/aws/aws-sdk-go-v2/service/computeoptimizer" "github.com/aws/aws-sdk-go-v2/service/fis" @@ -12,10 +13,13 @@ import ( "github.com/aws/aws-sdk-go-v2/service/ivschat" "github.com/aws/aws-sdk-go-v2/service/kendra" "github.com/aws/aws-sdk-go-v2/service/medialive" + rds_sdkv2 "github.com/aws/aws-sdk-go-v2/service/rds" "github.com/aws/aws-sdk-go-v2/service/resourceexplorer2" "github.com/aws/aws-sdk-go-v2/service/rolesanywhere" + s3control_sdkv2 "github.com/aws/aws-sdk-go-v2/service/s3control" "github.com/aws/aws-sdk-go-v2/service/scheduler" "github.com/aws/aws-sdk-go-v2/service/sesv2" + ssm_sdkv2 "github.com/aws/aws-sdk-go-v2/service/ssm" "github.com/aws/aws-sdk-go-v2/service/transcribe" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" @@ -667,3 +671,35 @@ func (c *Config) sdkv2Conns(client *AWSClient, cfg aws_sdkv2.Config) { } }) } + +// sdkv2LazyConns initializes AWS SDK for Go v2 lazy-load clients. +func (c *Config) sdkv2LazyConns(client *AWSClient, cfg aws_sdkv2.Config) { + client.logsClient.init(&cfg, func() *cloudwatchlogs_sdkv2.Client { + return cloudwatchlogs_sdkv2.NewFromConfig(cfg, func(o *cloudwatchlogs_sdkv2.Options) { + if endpoint := c.Endpoints[names.Logs]; endpoint != "" { + o.EndpointResolver = cloudwatchlogs_sdkv2.EndpointResolverFromURL(endpoint) + } + }) + }) + client.rdsClient.init(&cfg, func() *rds_sdkv2.Client { + return rds_sdkv2.NewFromConfig(cfg, func(o *rds_sdkv2.Options) { + if endpoint := c.Endpoints[names.RDS]; endpoint != "" { + o.EndpointResolver = rds_sdkv2.EndpointResolverFromURL(endpoint) + } + }) + }) + client.s3controlClient.init(&cfg, func() *s3control_sdkv2.Client { + return s3control_sdkv2.NewFromConfig(cfg, func(o *s3control_sdkv2.Options) { + if endpoint := c.Endpoints[names.S3Control]; endpoint != "" { + o.EndpointResolver = s3control_sdkv2.EndpointResolverFromURL(endpoint) + } + }) + }) + client.ssmClient.init(&cfg, func() *ssm_sdkv2.Client { + return ssm_sdkv2.NewFromConfig(cfg, func(o *ssm_sdkv2.Options) { + if endpoint := c.Endpoints[names.SSM]; endpoint != "" { + o.EndpointResolver = ssm_sdkv2.EndpointResolverFromURL(endpoint) + } + }) + }) +} diff --git a/internal/generate/awsclient/file.tmpl b/internal/generate/awsclient/file.tmpl index a8e186c0a15..738987c9ee2 100644 --- a/internal/generate/awsclient/file.tmpl +++ b/internal/generate/awsclient/file.tmpl @@ -3,11 +3,15 @@ package conns import ( {{ range .Services }} - {{ .GoPackageOverride }} "github.com/aws/aws-sdk-go{{ if eq .SDKVersion "2" }}-v2{{ end }}/service/{{ .GoPackage }}" + {{- if eq .SDKVersion "1" }} + "github.com/aws/aws-sdk-go/service/{{ .GoV1Package }}" + {{- else if eq .SDKVersion "2" }} + "github.com/aws/aws-sdk-go-v2/service/{{ .GoV2Package }}" + {{- else if eq .SDKVersion "1,2" }} + "github.com/aws/aws-sdk-go/service/{{ .GoV1Package }}" + {{ .GoV2PackageOverride }} "github.com/aws/aws-sdk-go-v2/service/{{ .GoV2Package }}" + {{- end }} {{- end }} - cloudwatchlogs_sdkv2 "github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs" - rds_sdkv2 "github.com/aws/aws-sdk-go-v2/service/rds" - ssm_sdkv2 "github.com/aws/aws-sdk-go-v2/service/ssm" "github.com/aws/aws-sdk-go/aws/session" "github.com/hashicorp/terraform-provider-aws/internal/experimental/intf" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" @@ -28,11 +32,16 @@ type AWSClient struct { SupportedPlatforms []string TerraformVersion string - logsClient lazyClient[*cloudwatchlogs_sdkv2.Client] - rdsClient lazyClient[*rds_sdkv2.Client] - ssmClient lazyClient[*ssm_sdkv2.Client] +{{ range .Services }} + {{- if ne .SDKVersion "1,2" }}{{continue}}{{- end }} + {{ .ProviderPackage }}Client lazyClient[*{{ .GoV2PackageOverride }}.{{ .ClientTypeName }}] +{{- end }} {{ range .Services }} - {{ .ProviderNameUpper }}{{ if eq .SDKVersion "1" }}Conn{{ else }}Client{{end}} *{{ if ne .GoPackageOverride "" }}{{ .GoPackageOverride }}{{ else }}{{ .GoPackage }}{{ end }}.{{ .ClientTypeName }} + {{- if eq .SDKVersion "1" }} + {{ .ProviderNameUpper }}Conn *{{ .GoV1Package }}.{{ .ClientTypeName }} + {{- else if eq .SDKVersion "2" }} + {{ .ProviderNameUpper }}Client *{{ .GoV2Package }}.{{ .ClientTypeName }} + {{- end }} {{- end }} } diff --git a/internal/generate/awsclient/main.go b/internal/generate/awsclient/main.go index 98e9ebba540..8425616e0f4 100644 --- a/internal/generate/awsclient/main.go +++ b/internal/generate/awsclient/main.go @@ -23,11 +23,13 @@ const ( ) type ServiceDatum struct { - SDKVersion string - GoPackage string - GoPackageOverride string - ProviderNameUpper string - ClientTypeName string + SDKVersion string + GoV1Package string + GoV2Package string + GoV2PackageOverride string + ProviderNameUpper string + ClientTypeName string + ProviderPackage string } type TemplateData struct { @@ -70,20 +72,25 @@ func main() { td.Services = append(td.Services, ServiceDatum{ ProviderNameUpper: l[names.ColProviderNameUpper], SDKVersion: "1", - GoPackage: l[names.ColGoV1Package], + GoV1Package: l[names.ColGoV1Package], + GoV2Package: l[names.ColGoV2Package], ClientTypeName: l[names.ColGoV1ClientTypeName], + ProviderPackage: l[names.ColProviderPackageCorrect], }) } if l[names.ColClientSDKV2] != "" { sd := ServiceDatum{ ProviderNameUpper: l[names.ColProviderNameUpper], SDKVersion: "2", - GoPackage: l[names.ColGoV2Package], + GoV1Package: l[names.ColGoV1Package], + GoV2Package: l[names.ColGoV2Package], ClientTypeName: "Client", + ProviderPackage: l[names.ColProviderPackageCorrect], } if l[names.ColClientSDKV1] != "" { - // Use `sdkv2` instead of `v2` to prevent collisions with e.g., `elbv2` - sd.GoPackageOverride = fmt.Sprintf("%s_sdkv2", l[names.ColGoV2Package]) + // Use `sdkv2` instead of `v2` to prevent collisions with e.g., `elbv2`. + sd.GoV2PackageOverride = fmt.Sprintf("%s_sdkv2", l[names.ColGoV2Package]) + sd.SDKVersion = "1,2" } td.Services = append(td.Services, sd) } diff --git a/internal/generate/clientconfig/file.tmpl b/internal/generate/clientconfig/file.tmpl index 660228b5433..83dc419ae6a 100644 --- a/internal/generate/clientconfig/file.tmpl +++ b/internal/generate/clientconfig/file.tmpl @@ -2,12 +2,19 @@ package conns import ( +{{ range .Services }} + {{- if eq .SDKVersion "1" }} + "github.com/aws/aws-sdk-go/service/{{ .GoV1Package }}" + {{- else if eq .SDKVersion "2" }} + "github.com/aws/aws-sdk-go-v2/service/{{ .GoV2Package }}" + {{- else if eq .SDKVersion "1,2" }} + "github.com/aws/aws-sdk-go/service/{{ .GoV1Package }}" + {{ .GoV2PackageOverride }} "github.com/aws/aws-sdk-go-v2/service/{{ .GoV2Package }}" + {{- end }} +{{- end }} "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" -{{- range .Services }} - "github.com/aws/aws-sdk-go{{ if eq .SDKVersion "2" }}-v2{{ end }}/service/{{ .GoPackage }}" -{{- end }} "github.com/hashicorp/terraform-provider-aws/names" ) @@ -15,7 +22,7 @@ import ( func (c *Config) sdkv1Conns(client *AWSClient, sess *session.Session) { {{- range .Services }} {{- if eq .SDKVersion "1" }} - client.{{ .ProviderNameUpper }}Conn = {{ .GoPackage }}.New(sess.Copy(&aws.Config{Endpoint: aws.String(c.Endpoints[names.{{ .ProviderNameUpper }}])})) + client.{{ .ProviderNameUpper }}Conn = {{ .GoV1Package }}.New(sess.Copy(&aws.Config{Endpoint: aws.String(c.Endpoints[names.{{ .ProviderNameUpper }}])})) {{- end }} {{- end }} } @@ -24,11 +31,26 @@ func (c *Config) sdkv1Conns(client *AWSClient, sess *session.Session) { func (c *Config) sdkv2Conns(client *AWSClient, cfg aws_sdkv2.Config) { {{- range .Services }} {{- if eq .SDKVersion "2" }} - client.{{ .ProviderNameUpper }}Client = {{ .GoPackage }}.NewFromConfig(cfg, func(o *{{ .GoPackage }}.Options) { + client.{{ .ProviderNameUpper }}Client = {{ .GoV2Package }}.NewFromConfig(cfg, func(o *{{ .GoV2Package }}.Options) { if endpoint := c.Endpoints[names.{{ .ProviderNameUpper }}]; endpoint != "" { - o.EndpointResolver = {{ .GoPackage }}.EndpointResolverFromURL(endpoint) + o.EndpointResolver = {{ .GoV2Package }}.EndpointResolverFromURL(endpoint) } }) {{- end }} {{- end }} +} + +// sdkv2LazyConns initializes AWS SDK for Go v2 lazy-load clients. +func (c *Config) sdkv2LazyConns(client *AWSClient, cfg aws_sdkv2.Config) { +{{- range .Services }} + {{- if eq .SDKVersion "1,2" }} + client.{{ .ProviderPackage }}Client.init(&cfg, func() *{{ .GoV2PackageOverride }}.Client { + return {{ .GoV2PackageOverride }}.NewFromConfig(cfg, func(o *{{ .GoV2PackageOverride }}.Options) { + if endpoint := c.Endpoints[names.{{ .ProviderNameUpper }}]; endpoint != "" { + o.EndpointResolver = {{ .GoV2PackageOverride }}.EndpointResolverFromURL(endpoint) + } + }) + }) + {{- end }} +{{- end }} } \ No newline at end of file diff --git a/internal/generate/clientconfig/main.go b/internal/generate/clientconfig/main.go index 1c14ca84caa..42534a67c85 100644 --- a/internal/generate/clientconfig/main.go +++ b/internal/generate/clientconfig/main.go @@ -23,9 +23,12 @@ const ( ) type ServiceDatum struct { - SDKVersion string - GoPackage string - ProviderNameUpper string + SDKVersion string + GoV1Package string + GoV2Package string + GoV2PackageOverride string + ProviderNameUpper string + ProviderPackage string } type TemplateData struct { @@ -68,17 +71,26 @@ func main() { td.Services = append(td.Services, ServiceDatum{ ProviderNameUpper: l[names.ColProviderNameUpper], SDKVersion: "1", - GoPackage: l[names.ColGoV1Package], + GoV1Package: l[names.ColGoV1Package], + GoV2Package: l[names.ColGoV2Package], + ProviderPackage: l[names.ColProviderPackageCorrect], }) - } else if l[names.ColClientSDKV2] != "" { - td.Services = append(td.Services, ServiceDatum{ + } + if l[names.ColClientSDKV2] != "" { + sd := ServiceDatum{ ProviderNameUpper: l[names.ColProviderNameUpper], SDKVersion: "2", - GoPackage: l[names.ColGoV2Package], - }) + GoV1Package: l[names.ColGoV1Package], + GoV2Package: l[names.ColGoV2Package], + ProviderPackage: l[names.ColProviderPackageCorrect], + } + if l[names.ColClientSDKV1] != "" { + // Use `sdkv2` instead of `v2` to prevent collisions with e.g., `elbv2`. + sd.GoV2PackageOverride = fmt.Sprintf("%s_sdkv2", l[names.ColGoV2Package]) + sd.SDKVersion = "1,2" + } + td.Services = append(td.Services, sd) } - // TODO: Lazy v2 clients for those with both SDK v1 and v2 clients. - // See internal/generate/awsclient/main.go. } sort.SliceStable(td.Services, func(i, j int) bool { diff --git a/names/names_data.csv b/names/names_data.csv index 559077ef415..aeab667949d 100644 --- a/names/names_data.csv +++ b/names/names_data.csv @@ -64,7 +64,7 @@ cloudtrail,cloudtrail,cloudtrail,cloudtrail,,cloudtrail,,,CloudTrail,CloudTrail, cloudwatch,cloudwatch,cloudwatch,cloudwatch,,cloudwatch,,,CloudWatch,CloudWatch,,1,,aws_cloudwatch_(?!(event_|log_|query_)),aws_cloudwatch_,,cloudwatch_dashboard;cloudwatch_metric_;cloudwatch_composite_,CloudWatch,Amazon,,,,, application-insights,applicationinsights,applicationinsights,applicationinsights,,applicationinsights,,,ApplicationInsights,ApplicationInsights,,1,,,aws_applicationinsights_,,applicationinsights_,CloudWatch Application Insights,Amazon,,,,, evidently,evidently,cloudwatchevidently,evidently,,evidently,,cloudwatchevidently,Evidently,CloudWatchEvidently,,1,,,aws_evidently_,,evidently_,CloudWatch Evidently,Amazon,,,,, -logs,logs,cloudwatchlogs,cloudwatchlogs,,logs,,cloudwatchlog;cloudwatchlogs,Logs,CloudWatchLogs,,1,,aws_cloudwatch_(log_|query_),aws_logs_,,cloudwatch_log_;cloudwatch_query_,CloudWatch Logs,Amazon,,,,, +logs,logs,cloudwatchlogs,cloudwatchlogs,,logs,,cloudwatchlog;cloudwatchlogs,Logs,CloudWatchLogs,,1,2,aws_cloudwatch_(log_|query_),aws_logs_,,cloudwatch_log_;cloudwatch_query_,CloudWatch Logs,Amazon,,,,, rum,rum,cloudwatchrum,rum,,rum,,cloudwatchrum,RUM,CloudWatchRUM,,1,,,aws_rum_,,rum_,CloudWatch RUM,Amazon,,,,, synthetics,synthetics,synthetics,synthetics,,synthetics,,,Synthetics,Synthetics,,1,,,aws_synthetics_,,synthetics_,CloudWatch Synthetics,Amazon,,,,, codeartifact,codeartifact,codeartifact,codeartifact,,codeartifact,,,CodeArtifact,CodeArtifact,,1,,,aws_codeartifact_,,codeartifact_,CodeArtifact,AWS,,,,, @@ -273,7 +273,7 @@ qldb,qldb,qldb,qldb,,qldb,,,QLDB,QLDB,,1,,,aws_qldb_,,qldb_,QLDB (Quantum Ledger qldb-session,qldbsession,qldbsession,qldbsession,,qldbsession,,,QLDBSession,QLDBSession,,1,,,aws_qldbsession_,,qldbsession_,QLDB Session,Amazon,,,,, quicksight,quicksight,quicksight,quicksight,,quicksight,,,QuickSight,QuickSight,,1,,,aws_quicksight_,,quicksight_,QuickSight,Amazon,,,,, ram,ram,ram,ram,,ram,,,RAM,RAM,,1,,,aws_ram_,,ram_,RAM (Resource Access Manager),AWS,,,,, -rds,rds,rds,rds,,rds,,,RDS,RDS,,1,,aws_(db_|rds_),aws_rds_,,rds_;db_,RDS (Relational Database),Amazon,,,,, +rds,rds,rds,rds,,rds,,,RDS,RDS,,1,2,aws_(db_|rds_),aws_rds_,,rds_;db_,RDS (Relational Database),Amazon,,,,, rds-data,rdsdata,rdsdataservice,rdsdata,,rdsdata,,rdsdataservice,RDSData,RDSDataService,,1,,,aws_rdsdata_,,rdsdata_,RDS Data,Amazon,,,,, pi,pi,pi,pi,,pi,,,PI,PI,,1,,,aws_pi_,,pi_,RDS Performance Insights (PI),Amazon,,,,, rbin,rbin,recyclebin,rbin,,rbin,,recyclebin,RBin,RecycleBin,,1,,,aws_rbin_,,rbin_,Recycle Bin (RBin),Amazon,,,,, @@ -324,7 +324,7 @@ snow-device-management,snowdevicemanagement,snowdevicemanagement,snowdevicemanag snowball,snowball,snowball,snowball,,snowball,,,Snowball,Snowball,,1,,,aws_snowball_,,snowball_,Snow Family,AWS,,,,, sns,sns,sns,sns,,sns,,,SNS,SNS,,1,,,aws_sns_,,sns_,SNS (Simple Notification),Amazon,,,,, sqs,sqs,sqs,sqs,,sqs,,,SQS,SQS,,1,,,aws_sqs_,,sqs_,SQS (Simple Queue),Amazon,,,,, -ssm,ssm,ssm,ssm,,ssm,,,SSM,SSM,,1,,,aws_ssm_,,ssm_,SSM (Systems Manager),AWS,,,,, +ssm,ssm,ssm,ssm,,ssm,,,SSM,SSM,,1,2,,aws_ssm_,,ssm_,SSM (Systems Manager),AWS,,,,, ssm-contacts,ssmcontacts,ssmcontacts,ssmcontacts,,ssmcontacts,,,SSMContacts,SSMContacts,,1,,,aws_ssmcontacts_,,ssmcontacts_,SSM Incident Manager Contacts,AWS,,,,, ssm-incidents,ssmincidents,ssmincidents,ssmincidents,,ssmincidents,,,SSMIncidents,SSMIncidents,,1,,,aws_ssmincidents_,,ssmincidents_,SSM Incident Manager Incidents,AWS,,,,, sso,sso,sso,sso,,sso,,,SSO,SSO,,1,,,aws_sso_,,sso_,SSO (Single Sign-On),AWS,,,,, From 049bb7e74c75b37411f2c5c40fc76c5054cb3853 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Tue, 29 Nov 2022 18:17:28 -0500 Subject: [PATCH 08/16] Generate lazy-load client "getters". --- internal/conns/awsclient.go | 16 ---------------- internal/conns/awsclient_gen.go | 13 +++++++++++++ internal/generate/awsclient/file.tmpl | 7 +++++++ internal/generate/clientconfig/file.tmpl | 2 +- internal/generate/clientconfig/main.go | 3 +++ 5 files changed, 24 insertions(+), 17 deletions(-) diff --git a/internal/conns/awsclient.go b/internal/conns/awsclient.go index 279bc3d9c8a..9e14e2d8386 100644 --- a/internal/conns/awsclient.go +++ b/internal/conns/awsclient.go @@ -2,10 +2,6 @@ package conns import ( "fmt" - - "github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs" - "github.com/aws/aws-sdk-go-v2/service/rds" - "github.com/aws/aws-sdk-go-v2/service/ssm" ) // PartitionHostname returns a hostname with the provider domain suffix for the partition @@ -21,15 +17,3 @@ func (client *AWSClient) PartitionHostname(prefix string) string { func (client *AWSClient) RegionalHostname(prefix string) string { return fmt.Sprintf("%s.%s.%s", prefix, client.Region, client.DNSSuffix) } - -func (client *AWSClient) LogsClient() *cloudwatchlogs.Client { - return client.logsClient.Client() -} - -func (client *AWSClient) RDSClient() *rds.Client { - return client.rdsClient.Client() -} - -func (client *AWSClient) SSMClient() *ssm.Client { - return client.ssmClient.Client() -} diff --git a/internal/conns/awsclient_gen.go b/internal/conns/awsclient_gen.go index 7a3790bc6e1..09f5203ec73 100644 --- a/internal/conns/awsclient_gen.go +++ b/internal/conns/awsclient_gen.go @@ -644,3 +644,16 @@ type AWSClient struct { WorkSpacesWebConn *workspacesweb.WorkSpacesWeb XRayConn *xray.XRay } + +func (client *AWSClient) LogsClient() *cloudwatchlogs_sdkv2.Client { + return client.logsClient.Client() +} +func (client *AWSClient) RDSClient() *rds_sdkv2.Client { + return client.rdsClient.Client() +} +func (client *AWSClient) S3ControlClient() *s3control_sdkv2.Client { + return client.s3controlClient.Client() +} +func (client *AWSClient) SSMClient() *ssm_sdkv2.Client { + return client.ssmClient.Client() +} diff --git a/internal/generate/awsclient/file.tmpl b/internal/generate/awsclient/file.tmpl index 738987c9ee2..06fef3e2dce 100644 --- a/internal/generate/awsclient/file.tmpl +++ b/internal/generate/awsclient/file.tmpl @@ -45,3 +45,10 @@ type AWSClient struct { {{- end }} {{- end }} } + +{{ range .Services }} + {{- if ne .SDKVersion "1,2" }}{{continue}}{{- end }} +func (client *AWSClient) {{ .ProviderNameUpper }}Client() *{{ .GoV2PackageOverride }}.{{ .ClientTypeName }} { + return client.{{ .ProviderPackage }}Client.Client() +} +{{- end }} diff --git a/internal/generate/clientconfig/file.tmpl b/internal/generate/clientconfig/file.tmpl index 83dc419ae6a..bfd08ef1fa8 100644 --- a/internal/generate/clientconfig/file.tmpl +++ b/internal/generate/clientconfig/file.tmpl @@ -44,7 +44,7 @@ func (c *Config) sdkv2Conns(client *AWSClient, cfg aws_sdkv2.Config) { func (c *Config) sdkv2LazyConns(client *AWSClient, cfg aws_sdkv2.Config) { {{- range .Services }} {{- if eq .SDKVersion "1,2" }} - client.{{ .ProviderPackage }}Client.init(&cfg, func() *{{ .GoV2PackageOverride }}.Client { + client.{{ .ProviderPackage }}Client.init(&cfg, func() *{{ .GoV2PackageOverride }}.{{ .ClientTypeName }} { return {{ .GoV2PackageOverride }}.NewFromConfig(cfg, func(o *{{ .GoV2PackageOverride }}.Options) { if endpoint := c.Endpoints[names.{{ .ProviderNameUpper }}]; endpoint != "" { o.EndpointResolver = {{ .GoV2PackageOverride }}.EndpointResolverFromURL(endpoint) diff --git a/internal/generate/clientconfig/main.go b/internal/generate/clientconfig/main.go index 42534a67c85..48a02ba3db4 100644 --- a/internal/generate/clientconfig/main.go +++ b/internal/generate/clientconfig/main.go @@ -28,6 +28,7 @@ type ServiceDatum struct { GoV2Package string GoV2PackageOverride string ProviderNameUpper string + ClientTypeName string ProviderPackage string } @@ -73,6 +74,7 @@ func main() { SDKVersion: "1", GoV1Package: l[names.ColGoV1Package], GoV2Package: l[names.ColGoV2Package], + ClientTypeName: l[names.ColGoV1ClientTypeName], ProviderPackage: l[names.ColProviderPackageCorrect], }) } @@ -82,6 +84,7 @@ func main() { SDKVersion: "2", GoV1Package: l[names.ColGoV1Package], GoV2Package: l[names.ColGoV2Package], + ClientTypeName: "Client", ProviderPackage: l[names.ColProviderPackageCorrect], } if l[names.ColClientSDKV1] != "" { From 4556eac729f5909c20fe51bd743c7d0c66337f69 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Tue, 29 Nov 2022 18:19:51 -0500 Subject: [PATCH 09/16] Use 'S3ControlClient()'. --- internal/service/s3control/storage_lens_configuration.go | 8 ++++---- .../service/s3control/storage_lens_configuration_test.go | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/service/s3control/storage_lens_configuration.go b/internal/service/s3control/storage_lens_configuration.go index b279dfbbd26..ccb967a9f0a 100644 --- a/internal/service/s3control/storage_lens_configuration.go +++ b/internal/service/s3control/storage_lens_configuration.go @@ -311,7 +311,7 @@ func ResourceStorageLensConfiguration() *schema.Resource { } func resourceStorageLensConfigurationCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - conn := meta.(*conns.AWSClient).S3ControlClient + conn := meta.(*conns.AWSClient).S3ControlClient() defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig tags := defaultTagsConfig.MergeTags(tftags.New(d.Get("tags").(map[string]interface{}))) @@ -348,7 +348,7 @@ func resourceStorageLensConfigurationCreate(ctx context.Context, d *schema.Resou } func resourceStorageLensConfigurationRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - conn := meta.(*conns.AWSClient).S3ControlClient + conn := meta.(*conns.AWSClient).S3ControlClient() defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig @@ -398,7 +398,7 @@ func resourceStorageLensConfigurationRead(ctx context.Context, d *schema.Resourc } func resourceStorageLensConfigurationUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - conn := meta.(*conns.AWSClient).S3ControlClient + conn := meta.(*conns.AWSClient).S3ControlClient() accountID, configID, err := StorageLensConfigurationParseResourceID(d.Id()) @@ -436,7 +436,7 @@ func resourceStorageLensConfigurationUpdate(ctx context.Context, d *schema.Resou } func resourceStorageLensConfigurationDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - conn := meta.(*conns.AWSClient).S3ControlClient + conn := meta.(*conns.AWSClient).S3ControlClient() accountID, configID, err := StorageLensConfigurationParseResourceID(d.Id()) diff --git a/internal/service/s3control/storage_lens_configuration_test.go b/internal/service/s3control/storage_lens_configuration_test.go index 6dce6d14e49..09c427588b3 100644 --- a/internal/service/s3control/storage_lens_configuration_test.go +++ b/internal/service/s3control/storage_lens_configuration_test.go @@ -214,7 +214,7 @@ func TestAccS3ControlStorageLensConfiguration_update(t *testing.T) { } func testAccCheckStorageLensConfigurationDestroy(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).S3ControlClient + conn := acctest.Provider.Meta().(*conns.AWSClient).S3ControlClient() for _, rs := range s.RootModule().Resources { if rs.Type != "aws_s3control_object_lambda_access_point" { @@ -260,7 +260,7 @@ func testAccCheckStorageLensConfigurationExists(n string) resource.TestCheckFunc return err } - conn := acctest.Provider.Meta().(*conns.AWSClient).S3ControlClient + conn := acctest.Provider.Meta().(*conns.AWSClient).S3ControlClient() _, err = tfs3control.FindStorageLensConfigurationByAccountIDAndConfigID(context.Background(), conn, accountID, configID) From 79171f261a4b560da23c9a78b38ac6a367d4ee94 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 30 Nov 2022 08:46:30 -0500 Subject: [PATCH 10/16] Initial README. --- internal/service/resourceexplorer2/README.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 internal/service/resourceexplorer2/README.md diff --git a/internal/service/resourceexplorer2/README.md b/internal/service/resourceexplorer2/README.md new file mode 100644 index 00000000000..0353122ce25 --- /dev/null +++ b/internal/service/resourceexplorer2/README.md @@ -0,0 +1,7 @@ +# Terraform AWS Provider ResourceExplorer2 Package + +This area is primarily for AWS provider contributors and maintainers. For information on _using_ Terraform and the AWS provider, see the links below. + +## Handy Links + +* [Find out about contributing](https://hashicorp.github.io/terraform-provider-aws/#contribute) to the AWS provider! From fd88d6726af5984b02b9ce5a63bc99dc23223763 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 30 Nov 2022 09:18:39 -0500 Subject: [PATCH 11/16] Provider: 'skip_get_ec2_platforms' is now deprecated. --- .changelog/28084.txt | 3 ++ internal/conns/awsclient_gen.go | 4 +- internal/conns/config.go | 17 +------- internal/conns/conns.go | 39 ------------------ internal/conns/conns_test.go | 59 --------------------------- internal/generate/awsclient/file.tmpl | 3 +- internal/provider/provider.go | 1 + website/docs/index.html.markdown | 2 +- 8 files changed, 11 insertions(+), 117 deletions(-) create mode 100644 .changelog/28084.txt delete mode 100644 internal/conns/conns_test.go diff --git a/.changelog/28084.txt b/.changelog/28084.txt new file mode 100644 index 00000000000..2f8b4974260 --- /dev/null +++ b/.changelog/28084.txt @@ -0,0 +1,3 @@ +```release-note:note +provider: With AWS's retirement of EC2-Classic the `skip_get_ec2_platforms` attribute has been deprecated and will be removed in a future version +``` \ No newline at end of file diff --git a/internal/conns/awsclient_gen.go b/internal/conns/awsclient_gen.go index 09f5203ec73..c9ad11981f4 100644 --- a/internal/conns/awsclient_gen.go +++ b/internal/conns/awsclient_gen.go @@ -329,7 +329,6 @@ type AWSClient struct { S3ConnURICleaningDisabled *s3.S3 ServicePackages []intf.ServicePackageData Session *session.Session - SupportedPlatforms []string TerraformVersion string logsClient lazyClient[*cloudwatchlogs_sdkv2.Client] @@ -648,12 +647,15 @@ type AWSClient struct { func (client *AWSClient) LogsClient() *cloudwatchlogs_sdkv2.Client { return client.logsClient.Client() } + func (client *AWSClient) RDSClient() *rds_sdkv2.Client { return client.rdsClient.Client() } + func (client *AWSClient) S3ControlClient() *s3control_sdkv2.Client { return client.s3controlClient.Client() } + func (client *AWSClient) SSMClient() *ssm_sdkv2.Client { return client.ssmClient.Client() } diff --git a/internal/conns/config.go b/internal/conns/config.go index 92dce56ae35..f649e27889c 100644 --- a/internal/conns/config.go +++ b/internal/conns/config.go @@ -193,9 +193,7 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS c.sdkv2Conns(client, cfg) c.sdkv2LazyConns(client, cfg) - // API clients (custom). - - // AWS SDK for Go v1. + // AWS SDK for Go v1 custom API clients. // STS. stsConfig := &aws.Config{ @@ -515,7 +513,7 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS } }) - // AWS SDK for Go v2. + // AWS SDK for Go v2 custom API clients. client.Route53DomainsClient = route53domains.NewFromConfig(cfg, func(o *route53domains.Options) { if endpoint := c.Endpoints[names.Route53Domains]; endpoint != "" { @@ -526,16 +524,5 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS } }) - if !c.SkipGetEC2Platforms { - supportedPlatforms, err := GetSupportedEC2Platforms(client.EC2Conn) - if err != nil { - // We intentionally fail *silently* because there's a chance - // user just doesn't have ec2:DescribeAccountAttributes permissions - log.Printf("[WARN] Unable to get supported EC2 platforms: %s", err) - } else { - client.SupportedPlatforms = supportedPlatforms - } - } - return client, nil } diff --git a/internal/conns/conns.go b/internal/conns/conns.go index 1eeab04175e..2dcb3fca3af 100644 --- a/internal/conns/conns.go +++ b/internal/conns/conns.go @@ -1,12 +1,10 @@ package conns import ( - "fmt" "strings" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/ec2" awsbase "github.com/hashicorp/aws-sdk-go-base/v2" awsbasev1 "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2" "github.com/hashicorp/terraform-provider-aws/version" @@ -36,43 +34,6 @@ func StdUserAgentProducts(terraformVersion string) *awsbase.APNInfo { } } -func HasEC2Classic(platforms []string) bool { - for _, p := range platforms { - if p == "EC2" { - return true - } - } - return false -} - -func GetSupportedEC2Platforms(conn *ec2.EC2) ([]string, error) { - attrName := "supported-platforms" - - input := ec2.DescribeAccountAttributesInput{ - AttributeNames: []*string{aws.String(attrName)}, - } - attributes, err := conn.DescribeAccountAttributes(&input) - if err != nil { - return nil, err - } - - var platforms []string - for _, attr := range attributes.AccountAttributes { - if *attr.AttributeName == attrName { - for _, v := range attr.AttributeValues { - platforms = append(platforms, *v.AttributeValue) - } - break - } - } - - if len(platforms) == 0 { - return nil, fmt.Errorf("no EC2 platforms detected") - } - - return platforms, nil -} - // ReverseDNS switches a DNS hostname to reverse DNS and vice-versa. func ReverseDNS(hostname string) string { parts := strings.Split(hostname, ".") diff --git a/internal/conns/conns_test.go b/internal/conns/conns_test.go deleted file mode 100644 index 4c82b52167b..00000000000 --- a/internal/conns/conns_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package conns - -import ( - "reflect" - "testing" - - "github.com/aws/aws-sdk-go/service/ec2" - mockdatav1 "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/mockdata" - "github.com/hashicorp/aws-sdk-go-base/v2/servicemocks" -) - -func TestGetSupportedEC2Platforms(t *testing.T) { - ec2Endpoints := []*servicemocks.MockEndpoint{ - { - Request: &servicemocks.MockRequest{ - Method: "POST", - Uri: "/", - Body: "Action=DescribeAccountAttributes&AttributeName.1=supported-platforms&Version=2016-11-15", - }, - Response: &servicemocks.MockResponse{ - StatusCode: 200, - Body: test_ec2_describeAccountAttributes_response, - ContentType: "text/xml", - }, - }, - } - closeFunc, sess, err := mockdatav1.GetMockedAwsApiSession("EC2", ec2Endpoints) - if err != nil { - t.Fatal(err) - } - defer closeFunc() - conn := ec2.New(sess) - - platforms, err := GetSupportedEC2Platforms(conn) - if err != nil { - t.Fatalf("Expected no error, received: %s", err) - } - expectedPlatforms := []string{"VPC", "EC2"} - if !reflect.DeepEqual(platforms, expectedPlatforms) { - t.Fatalf("Received platforms: %q\nExpected: %q\n", platforms, expectedPlatforms) - } -} - -var test_ec2_describeAccountAttributes_response = ` - 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE - - - supported-platforms - - - VPC - - - EC2 - - - - -` diff --git a/internal/generate/awsclient/file.tmpl b/internal/generate/awsclient/file.tmpl index 06fef3e2dce..ac8117d49d4 100644 --- a/internal/generate/awsclient/file.tmpl +++ b/internal/generate/awsclient/file.tmpl @@ -29,7 +29,6 @@ type AWSClient struct { S3ConnURICleaningDisabled *s3.S3 ServicePackages []intf.ServicePackageData Session *session.Session - SupportedPlatforms []string TerraformVersion string {{ range .Services }} @@ -51,4 +50,4 @@ type AWSClient struct { func (client *AWSClient) {{ .ProviderNameUpper }}Client() *{{ .GoV2PackageOverride }}.{{ .ClientTypeName }} { return client.{{ .ProviderPackage }}Client.Client() } -{{- end }} +{{ end }} diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 014a3aa964b..b2c01957333 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -376,6 +376,7 @@ func New(_ context.Context) (*schema.Provider, error) { Optional: true, Description: "Skip getting the supported EC2 platforms. " + "Used by users that don't have ec2:DescribeAccountAttributes permissions.", + Deprecated: `With the retirement of EC2-Classic the skip_get_ec2_platforms attribute has been deprecated and will be removed in a future version.`, }, "skip_metadata_api_check": { Type: nullable.TypeNullableBool, diff --git a/website/docs/index.html.markdown b/website/docs/index.html.markdown index 1cc725a36ef..445761c21db 100644 --- a/website/docs/index.html.markdown +++ b/website/docs/index.html.markdown @@ -331,7 +331,7 @@ In addition to [generic `provider` arguments](https://www.terraform.io/docs/conf * `shared_credentials_file` - (Optional, **Deprecated**) Path to the shared credentials file. If not set and a profile is used, the default value is `~/.aws/credentials`. Can also be set with the `AWS_SHARED_CREDENTIALS_FILE` environment variable. * `shared_credentials_files` - (Optional) List of paths to the shared credentials file. If not set and a profile is used, the default value is `[~/.aws/credentials]`. A single value can also be set with the `AWS_SHARED_CREDENTIALS_FILE` environment variable. * `skip_credentials_validation` - (Optional) Whether to skip credentials validation via the STS API. This can be useful for testing and for AWS API implementations that do not have STS available. -* `skip_get_ec2_platforms` - (Optional) Whether to skip getting the supported EC2 platforms. Can be used when you do not have `ec2:DescribeAccountAttributes` permissions. +* `skip_get_ec2_platforms` - (Optional, **Deprecated**) Whether to skip getting the supported EC2 platforms. Can be used when you do not have `ec2:DescribeAccountAttributes` permissions. * `skip_metadata_api_check` - (Optional) Whether to skip the AWS Metadata API check. Useful for AWS API implementations that do not have a metadata API endpoint. Setting to `true` prevents Terraform from authenticating via the Metadata API. You may need to use other authentication methods like static credentials, configuration variables, or environment variables. * `skip_region_validation` - (Optional) Whether to skip validating the region. Useful for AWS-like implementations that use their own region names or to bypass the validation for regions that aren't publicly available yet. * `skip_requesting_account_id` - (Optional) Whether to skip requesting the account ID. Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. When set to `true` and not determined previously, returns an empty account ID when manually constructing ARN attributes with the following: From d5ac71533c91d5379fdda5f23758a20bd56fe08b Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 30 Nov 2022 10:34:23 -0500 Subject: [PATCH 12/16] Plugin Framework provider configuration matches Plugin SDK. --- internal/provider/fwprovider/provider.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/provider/fwprovider/provider.go b/internal/provider/fwprovider/provider.go index 621a5dbf456..329abd15c65 100644 --- a/internal/provider/fwprovider/provider.go +++ b/internal/provider/fwprovider/provider.go @@ -128,9 +128,10 @@ func (p *fwprovider) GetSchema(ctx context.Context) (tfsdk.Schema, diag.Diagnost Description: "Skip the credentials validation via STS API. Used for AWS API implementations that do not have STS available/implemented.", }, "skip_get_ec2_platforms": { - Type: types.BoolType, - Optional: true, - Description: "Skip getting the supported EC2 platforms. Used by users that don't have ec2:DescribeAccountAttributes permissions.", + Type: types.BoolType, + Optional: true, + Description: "Skip getting the supported EC2 platforms. Used by users that don't have ec2:DescribeAccountAttributes permissions.", + DeprecationMessage: `With the retirement of EC2-Classic the skip_get_ec2_platforms attribute has been deprecated and will be removed in a future version.`, }, "skip_metadata_api_check": { Type: types.StringType, From f4c9bce46db61945ce04b13d9859e95b137a3fdc Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 30 Nov 2022 10:36:46 -0500 Subject: [PATCH 13/16] Run 'make gen'. --- .ci/.semgrep-service-name0.yml | 15 +++ .ci/.semgrep-service-name1.yml | 45 +++++--- .ci/.semgrep-service-name2.yml | 73 +++++++------ .ci/.semgrep-service-name3.yml | 101 ++++++++++-------- .../components/generated/services_all.kt | 1 + 5 files changed, 147 insertions(+), 88 deletions(-) diff --git a/.ci/.semgrep-service-name0.yml b/.ci/.semgrep-service-name0.yml index 811f9fefe0a..91419de84f5 100644 --- a/.ci/.semgrep-service-name0.yml +++ b/.ci/.semgrep-service-name0.yml @@ -3144,3 +3144,18 @@ rules: - pattern-not-regex: "^TestAccConnect" - pattern-regex: ^TestAcc.* severity: WARNING + - id: connect-in-const-name + languages: + - go + message: Do not use "Connect" in const name inside connect package + paths: + include: + - internal/service/connect + patterns: + - pattern: const $NAME = ... + - metavariable-pattern: + metavariable: $NAME + patterns: + - pattern-regex: "(?i)Connect" + - pattern-not-regex: .*uickConnect.* + severity: WARNING diff --git a/.ci/.semgrep-service-name1.yml b/.ci/.semgrep-service-name1.yml index ad7e82fdfcd..f06cd7e82aa 100644 --- a/.ci/.semgrep-service-name1.yml +++ b/.ci/.semgrep-service-name1.yml @@ -1,20 +1,5 @@ # Generated by internal/generate/servicesemgrep/main.go; DO NOT EDIT. rules: - - id: connect-in-const-name - languages: - - go - message: Do not use "Connect" in const name inside connect package - paths: - include: - - internal/service/connect - patterns: - - pattern: const $NAME = ... - - metavariable-pattern: - metavariable: $NAME - patterns: - - pattern-regex: "(?i)Connect" - - pattern-not-regex: .*uickConnect.* - severity: WARNING - id: connect-in-var-name languages: - go @@ -3131,3 +3116,33 @@ rules: patterns: - pattern-regex: "(?i)Inspector" severity: WARNING + - id: inspector2-in-func-name + languages: + - go + message: Do not use "Inspector2" in func name inside inspector2 package + paths: + include: + - internal/service/inspector2 + patterns: + - pattern: func $NAME( ... ) { ... } + - metavariable-pattern: + metavariable: $NAME + patterns: + - pattern-regex: "(?i)Inspector2" + - pattern-not-regex: ^TestAcc.* + severity: WARNING + - id: inspector2-in-test-name + languages: + - go + message: Include "Inspector2" in test name + paths: + include: + - internal/service/inspector2/*_test.go + patterns: + - pattern: func $NAME( ... ) { ... } + - metavariable-pattern: + metavariable: $NAME + patterns: + - pattern-not-regex: "^TestAccInspector2" + - pattern-regex: ^TestAcc.* + severity: WARNING diff --git a/.ci/.semgrep-service-name2.yml b/.ci/.semgrep-service-name2.yml index dc2675e8bf2..713979a5405 100644 --- a/.ci/.semgrep-service-name2.yml +++ b/.ci/.semgrep-service-name2.yml @@ -1,35 +1,5 @@ # Generated by internal/generate/servicesemgrep/main.go; DO NOT EDIT. rules: - - id: inspector2-in-func-name - languages: - - go - message: Do not use "Inspector2" in func name inside inspector2 package - paths: - include: - - internal/service/inspector2 - patterns: - - pattern: func $NAME( ... ) { ... } - - metavariable-pattern: - metavariable: $NAME - patterns: - - pattern-regex: "(?i)Inspector2" - - pattern-not-regex: ^TestAcc.* - severity: WARNING - - id: inspector2-in-test-name - languages: - - go - message: Include "Inspector2" in test name - paths: - include: - - internal/service/inspector2/*_test.go - patterns: - - pattern: func $NAME( ... ) { ... } - - metavariable-pattern: - metavariable: $NAME - patterns: - - pattern-not-regex: "^TestAccInspector2" - - pattern-regex: ^TestAcc.* - severity: WARNING - id: inspector2-in-const-name languages: - go @@ -3128,3 +3098,46 @@ rules: - pattern-regex: "(?i)Redshift" - pattern-not-regex: ^TestAcc.* severity: WARNING + - id: redshift-in-test-name + languages: + - go + message: Include "Redshift" in test name + paths: + include: + - internal/service/redshift/*_test.go + patterns: + - pattern: func $NAME( ... ) { ... } + - metavariable-pattern: + metavariable: $NAME + patterns: + - pattern-not-regex: "^TestAccRedshift" + - pattern-regex: ^TestAcc.* + severity: WARNING + - id: redshift-in-const-name + languages: + - go + message: Do not use "Redshift" in const name inside redshift package + paths: + include: + - internal/service/redshift + patterns: + - pattern: const $NAME = ... + - metavariable-pattern: + metavariable: $NAME + patterns: + - pattern-regex: "(?i)Redshift" + severity: WARNING + - id: redshift-in-var-name + languages: + - go + message: Do not use "Redshift" in var name inside redshift package + paths: + include: + - internal/service/redshift + patterns: + - pattern: var $NAME = ... + - metavariable-pattern: + metavariable: $NAME + patterns: + - pattern-regex: "(?i)Redshift" + severity: WARNING diff --git a/.ci/.semgrep-service-name3.yml b/.ci/.semgrep-service-name3.yml index 00ed524df53..f989f12b09c 100644 --- a/.ci/.semgrep-service-name3.yml +++ b/.ci/.semgrep-service-name3.yml @@ -1,48 +1,5 @@ # Generated by internal/generate/servicesemgrep/main.go; DO NOT EDIT. rules: - - id: redshift-in-test-name - languages: - - go - message: Include "Redshift" in test name - paths: - include: - - internal/service/redshift/*_test.go - patterns: - - pattern: func $NAME( ... ) { ... } - - metavariable-pattern: - metavariable: $NAME - patterns: - - pattern-not-regex: "^TestAccRedshift" - - pattern-regex: ^TestAcc.* - severity: WARNING - - id: redshift-in-const-name - languages: - - go - message: Do not use "Redshift" in const name inside redshift package - paths: - include: - - internal/service/redshift - patterns: - - pattern: const $NAME = ... - - metavariable-pattern: - metavariable: $NAME - patterns: - - pattern-regex: "(?i)Redshift" - severity: WARNING - - id: redshift-in-var-name - languages: - - go - message: Do not use "Redshift" in var name inside redshift package - paths: - include: - - internal/service/redshift - patterns: - - pattern: var $NAME = ... - - metavariable-pattern: - metavariable: $NAME - patterns: - - pattern-regex: "(?i)Redshift" - severity: WARNING - id: redshiftdata-in-func-name languages: - go @@ -202,6 +159,64 @@ rules: patterns: - pattern-regex: "(?i)RedshiftServerless" severity: WARNING + - id: resourceexplorer2-in-func-name + languages: + - go + message: Do not use "ResourceExplorer2" in func name inside resourceexplorer2 package + paths: + include: + - internal/service/resourceexplorer2 + patterns: + - pattern: func $NAME( ... ) { ... } + - metavariable-pattern: + metavariable: $NAME + patterns: + - pattern-regex: "(?i)ResourceExplorer2" + - pattern-not-regex: ^TestAcc.* + severity: WARNING + - id: resourceexplorer2-in-test-name + languages: + - go + message: Include "ResourceExplorer2" in test name + paths: + include: + - internal/service/resourceexplorer2/*_test.go + patterns: + - pattern: func $NAME( ... ) { ... } + - metavariable-pattern: + metavariable: $NAME + patterns: + - pattern-not-regex: "^TestAccResourceExplorer2" + - pattern-regex: ^TestAcc.* + severity: WARNING + - id: resourceexplorer2-in-const-name + languages: + - go + message: Do not use "ResourceExplorer2" in const name inside resourceexplorer2 package + paths: + include: + - internal/service/resourceexplorer2 + patterns: + - pattern: const $NAME = ... + - metavariable-pattern: + metavariable: $NAME + patterns: + - pattern-regex: "(?i)ResourceExplorer2" + severity: WARNING + - id: resourceexplorer2-in-var-name + languages: + - go + message: Do not use "ResourceExplorer2" in var name inside resourceexplorer2 package + paths: + include: + - internal/service/resourceexplorer2 + patterns: + - pattern: var $NAME = ... + - metavariable-pattern: + metavariable: $NAME + patterns: + - pattern-regex: "(?i)ResourceExplorer2" + severity: WARNING - id: resourcegroups-in-func-name languages: - go diff --git a/.teamcity/components/generated/services_all.kt b/.teamcity/components/generated/services_all.kt index ac200328863..5a0eeb670bd 100644 --- a/.teamcity/components/generated/services_all.kt +++ b/.teamcity/components/generated/services_all.kt @@ -138,6 +138,7 @@ val services = mapOf( "redshift" to ServiceSpec("Redshift", vpcLock = true), "redshiftdata" to ServiceSpec("Redshift Data"), "redshiftserverless" to ServiceSpec("Redshift Serverless"), + "resourceexplorer2" to ServiceSpec("Resource Explorer"), "resourcegroups" to ServiceSpec("Resource Groups"), "resourcegroupstaggingapi" to ServiceSpec("Resource Groups Tagging"), "rolesanywhere" to ServiceSpec("Roles Anywhere"), From d13e13d3fc43afc229190609a395a96163abda35 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 30 Nov 2022 11:47:21 -0500 Subject: [PATCH 14/16] Common generator code. --- internal/generate/awsclient/main.go | 55 ++------------ internal/generate/clientconfig/main.go | 55 ++------------ internal/generate/common/generator.go | 76 ++++++++++++++++++++ internal/generate/common/namesdata.go | 19 +++++ internal/generate/servicepackagedata/main.go | 65 ++--------------- 5 files changed, 113 insertions(+), 157 deletions(-) create mode 100644 internal/generate/common/generator.go create mode 100644 internal/generate/common/namesdata.go diff --git a/internal/generate/awsclient/main.go b/internal/generate/awsclient/main.go index 8425616e0f4..3d7943aff57 100644 --- a/internal/generate/awsclient/main.go +++ b/internal/generate/awsclient/main.go @@ -4,16 +4,11 @@ package main import ( - "bytes" _ "embed" - "encoding/csv" "fmt" - "go/format" - "log" - "os" "sort" - "text/template" + "github.com/hashicorp/terraform-provider-aws/internal/generate/common" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -37,20 +32,14 @@ type TemplateData struct { } func main() { - fmt.Printf("Generating internal/conns/%s\n", filename) + g := common.NewGenerator() - f, err := os.Open(namesDataFile) - if err != nil { - log.Fatal(err) - } - - defer f.Close() + g.Infof("generating internal/conns/%s\n", filename) - csvReader := csv.NewReader(f) + data, err := common.ReadAllNamesData(namesDataFile) - data, err := csvReader.ReadAll() if err != nil { - log.Fatal(err) + g.Fatalf("error reading %s: %s", namesDataFile, err.Error()) } td := TemplateData{} @@ -100,38 +89,8 @@ func main() { return td.Services[i].ProviderNameUpper < td.Services[j].ProviderNameUpper }) - writeTemplate(tmpl, "awsclient", td) -} - -func writeTemplate(body string, templateName string, td TemplateData) { - f, err := os.OpenFile(filename, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644) - if err != nil { - log.Fatalf("error opening file (%s): %s", filename, err) - } - - tplate, err := template.New(templateName).Parse(body) - if err != nil { - log.Fatalf("error parsing template: %s", err) - } - - var buffer bytes.Buffer - err = tplate.Execute(&buffer, td) - if err != nil { - log.Fatalf("error executing template: %s", err) - } - - contents, err := format.Source(buffer.Bytes()) - if err != nil { - log.Fatalf("error formatting generated file: %s", err) - } - - if _, err := f.Write(contents); err != nil { - f.Close() - log.Fatalf("error writing to file (%s): %s", filename, err) - } - - if err := f.Close(); err != nil { - log.Fatalf("error closing file (%s): %s", filename, err) + if err := g.ApplyAndWriteTemplate(filename, "awsclient", tmpl, td); err != nil { + g.Fatalf("error: %s", err.Error()) } } diff --git a/internal/generate/clientconfig/main.go b/internal/generate/clientconfig/main.go index 48a02ba3db4..212971cb1aa 100644 --- a/internal/generate/clientconfig/main.go +++ b/internal/generate/clientconfig/main.go @@ -4,16 +4,11 @@ package main import ( - "bytes" _ "embed" - "encoding/csv" "fmt" - "go/format" - "log" - "os" "sort" - "text/template" + "github.com/hashicorp/terraform-provider-aws/internal/generate/common" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -37,20 +32,14 @@ type TemplateData struct { } func main() { - fmt.Printf("Generating internal/conns/%s\n", filename) + g := common.NewGenerator() - f, err := os.Open(namesDataFile) - if err != nil { - log.Fatal(err) - } - - defer f.Close() + g.Infof("generating internal/conns/%s\n", filename) - csvReader := csv.NewReader(f) + data, err := common.ReadAllNamesData(namesDataFile) - data, err := csvReader.ReadAll() if err != nil { - log.Fatal(err) + g.Fatalf("error reading %s: %s", namesDataFile, err.Error()) } td := TemplateData{} @@ -100,38 +89,8 @@ func main() { return td.Services[i].ProviderNameUpper < td.Services[j].ProviderNameUpper }) - writeTemplate(tmpl, "awsclient", td) -} - -func writeTemplate(body string, templateName string, td TemplateData) { - f, err := os.OpenFile(filename, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644) - if err != nil { - log.Fatalf("error opening file (%s): %s", filename, err) - } - - tplate, err := template.New(templateName).Parse(body) - if err != nil { - log.Fatalf("error parsing template: %s", err) - } - - var buffer bytes.Buffer - err = tplate.Execute(&buffer, td) - if err != nil { - log.Fatalf("error executing template: %s", err) - } - - contents, err := format.Source(buffer.Bytes()) - if err != nil { - log.Fatalf("error formatting generated file: %s", err) - } - - if _, err := f.Write(contents); err != nil { - f.Close() - log.Fatalf("error writing to file (%s): %s", filename, err) - } - - if err := f.Close(); err != nil { - log.Fatalf("error closing file (%s): %s", filename, err) + if err := g.ApplyAndWriteTemplate(filename, "config", tmpl, td); err != nil { + g.Fatalf("error: %s", err.Error()) } } diff --git a/internal/generate/common/generator.go b/internal/generate/common/generator.go new file mode 100644 index 00000000000..5e884fd0463 --- /dev/null +++ b/internal/generate/common/generator.go @@ -0,0 +1,76 @@ +package common + +import ( + "bytes" + "fmt" + "go/format" + "os" + "text/template" + + "github.com/mitchellh/cli" +) + +type Generator struct { + ui cli.Ui +} + +func NewGenerator() *Generator { + return &Generator{ + ui: &cli.BasicUi{ + Reader: os.Stdin, + Writer: os.Stdout, + ErrorWriter: os.Stderr, + }, + } +} + +func (g *Generator) ApplyAndWriteTemplate(filename, templateName, templateBody string, templateData any) error { + tmpl, err := template.New(templateName).Parse(templateBody) + + if err != nil { + return fmt.Errorf("parsing function template: %w", err) + } + + var buffer bytes.Buffer + err = tmpl.Execute(&buffer, templateData) + + if err != nil { + return fmt.Errorf("executing template: %w", err) + } + + generatedFileContents, err := format.Source(buffer.Bytes()) + + if err != nil { + g.Infof("%s", buffer.String()) + return fmt.Errorf("formatting generated source code: %w", err) + } + + f, err := os.OpenFile(filename, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644) + + if err != nil { + return fmt.Errorf("opening file (%s): %w", filename, err) + } + + defer f.Close() + + _, err = f.Write(generatedFileContents) + + if err != nil { + return fmt.Errorf("writing to file (%s): %w", filename, err) + } + + return nil +} + +func (g *Generator) Errorf(format string, a ...interface{}) { + g.ui.Error(fmt.Sprintf(format, a...)) +} + +func (g *Generator) Fatalf(format string, a ...interface{}) { + g.Errorf(format, a...) + os.Exit(1) +} + +func (g *Generator) Infof(format string, a ...interface{}) { + g.ui.Info(fmt.Sprintf(format, a...)) +} diff --git a/internal/generate/common/namesdata.go b/internal/generate/common/namesdata.go new file mode 100644 index 00000000000..0ce92391bb4 --- /dev/null +++ b/internal/generate/common/namesdata.go @@ -0,0 +1,19 @@ +package common + +import ( + "encoding/csv" + "fmt" + "os" +) + +func ReadAllNamesData(filename string) ([][]string, error) { + f, err := os.Open(filename) + + if err != nil { + return nil, fmt.Errorf("opening file (%s): %w", filename, err) + } + + defer f.Close() + + return csv.NewReader(f).ReadAll() +} diff --git a/internal/generate/servicepackagedata/main.go b/internal/generate/servicepackagedata/main.go index 735437c4675..4d23dd8138a 100644 --- a/internal/generate/servicepackagedata/main.go +++ b/internal/generate/servicepackagedata/main.go @@ -4,15 +4,12 @@ package main import ( - "bytes" _ "embed" "flag" "fmt" - "go/format" "os" - "text/template" - "github.com/mitchellh/cli" + "github.com/hashicorp/terraform-provider-aws/internal/generate/common" ) func usage() { @@ -31,68 +28,14 @@ func main() { filename = args[0] } - ui := &cli.BasicUi{ - Reader: os.Stdin, - Writer: os.Stdout, - ErrorWriter: os.Stderr, - } - generator := &Generator{ - UI: ui, - } + g := common.NewGenerator() templateData := &TemplateData{ PackageName: os.Getenv("GOPACKAGE"), } - if err := generator.ApplyAndWriteTemplate(filename, tmpl, templateData); err != nil { - ui.Error(fmt.Sprintf("error generating %s service package data: %s", templateData.PackageName, err.Error())) - os.Exit(1) - } -} - -type Generator struct { - UI cli.Ui -} - -func (g *Generator) ApplyAndWriteTemplate(filename, templateBody string, templateData *TemplateData) error { - tmpl, err := template.New("servicepackagedata").Parse(templateBody) - - if err != nil { - return fmt.Errorf("parsing function template: %w", err) - } - - var buffer bytes.Buffer - err = tmpl.Execute(&buffer, templateData) - - if err != nil { - return fmt.Errorf("executing template: %w", err) - } - - generatedFileContents, err := format.Source(buffer.Bytes()) - - if err != nil { - g.Infof("%s", buffer.String()) - return fmt.Errorf("formatting generated source code: %w", err) - } - - f, err := os.Create(filename) - - if err != nil { - return fmt.Errorf("creating file (%s): %w", filename, err) - } - - defer f.Close() - - _, err = f.Write(generatedFileContents) - - if err != nil { - return fmt.Errorf("writing to file (%s): %w", filename, err) + if err := g.ApplyAndWriteTemplate(filename, "servicepackagedata", tmpl, templateData); err != nil { + g.Fatalf("error generating %s service package data: %s", templateData.PackageName, err.Error()) } - - return nil -} - -func (g *Generator) Infof(format string, a ...interface{}) { - g.UI.Info(fmt.Sprintf(format, a...)) } type TemplateData struct { From 8aa11fdf07cbfee6cf261b33c13d470fc691843a Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 30 Nov 2022 12:21:46 -0500 Subject: [PATCH 15/16] Fix golangci-lint 'gomnd'. --- internal/generate/common/generator.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/generate/common/generator.go b/internal/generate/common/generator.go index 5e884fd0463..5020fdde3d0 100644 --- a/internal/generate/common/generator.go +++ b/internal/generate/common/generator.go @@ -45,7 +45,7 @@ func (g *Generator) ApplyAndWriteTemplate(filename, templateName, templateBody s return fmt.Errorf("formatting generated source code: %w", err) } - f, err := os.OpenFile(filename, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644) + f, err := os.OpenFile(filename, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644) // nolint:gomnd if err != nil { return fmt.Errorf("opening file (%s): %w", filename, err) From eb7602831ebfdf648a3fbbeea35a7b2446b271b4 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 30 Nov 2022 14:46:51 -0500 Subject: [PATCH 16/16] Fix golangci-lint 'nolintlint'. --- internal/generate/common/generator.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/generate/common/generator.go b/internal/generate/common/generator.go index 5020fdde3d0..b85156f6342 100644 --- a/internal/generate/common/generator.go +++ b/internal/generate/common/generator.go @@ -45,7 +45,7 @@ func (g *Generator) ApplyAndWriteTemplate(filename, templateName, templateBody s return fmt.Errorf("formatting generated source code: %w", err) } - f, err := os.OpenFile(filename, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644) // nolint:gomnd + f, err := os.OpenFile(filename, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644) //nolint:gomnd if err != nil { return fmt.Errorf("opening file (%s): %w", filename, err)