diff --git a/go.mod b/go.mod index c9a49581581..94cb82b2fe7 100644 --- a/go.mod +++ b/go.mod @@ -8,23 +8,23 @@ require ( github.com/YakDriver/regexache v0.24.0 github.com/aws/aws-sdk-go v1.55.5 github.com/aws/aws-sdk-go-v2 v1.30.4 - github.com/aws/aws-sdk-go-v2/config v1.27.28 - github.com/aws/aws-sdk-go-v2/credentials v1.17.28 + github.com/aws/aws-sdk-go-v2/config v1.27.30 + github.com/aws/aws-sdk-go-v2/credentials v1.17.29 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.12 - github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.32.4 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.14 + github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.32.5 github.com/aws/aws-sdk-go-v2/service/account v1.19.4 - github.com/aws/aws-sdk-go-v2/service/acm v1.28.5 - github.com/aws/aws-sdk-go-v2/service/acmpca v1.35.1 + github.com/aws/aws-sdk-go-v2/service/acm v1.28.6 + github.com/aws/aws-sdk-go-v2/service/acmpca v1.35.2 github.com/aws/aws-sdk-go-v2/service/amp v1.27.4 github.com/aws/aws-sdk-go-v2/service/amplify v1.24.1 - github.com/aws/aws-sdk-go-v2/service/apigateway v1.25.5 - github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.22.5 - github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.4 + github.com/aws/aws-sdk-go-v2/service/apigateway v1.25.6 + github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.22.6 + github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.5 github.com/aws/aws-sdk-go-v2/service/appfabric v1.9.4 github.com/aws/aws-sdk-go-v2/service/appflow v1.43.4 github.com/aws/aws-sdk-go-v2/service/appintegrations v1.28.1 - github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.31.1 + github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.31.2 github.com/aws/aws-sdk-go-v2/service/applicationinsights v1.26.4 github.com/aws/aws-sdk-go-v2/service/applicationsignals v1.3.1 github.com/aws/aws-sdk-go-v2/service/appmesh v1.27.4 @@ -33,13 +33,13 @@ require ( github.com/aws/aws-sdk-go-v2/service/appsync v1.35.1 github.com/aws/aws-sdk-go-v2/service/athena v1.44.5 github.com/aws/aws-sdk-go-v2/service/auditmanager v1.35.4 - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.43.4 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.43.5 github.com/aws/aws-sdk-go-v2/service/autoscalingplans v1.22.5 github.com/aws/aws-sdk-go-v2/service/backup v1.36.4 - github.com/aws/aws-sdk-go-v2/service/batch v1.44.0 + github.com/aws/aws-sdk-go-v2/service/batch v1.44.1 github.com/aws/aws-sdk-go-v2/service/bcmdataexports v1.5.4 - github.com/aws/aws-sdk-go-v2/service/bedrock v1.14.0 - github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.16.1 + github.com/aws/aws-sdk-go-v2/service/bedrock v1.15.0 + github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.17.0 github.com/aws/aws-sdk-go-v2/service/budgets v1.25.5 github.com/aws/aws-sdk-go-v2/service/chatbot v1.4.4 github.com/aws/aws-sdk-go-v2/service/chime v1.32.4 @@ -47,20 +47,20 @@ require ( github.com/aws/aws-sdk-go-v2/service/chimesdkvoice v1.17.4 github.com/aws/aws-sdk-go-v2/service/cleanrooms v1.16.1 github.com/aws/aws-sdk-go-v2/service/cloud9 v1.26.4 - github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.20.4 - github.com/aws/aws-sdk-go-v2/service/cloudformation v1.53.4 + github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.20.5 + github.com/aws/aws-sdk-go-v2/service/cloudformation v1.53.5 github.com/aws/aws-sdk-go-v2/service/cloudfront v1.38.5 github.com/aws/aws-sdk-go-v2/service/cloudfrontkeyvaluestore v1.6.4 github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.25.3 github.com/aws/aws-sdk-go-v2/service/cloudsearch v1.24.4 - github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.42.4 - github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.40.4 - github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.37.4 + github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.42.5 + github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.40.5 + github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.37.5 github.com/aws/aws-sdk-go-v2/service/codeartifact v1.30.4 - github.com/aws/aws-sdk-go-v2/service/codebuild v1.42.0 + github.com/aws/aws-sdk-go-v2/service/codebuild v1.42.1 github.com/aws/aws-sdk-go-v2/service/codecatalyst v1.15.4 github.com/aws/aws-sdk-go-v2/service/codecommit v1.25.1 - github.com/aws/aws-sdk-go-v2/service/codedeploy v1.27.4 + github.com/aws/aws-sdk-go-v2/service/codedeploy v1.27.5 github.com/aws/aws-sdk-go-v2/service/codeguruprofiler v1.22.4 github.com/aws/aws-sdk-go-v2/service/codegurureviewer v1.27.4 github.com/aws/aws-sdk-go-v2/service/codepipeline v1.31.1 @@ -70,7 +70,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.43.2 github.com/aws/aws-sdk-go-v2/service/comprehend v1.33.4 github.com/aws/aws-sdk-go-v2/service/computeoptimizer v1.37.5 - github.com/aws/aws-sdk-go-v2/service/configservice v1.48.4 + github.com/aws/aws-sdk-go-v2/service/configservice v1.48.5 github.com/aws/aws-sdk-go-v2/service/connect v1.107.1 github.com/aws/aws-sdk-go-v2/service/connectcases v1.19.4 github.com/aws/aws-sdk-go-v2/service/controltower v1.16.5 @@ -78,42 +78,42 @@ require ( github.com/aws/aws-sdk-go-v2/service/costexplorer v1.40.4 github.com/aws/aws-sdk-go-v2/service/costoptimizationhub v1.8.1 github.com/aws/aws-sdk-go-v2/service/customerprofiles v1.39.4 - github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.40.4 + github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.40.5 github.com/aws/aws-sdk-go-v2/service/databrew v1.31.4 github.com/aws/aws-sdk-go-v2/service/dataexchange v1.30.4 github.com/aws/aws-sdk-go-v2/service/datapipeline v1.23.4 - github.com/aws/aws-sdk-go-v2/service/datasync v1.40.4 - github.com/aws/aws-sdk-go-v2/service/datazone v1.17.1 + github.com/aws/aws-sdk-go-v2/service/datasync v1.40.5 + github.com/aws/aws-sdk-go-v2/service/datazone v1.17.2 github.com/aws/aws-sdk-go-v2/service/dax v1.21.5 github.com/aws/aws-sdk-go-v2/service/detective v1.29.4 github.com/aws/aws-sdk-go-v2/service/devicefarm v1.25.3 github.com/aws/aws-sdk-go-v2/service/devopsguru v1.32.4 - github.com/aws/aws-sdk-go-v2/service/directconnect v1.27.6 + github.com/aws/aws-sdk-go-v2/service/directconnect v1.27.7 github.com/aws/aws-sdk-go-v2/service/directoryservice v1.27.4 - github.com/aws/aws-sdk-go-v2/service/dlm v1.26.4 - github.com/aws/aws-sdk-go-v2/service/docdb v1.37.0 + github.com/aws/aws-sdk-go-v2/service/dlm v1.26.5 + github.com/aws/aws-sdk-go-v2/service/docdb v1.37.1 github.com/aws/aws-sdk-go-v2/service/docdbelastic v1.11.4 github.com/aws/aws-sdk-go-v2/service/drs v1.28.4 - github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.5 + github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.6 github.com/aws/aws-sdk-go-v2/service/ec2 v1.176.0 - github.com/aws/aws-sdk-go-v2/service/ecr v1.32.1 + github.com/aws/aws-sdk-go-v2/service/ecr v1.32.2 github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.25.4 - github.com/aws/aws-sdk-go-v2/service/ecs v1.45.1 + github.com/aws/aws-sdk-go-v2/service/ecs v1.45.2 github.com/aws/aws-sdk-go-v2/service/efs v1.31.4 - github.com/aws/aws-sdk-go-v2/service/eks v1.48.1 - github.com/aws/aws-sdk-go-v2/service/elasticache v1.40.6 + github.com/aws/aws-sdk-go-v2/service/eks v1.48.2 + github.com/aws/aws-sdk-go-v2/service/elasticache v1.40.7 github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.26.3 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.26.4 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.34.1 - github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.30.4 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.26.5 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.34.2 + github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.30.5 github.com/aws/aws-sdk-go-v2/service/elastictranscoder v1.25.4 - github.com/aws/aws-sdk-go-v2/service/emr v1.42.3 - github.com/aws/aws-sdk-go-v2/service/emrcontainers v1.30.5 + github.com/aws/aws-sdk-go-v2/service/emr v1.42.4 + github.com/aws/aws-sdk-go-v2/service/emrcontainers v1.31.0 github.com/aws/aws-sdk-go-v2/service/emrserverless v1.23.4 - github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.4 + github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.5 github.com/aws/aws-sdk-go-v2/service/evidently v1.21.4 github.com/aws/aws-sdk-go-v2/service/finspace v1.26.4 - github.com/aws/aws-sdk-go-v2/service/firehose v1.32.1 + github.com/aws/aws-sdk-go-v2/service/firehose v1.32.2 github.com/aws/aws-sdk-go-v2/service/fis v1.27.1 github.com/aws/aws-sdk-go-v2/service/fms v1.35.4 github.com/aws/aws-sdk-go-v2/service/fsx v1.47.3 @@ -129,8 +129,8 @@ require ( github.com/aws/aws-sdk-go-v2/service/iam v1.35.0 github.com/aws/aws-sdk-go-v2/service/identitystore v1.25.4 github.com/aws/aws-sdk-go-v2/service/inspector v1.23.4 - github.com/aws/aws-sdk-go-v2/service/inspector2 v1.29.0 - github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.4 + github.com/aws/aws-sdk-go-v2/service/inspector2 v1.30.0 + github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.5 github.com/aws/aws-sdk-go-v2/service/iot v1.55.4 github.com/aws/aws-sdk-go-v2/service/iotanalytics v1.24.4 github.com/aws/aws-sdk-go-v2/service/iotevents v1.25.4 @@ -140,13 +140,13 @@ require ( github.com/aws/aws-sdk-go-v2/service/kafkaconnect v1.19.4 github.com/aws/aws-sdk-go-v2/service/kendra v1.52.4 github.com/aws/aws-sdk-go-v2/service/keyspaces v1.12.4 - github.com/aws/aws-sdk-go-v2/service/kinesis v1.29.4 + github.com/aws/aws-sdk-go-v2/service/kinesis v1.29.5 github.com/aws/aws-sdk-go-v2/service/kinesisanalytics v1.23.4 github.com/aws/aws-sdk-go-v2/service/kinesisanalyticsv2 v1.28.3 github.com/aws/aws-sdk-go-v2/service/kinesisvideo v1.25.4 - github.com/aws/aws-sdk-go-v2/service/kms v1.35.4 + github.com/aws/aws-sdk-go-v2/service/kms v1.35.5 github.com/aws/aws-sdk-go-v2/service/lakeformation v1.35.4 - github.com/aws/aws-sdk-go-v2/service/lambda v1.58.0 + github.com/aws/aws-sdk-go-v2/service/lambda v1.58.1 github.com/aws/aws-sdk-go-v2/service/launchwizard v1.6.4 github.com/aws/aws-sdk-go-v2/service/lexmodelbuildingservice v1.26.4 github.com/aws/aws-sdk-go-v2/service/lexmodelsv2 v1.46.1 @@ -165,16 +165,16 @@ require ( github.com/aws/aws-sdk-go-v2/service/memorydb v1.21.6 github.com/aws/aws-sdk-go-v2/service/mq v1.25.4 github.com/aws/aws-sdk-go-v2/service/mwaa v1.29.5 - github.com/aws/aws-sdk-go-v2/service/neptune v1.33.4 + github.com/aws/aws-sdk-go-v2/service/neptune v1.33.5 github.com/aws/aws-sdk-go-v2/service/neptunegraph v1.11.1 github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.41.1 github.com/aws/aws-sdk-go-v2/service/networkmanager v1.29.4 github.com/aws/aws-sdk-go-v2/service/networkmonitor v1.5.4 - github.com/aws/aws-sdk-go-v2/service/oam v1.13.5 - github.com/aws/aws-sdk-go-v2/service/opensearch v1.39.3 - github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.14.0 + github.com/aws/aws-sdk-go-v2/service/oam v1.13.6 + github.com/aws/aws-sdk-go-v2/service/opensearch v1.39.4 + github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.14.1 github.com/aws/aws-sdk-go-v2/service/opsworks v1.24.4 - github.com/aws/aws-sdk-go-v2/service/organizations v1.30.3 + github.com/aws/aws-sdk-go-v2/service/organizations v1.31.0 github.com/aws/aws-sdk-go-v2/service/osis v1.12.4 github.com/aws/aws-sdk-go-v2/service/outposts v1.42.1 github.com/aws/aws-sdk-go-v2/service/paymentcryptography v1.12.4 @@ -183,58 +183,58 @@ require ( github.com/aws/aws-sdk-go-v2/service/pipes v1.14.4 github.com/aws/aws-sdk-go-v2/service/polly v1.42.4 github.com/aws/aws-sdk-go-v2/service/pricing v1.30.4 - github.com/aws/aws-sdk-go-v2/service/qbusiness v1.10.3 + github.com/aws/aws-sdk-go-v2/service/qbusiness v1.11.0 github.com/aws/aws-sdk-go-v2/service/qldb v1.23.4 - github.com/aws/aws-sdk-go-v2/service/ram v1.27.4 - github.com/aws/aws-sdk-go-v2/service/rbin v1.18.4 - github.com/aws/aws-sdk-go-v2/service/rds v1.82.1 - github.com/aws/aws-sdk-go-v2/service/redshift v1.46.5 + github.com/aws/aws-sdk-go-v2/service/ram v1.27.5 + github.com/aws/aws-sdk-go-v2/service/rbin v1.18.5 + github.com/aws/aws-sdk-go-v2/service/rds v1.82.2 + github.com/aws/aws-sdk-go-v2/service/redshift v1.46.6 github.com/aws/aws-sdk-go-v2/service/redshiftdata v1.27.4 github.com/aws/aws-sdk-go-v2/service/redshiftserverless v1.21.1 github.com/aws/aws-sdk-go-v2/service/rekognition v1.43.3 github.com/aws/aws-sdk-go-v2/service/resiliencehub v1.24.1 github.com/aws/aws-sdk-go-v2/service/resourceexplorer2 v1.12.4 - github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.24.4 - github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.4 + github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.24.5 + github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.5 github.com/aws/aws-sdk-go-v2/service/rolesanywhere v1.14.1 - github.com/aws/aws-sdk-go-v2/service/route53 v1.42.4 + github.com/aws/aws-sdk-go-v2/service/route53 v1.43.0 github.com/aws/aws-sdk-go-v2/service/route53domains v1.25.4 github.com/aws/aws-sdk-go-v2/service/route53profiles v1.2.4 github.com/aws/aws-sdk-go-v2/service/route53recoverycontrolconfig v1.23.4 github.com/aws/aws-sdk-go-v2/service/route53recoveryreadiness v1.19.4 - github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.4 + github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.5 github.com/aws/aws-sdk-go-v2/service/rum v1.19.4 - github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0 - github.com/aws/aws-sdk-go-v2/service/s3control v1.46.4 + github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1 + github.com/aws/aws-sdk-go-v2/service/s3control v1.46.5 github.com/aws/aws-sdk-go-v2/service/s3outposts v1.26.4 github.com/aws/aws-sdk-go-v2/service/sagemaker v1.154.0 github.com/aws/aws-sdk-go-v2/service/scheduler v1.10.4 github.com/aws/aws-sdk-go-v2/service/schemas v1.26.4 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.5 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.6 github.com/aws/aws-sdk-go-v2/service/securityhub v1.52.0 github.com/aws/aws-sdk-go-v2/service/securitylake v1.16.4 github.com/aws/aws-sdk-go-v2/service/serverlessapplicationrepository v1.22.4 github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.30.4 github.com/aws/aws-sdk-go-v2/service/servicecatalogappregistry v1.28.4 - github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.4 - github.com/aws/aws-sdk-go-v2/service/servicequotas v1.23.4 + github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.5 + github.com/aws/aws-sdk-go-v2/service/servicequotas v1.23.5 github.com/aws/aws-sdk-go-v2/service/ses v1.26.0 github.com/aws/aws-sdk-go-v2/service/sesv2 v1.33.0 - github.com/aws/aws-sdk-go-v2/service/sfn v1.30.1 + github.com/aws/aws-sdk-go-v2/service/sfn v1.30.2 github.com/aws/aws-sdk-go-v2/service/shield v1.27.4 github.com/aws/aws-sdk-go-v2/service/signer v1.24.4 - github.com/aws/aws-sdk-go-v2/service/sns v1.31.4 - github.com/aws/aws-sdk-go-v2/service/sqs v1.34.4 - github.com/aws/aws-sdk-go-v2/service/ssm v1.52.5 + github.com/aws/aws-sdk-go-v2/service/sns v1.31.5 + github.com/aws/aws-sdk-go-v2/service/sqs v1.34.5 + github.com/aws/aws-sdk-go-v2/service/ssm v1.52.6 github.com/aws/aws-sdk-go-v2/service/ssmcontacts v1.24.4 github.com/aws/aws-sdk-go-v2/service/ssmincidents v1.32.4 github.com/aws/aws-sdk-go-v2/service/ssmsap v1.16.0 github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 github.com/aws/aws-sdk-go-v2/service/ssoadmin v1.27.5 github.com/aws/aws-sdk-go-v2/service/storagegateway v1.31.4 - github.com/aws/aws-sdk-go-v2/service/sts v1.30.4 - github.com/aws/aws-sdk-go-v2/service/swf v1.25.4 - github.com/aws/aws-sdk-go-v2/service/synthetics v1.26.4 + github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 + github.com/aws/aws-sdk-go-v2/service/swf v1.25.5 + github.com/aws/aws-sdk-go-v2/service/synthetics v1.26.5 github.com/aws/aws-sdk-go-v2/service/timestreaminfluxdb v1.2.4 github.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.27.4 github.com/aws/aws-sdk-go-v2/service/transcribe v1.39.4 @@ -248,7 +248,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/worklink v1.22.4 github.com/aws/aws-sdk-go-v2/service/workspaces v1.45.1 github.com/aws/aws-sdk-go-v2/service/workspacesweb v1.21.4 - github.com/aws/aws-sdk-go-v2/service/xray v1.27.4 + github.com/aws/aws-sdk-go-v2/service/xray v1.27.5 github.com/aws/smithy-go v1.20.4 github.com/beevik/etree v1.4.1 github.com/cedar-policy/cedar-go v0.1.0 diff --git a/go.sum b/go.sum index 75be397ac1c..fddec535c79 100644 --- a/go.sum +++ b/go.sum @@ -28,14 +28,14 @@ github.com/aws/aws-sdk-go-v2 v1.30.4 h1:frhcagrVNrzmT95RJImMHgabt99vkXGslubDaDag github.com/aws/aws-sdk-go-v2 v1.30.4/go.mod h1:CT+ZPWXbYrci8chcARI3OmI/qgd+f6WtuLOoaIA8PR0= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 h1:70PVAiL15/aBMh5LThwgXdSQorVr91L127ttckI9QQU= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4/go.mod h1:/MQxMqci8tlqDH+pjmoLu1i0tbWCUP1hhyMRuFxpQCw= -github.com/aws/aws-sdk-go-v2/config v1.27.28 h1:OTxWGW/91C61QlneCtnD62NLb4W616/NM1jA8LhJqbg= -github.com/aws/aws-sdk-go-v2/config v1.27.28/go.mod h1:uzVRVtJSU5EFv6Fu82AoVFKozJi2ZCY6WRCXj06rbvs= -github.com/aws/aws-sdk-go-v2/credentials v1.17.28 h1:m8+AHY/ND8CMHJnPoH7PJIRakWGa4gbfbxuY9TGTUXM= -github.com/aws/aws-sdk-go-v2/credentials v1.17.28/go.mod h1:6TF7dSc78ehD1SL6KpRIPKMA1GyyWflIkjqg+qmf4+c= +github.com/aws/aws-sdk-go-v2/config v1.27.30 h1:AQF3/+rOgeJBQP3iI4vojlPib5X6eeOYoa/af7OxAYg= +github.com/aws/aws-sdk-go-v2/config v1.27.30/go.mod h1:yxqvuubha9Vw8stEgNiStO+yZpP68Wm9hLmcm+R/Qk4= +github.com/aws/aws-sdk-go-v2/credentials v1.17.29 h1:CwGsupsXIlAFYuDVHv1nnK0wnxO0wZ/g1L8DSK/xiIw= +github.com/aws/aws-sdk-go-v2/credentials v1.17.29/go.mod h1:BPJ/yXV92ZVq6G8uYvbU0gSl8q94UB63nMT5ctNO38g= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 h1:yjwoSyDZF8Jth+mUk5lSPJCkMC0lMy6FaCD51jm6ayE= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12/go.mod h1:fuR57fAgMk7ot3WcNQfb6rSEn+SUffl7ri+aa8uKysI= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.12 h1:i7cJ1izNlox4ka6cvbHPTztYGtbpW4Je/jyQIKOIU4A= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.12/go.mod h1:lHnam/4CTEVHaANZD54IrpE80VLK+lUU84WEeJ1FJ8M= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.14 h1:dQa4KkoEVgk3oLL9IeoW9qrXijyQ6lWa+DX6Vn32Lhw= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.14/go.mod h1:aRKW0B+zH8J6cz3FFiQ9JbUQc7UroLx6lwfvNqIsPOs= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 h1:TNyt/+X43KJ9IJJMjKfa3bNTiZbUP7DeCxfbTROESwY= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16/go.mod h1:2DwJF39FlNAUiX5pAc0UNeiz16lK2t7IaFcm0LFHEgc= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 h1:jYfy8UPmd+6kJW5YhY0L1/KftReOGxI/4NtVSTh9O/I= @@ -44,32 +44,32 @@ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvK github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 h1:mimdLQkIX1zr8GIPY1ZtALdBQGxcASiBd2MOp8m/dMc= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16/go.mod h1:YHk6owoSwrIsok+cAH9PENCOGoH5PU2EllX4vLtSrsY= -github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.32.4 h1:8hsGX13lDLAOuW0RCz1vf5Ke6SoGmo8cRIuLxGqE6rs= -github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.32.4/go.mod h1:j7QmbsuRrU17hdKR7UoiSXjKbzx65NGApP2/AKSIZws= +github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.32.5 h1:8ikF/8ccgxv/JGWd7On8vdytpf4Pj1vOwVpUImOy9t4= +github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.32.5/go.mod h1:j7QmbsuRrU17hdKR7UoiSXjKbzx65NGApP2/AKSIZws= github.com/aws/aws-sdk-go-v2/service/account v1.19.4 h1:v/rx7sJ6N9y3XObIyfJOLQnu0G6V/eBVkC5X79N/32Y= github.com/aws/aws-sdk-go-v2/service/account v1.19.4/go.mod h1:uBBYm9idEyHenbZGnKp7RsFDeatpU3j1eYGpctlHS4A= -github.com/aws/aws-sdk-go-v2/service/acm v1.28.5 h1:yJriRQs3d0ZI59mAyCdCyM/l/oJ9wnWbDhADZlbfoYs= -github.com/aws/aws-sdk-go-v2/service/acm v1.28.5/go.mod h1:AI/FWryd1egUbYqCtEexDQqp9KTU9wr6uMYMhI5k/C0= -github.com/aws/aws-sdk-go-v2/service/acmpca v1.35.1 h1:voL/pOr0BaN/aalNDqu03FU9WLfLlUWKU5vN4zZrzxw= -github.com/aws/aws-sdk-go-v2/service/acmpca v1.35.1/go.mod h1:V5sr9xWq2ezIJp9Z9K42deo13xgg1IUTQK38QKPsF4I= +github.com/aws/aws-sdk-go-v2/service/acm v1.28.6 h1:w22G2UDq7BYmBIR8yZOhokh/1/rU1YeJDK3lPIzTj34= +github.com/aws/aws-sdk-go-v2/service/acm v1.28.6/go.mod h1:AI/FWryd1egUbYqCtEexDQqp9KTU9wr6uMYMhI5k/C0= +github.com/aws/aws-sdk-go-v2/service/acmpca v1.35.2 h1:NbMNbjzLw5TQwUjyy03Je/O+Vn+HKXm2UeFVL0zFsG4= +github.com/aws/aws-sdk-go-v2/service/acmpca v1.35.2/go.mod h1:V5sr9xWq2ezIJp9Z9K42deo13xgg1IUTQK38QKPsF4I= github.com/aws/aws-sdk-go-v2/service/amp v1.27.4 h1:7vtS6+3ElVte1xD/TV5DbZQHj+R0QoohQyak5YIK1uE= github.com/aws/aws-sdk-go-v2/service/amp v1.27.4/go.mod h1:po55t8XjbRLbJ8XL9iGqKfgmfEn3aerSnvrD/q5hmEg= github.com/aws/aws-sdk-go-v2/service/amplify v1.24.1 h1:8d99lOaDOOQCx1Fzz/YqgKRFh7iQIgkgMlvfq1c5UWY= github.com/aws/aws-sdk-go-v2/service/amplify v1.24.1/go.mod h1:8qM0LbEOwR45GAsJvqWyGwFYEgeAEsvfvk6q75sFa50= -github.com/aws/aws-sdk-go-v2/service/apigateway v1.25.5 h1:KJHQTTo7aCyXhUYlKYAtPSjcl3KZvc+4FFgSPUWcs9k= -github.com/aws/aws-sdk-go-v2/service/apigateway v1.25.5/go.mod h1:3BsphqjgE9YOqWavNw60htOWr+17v+0hDvOTZAvQ5fY= -github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.22.5 h1:7iFofM7WlbHFYZmg54ft21VOhlr17I9x+/hiMnY0cow= -github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.22.5/go.mod h1:uwB4CO7XADP7or8jFWv8E5hNrwYFY4Zgn/FImfohZKM= -github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.4 h1:DC/O773ZvFjBtH0LJ7+580jDvM1vmOKOTYva/ifm7DQ= -github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.4/go.mod h1:yL19FXX7gb5GiHdTjCP8MNL5DW96IgiYi/H56JhEuZ4= +github.com/aws/aws-sdk-go-v2/service/apigateway v1.25.6 h1:DvM0CUbocoXYCC0zoACiTUbkFZaz9cTTqyMx9Zkq2cU= +github.com/aws/aws-sdk-go-v2/service/apigateway v1.25.6/go.mod h1:3BsphqjgE9YOqWavNw60htOWr+17v+0hDvOTZAvQ5fY= +github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.22.6 h1:AnY44gk5ViKyp34u1FQmRSP7LNTrjheDNyNSiccSvtw= +github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.22.6/go.mod h1:uwB4CO7XADP7or8jFWv8E5hNrwYFY4Zgn/FImfohZKM= +github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.5 h1:OvQHr5+LWYKyt4Iv8p+escwX1jmljo4f5EuFlvwUJKA= +github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.5/go.mod h1:yL19FXX7gb5GiHdTjCP8MNL5DW96IgiYi/H56JhEuZ4= github.com/aws/aws-sdk-go-v2/service/appfabric v1.9.4 h1:e18VUICqDRo37EauaSl/FIs2iMeWs0vdb54r0XlqdrU= github.com/aws/aws-sdk-go-v2/service/appfabric v1.9.4/go.mod h1:fyAiNyCDDzrPfGgWEYkJtobC6qiziWUlwng1Ix7g8/0= github.com/aws/aws-sdk-go-v2/service/appflow v1.43.4 h1:FJ6zJkBym0FV+H8kbAKpokfbZL04XpA44t6uWA4w++0= github.com/aws/aws-sdk-go-v2/service/appflow v1.43.4/go.mod h1:eBIZ0IHJHWYl6Idy5wy+gHdB6B76vSQiSi/oCeB9jD0= github.com/aws/aws-sdk-go-v2/service/appintegrations v1.28.1 h1:MheouQNjqxyI02C1fWh3QzshYojGgqhY1ja7rqeEyYI= github.com/aws/aws-sdk-go-v2/service/appintegrations v1.28.1/go.mod h1:1DNDu5ras8iIvXx/AuhRkCNtSe0NB4HjdEY+7XyC+aw= -github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.31.1 h1:k9Naq87QuDek6vxzZBAElQxVD6r+Zw1EuHUn5OnId6Q= -github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.31.1/go.mod h1:YzuGTQ6UfGKCrzpSDF62R0OzvcXBy8zTK7R9ILU44Iw= +github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.31.2 h1:gb53L77aofDMWkfonMfKElh36C32saGh9FdMF4ce2iQ= +github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.31.2/go.mod h1:YzuGTQ6UfGKCrzpSDF62R0OzvcXBy8zTK7R9ILU44Iw= github.com/aws/aws-sdk-go-v2/service/applicationinsights v1.26.4 h1:8SQK5aPMXymZoX3CiJ1x4jeQvhOg6aKkmic9k9o2LYo= github.com/aws/aws-sdk-go-v2/service/applicationinsights v1.26.4/go.mod h1:F+iBvMxDaWhQgPF4bVvwCJ4+1esJXIa+HAGWu37AmaI= github.com/aws/aws-sdk-go-v2/service/applicationsignals v1.3.1 h1:DWuMp2+NdUD2BE55Cc8Bs2rjWM3svAzkiQZUu1+2fTw= @@ -86,20 +86,20 @@ github.com/aws/aws-sdk-go-v2/service/athena v1.44.5 h1:l6fpIrGjYc8zfeBo3QHWxQf3d github.com/aws/aws-sdk-go-v2/service/athena v1.44.5/go.mod h1:JKpavcrQ83Uy6ntM2pIt0vfVpHR9kvI3dkUeAKQstpc= github.com/aws/aws-sdk-go-v2/service/auditmanager v1.35.4 h1:z02SFD4Wgilovt63pniG1z9OaEIOxhVC2v+9WKTBfkw= github.com/aws/aws-sdk-go-v2/service/auditmanager v1.35.4/go.mod h1:ye1nOkHA8x7xKS3P4km6hwg5GmA7WByJJrm6Np3aJ9s= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.43.4 h1:OFz6UAgJfc4VzUAgGeOfU1udTKFl1fZFcwaecIRcSXs= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.43.4/go.mod h1:dDC/8RWLlLrUEoVJB04yka2iIWkFdtAAliefSH+FUlo= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.43.5 h1:b9wq1tEV06De56Vzpif7MFtMmErKWh+WureDxMwItnE= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.43.5/go.mod h1:dDC/8RWLlLrUEoVJB04yka2iIWkFdtAAliefSH+FUlo= github.com/aws/aws-sdk-go-v2/service/autoscalingplans v1.22.5 h1:e5HALi+7vcUroTJloJutq2EV+iihasJvFit5Bz8kTWs= github.com/aws/aws-sdk-go-v2/service/autoscalingplans v1.22.5/go.mod h1:ByOl4k37YS9BZQSVoewiOGVmOsocotE5vr9s+pzwkJ4= github.com/aws/aws-sdk-go-v2/service/backup v1.36.4 h1:q6Kwfy9DhTYPq/JDl5O3dnfdf2Hga3Wc/fu5m2LVspc= github.com/aws/aws-sdk-go-v2/service/backup v1.36.4/go.mod h1:WGwrjhzgh1bf0GChiwnw6TYok6tEIPFat79ExdcN6Zw= -github.com/aws/aws-sdk-go-v2/service/batch v1.44.0 h1:r76873R9Ep7XW9KUkCexjTqnEtmfimjq1FbHc5dKshk= -github.com/aws/aws-sdk-go-v2/service/batch v1.44.0/go.mod h1:ELBM9CH29I8N+OxY5/M5bBs3YQ1rd+S6mmSJKiCiJv0= +github.com/aws/aws-sdk-go-v2/service/batch v1.44.1 h1:078c62Zp/bQx7C9OJ0xS7ISitV046XrwSylWIXt0Nno= +github.com/aws/aws-sdk-go-v2/service/batch v1.44.1/go.mod h1:ELBM9CH29I8N+OxY5/M5bBs3YQ1rd+S6mmSJKiCiJv0= github.com/aws/aws-sdk-go-v2/service/bcmdataexports v1.5.4 h1:g4gzS4y9JrFsiJVtcsdVL53My97meTn7kfWYgyAFJ8Y= github.com/aws/aws-sdk-go-v2/service/bcmdataexports v1.5.4/go.mod h1:0MFqrGyNIuwMR0jlSd5r/rCA3S3IwGtHlN2EiTtavis= -github.com/aws/aws-sdk-go-v2/service/bedrock v1.14.0 h1:LHrV++0CqSnqSuZ6pqfrh4Z0IjL6ehT/bVOZ98hTY6o= -github.com/aws/aws-sdk-go-v2/service/bedrock v1.14.0/go.mod h1:tvSbdpG0KqXiLRahXAL6y/6vXIW7b8M6O+nVNI7epAA= -github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.16.1 h1:VP4FtZKHzf/xegbubhPgNovObPVRIOtch7eelgwROx0= -github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.16.1/go.mod h1:0jVvis8nv1ql8guJStqvyOgBUwhXCfDwZigqjBTIjXs= +github.com/aws/aws-sdk-go-v2/service/bedrock v1.15.0 h1:fvijh5V7fNF0s3eEztyErR7Hc8IQ+rHWrr9YsXTK0rE= +github.com/aws/aws-sdk-go-v2/service/bedrock v1.15.0/go.mod h1:tvSbdpG0KqXiLRahXAL6y/6vXIW7b8M6O+nVNI7epAA= +github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.17.0 h1:LvJj7NhCFbFciRShUDsBaTE1qjMi6A/fgLcoXARRx/Y= +github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.17.0/go.mod h1:0jVvis8nv1ql8guJStqvyOgBUwhXCfDwZigqjBTIjXs= github.com/aws/aws-sdk-go-v2/service/budgets v1.25.5 h1:tAyHFeb78bW+DmRo0nDYR7Id4ham5dvWwuhbcYLXFSE= github.com/aws/aws-sdk-go-v2/service/budgets v1.25.5/go.mod h1:suM5EabsWzXJCpawQ/fFxQxGSjSOQ8Rp9kMBZM82XQU= github.com/aws/aws-sdk-go-v2/service/chatbot v1.4.4 h1:sSfmh6DFJJEG0bfkJiImcZ3AUeatn3Jwo0yIb2VKRik= @@ -114,10 +114,10 @@ github.com/aws/aws-sdk-go-v2/service/cleanrooms v1.16.1 h1:TRDv5Ft6/qISkosTm3WKF github.com/aws/aws-sdk-go-v2/service/cleanrooms v1.16.1/go.mod h1:BIE36Xry2pkOoixRGPwlFn/L14MaCMIHpC+tB2BoTAA= github.com/aws/aws-sdk-go-v2/service/cloud9 v1.26.4 h1:P4UazpjbIwre5+GGo85WikWTk3idUnJD8sL8JysOEFg= github.com/aws/aws-sdk-go-v2/service/cloud9 v1.26.4/go.mod h1:ZdpNeT3X3x8iU4wdqaeYm8DYn0IZ3d/Krk8gXvbM2ko= -github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.20.4 h1:DXrXltI9XfD8ND/MZSfKJQ3et4f/4FBKn6Hv5frCeJ4= -github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.20.4/go.mod h1:r6W6g2+YsfTBfuvxRLvCf6xxlQRSoNTdRDGFX7noKu0= -github.com/aws/aws-sdk-go-v2/service/cloudformation v1.53.4 h1:QbMAN9s6cmAxQMTAbLmHj0a5mhwoZTL0eo91UaYLG4E= -github.com/aws/aws-sdk-go-v2/service/cloudformation v1.53.4/go.mod h1:y45SdA9v+dLlweaqwAQMoFeXqdRvgwevafa2X8iTqZQ= +github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.20.5 h1:Kl55Z27pxKA6XGjnnKwPK6Um+DRZK32ocIYm1g7IOUM= +github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.20.5/go.mod h1:r6W6g2+YsfTBfuvxRLvCf6xxlQRSoNTdRDGFX7noKu0= +github.com/aws/aws-sdk-go-v2/service/cloudformation v1.53.5 h1:YeTVIy7cJLeahs7K0jQGDGAd1YYND/to/z8N3kqZBhY= +github.com/aws/aws-sdk-go-v2/service/cloudformation v1.53.5/go.mod h1:y45SdA9v+dLlweaqwAQMoFeXqdRvgwevafa2X8iTqZQ= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.38.5 h1:t7ZIhyAbD9zDH7rzEuUIagnPz6dJRB8HesgygHUbpsc= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.38.5/go.mod h1:Jnkkf+olxCcacqhQIjY8BlG4JL2/ZsPLsiBh6xnNsu4= github.com/aws/aws-sdk-go-v2/service/cloudfrontkeyvaluestore v1.6.4 h1:Mj+ad+2ZCY70qK0Sy9AzV6eFq4N9S7/71kIL8rGVEmg= @@ -126,22 +126,22 @@ github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.25.3 h1:s8IUd1V3jEMun7mhrdLfo github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.25.3/go.mod h1:D4b92wbLiBEVPhUi/LctCv3eqcOucG4xSUc13rawcQs= github.com/aws/aws-sdk-go-v2/service/cloudsearch v1.24.4 h1:9u2EwGQVQuIqhnDoVeu6jDLWXU0yHc5HptB1ktqHTNo= github.com/aws/aws-sdk-go-v2/service/cloudsearch v1.24.4/go.mod h1:Ha79RvZ2XSlVL6RcC6dT6AtlseEiY1UnB0aGvJdmXIU= -github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.42.4 h1:6mVIkasY2pGtFQkX0Bjh0RMua0H1Px8p5vHLzGYpyMc= -github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.42.4/go.mod h1:/+sRHIT00VCsc4kPTtSFoQab044bx72J3Nbp9rH9orA= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.40.4 h1:dl+oQSMPrYCu7sdH/aZRvOplO49dI5KB9FzT+aVebKY= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.40.4/go.mod h1:maEDlnDRdhsc0xrUljh3dUJbej11AHz+VTQJsNw1QmE= -github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.37.4 h1:sVI7RVQ7ryIav3SwVBvdBzUz31hcQVRMiXFp/D/UTOk= -github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.37.4/go.mod h1:K27H8p8ZmsntKSSC8det8LuT5WahXoJ4vZqlWwKTRaM= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.42.5 h1:M173nCC5U4dTsUTxNbxNiyFq20LB33dtXkVbo8G2BP8= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.42.5/go.mod h1:/+sRHIT00VCsc4kPTtSFoQab044bx72J3Nbp9rH9orA= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.40.5 h1:/YvqO1j75i4leoV+Z3a5s/dAlEszf2wTKBW8jc3Gd4s= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.40.5/go.mod h1:maEDlnDRdhsc0xrUljh3dUJbej11AHz+VTQJsNw1QmE= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.37.5 h1:cQpWa19MrnwPcHQfDjLy6GJLo6lpgbMNix4pt5zLuK0= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.37.5/go.mod h1:K27H8p8ZmsntKSSC8det8LuT5WahXoJ4vZqlWwKTRaM= github.com/aws/aws-sdk-go-v2/service/codeartifact v1.30.4 h1:zqbJalPHJqn9NBns+i9eHUpt5OERttgDrzAoAsQqE04= github.com/aws/aws-sdk-go-v2/service/codeartifact v1.30.4/go.mod h1:oYja70TBh+q04+TN5OB8yj7Y9/k65xa3VxliP4ag3e4= -github.com/aws/aws-sdk-go-v2/service/codebuild v1.42.0 h1:zPqVjrBU2oZiGGyo/ouGqGE7jko7JoPfNBLsmixmi2E= -github.com/aws/aws-sdk-go-v2/service/codebuild v1.42.0/go.mod h1:M5AlmELOl+c+QvNOtcjYAy6pLoCAWk9AWAJoijf50N4= +github.com/aws/aws-sdk-go-v2/service/codebuild v1.42.1 h1:D727sWkETfr5hJafxhPB9+T8h8ka/ax9gVB3gTaiZz8= +github.com/aws/aws-sdk-go-v2/service/codebuild v1.42.1/go.mod h1:M5AlmELOl+c+QvNOtcjYAy6pLoCAWk9AWAJoijf50N4= github.com/aws/aws-sdk-go-v2/service/codecatalyst v1.15.4 h1:MPfnaWtfyb6puC5qribrdzmEzIAmlXn4BzcA1Gs7bLg= github.com/aws/aws-sdk-go-v2/service/codecatalyst v1.15.4/go.mod h1:3FL8cUHMp2BRCb7tXAhAViSYMMfMymFqEoflzpolgXU= github.com/aws/aws-sdk-go-v2/service/codecommit v1.25.1 h1:mOOALIM4JzhYkq3voCBbmZqmyEVEhHsfasMTbVxLkNs= github.com/aws/aws-sdk-go-v2/service/codecommit v1.25.1/go.mod h1:6zf5j3mIUXKM0s2iz5ttR2Qwq+o47D0jotpAyaKgZRA= -github.com/aws/aws-sdk-go-v2/service/codedeploy v1.27.4 h1:MVX41GBkdLFuq+oMfVQhLhriP57TFI09VAuSJkwTAcs= -github.com/aws/aws-sdk-go-v2/service/codedeploy v1.27.4/go.mod h1:BaUzjsBCB2ZbLQvH2x5ixq748bz288dedHYgG1Qwac8= +github.com/aws/aws-sdk-go-v2/service/codedeploy v1.27.5 h1:x1fvCk5PckPxL5fC1MJr3kRXK/2Xuq2oyZJl0zjrtLY= +github.com/aws/aws-sdk-go-v2/service/codedeploy v1.27.5/go.mod h1:BaUzjsBCB2ZbLQvH2x5ixq748bz288dedHYgG1Qwac8= github.com/aws/aws-sdk-go-v2/service/codeguruprofiler v1.22.4 h1:OGN+raxbAM+DAoUbjBSw1wWAzlw6Te6u57xVBBBuYUk= github.com/aws/aws-sdk-go-v2/service/codeguruprofiler v1.22.4/go.mod h1:FvrBwe9Y9jMEYK0i3uc/KIYUIb6PPEcJP8E6aibp70A= github.com/aws/aws-sdk-go-v2/service/codegurureviewer v1.27.4 h1:IL4odDPoYEDrDEz7UgDEt0nX8jfygsSIq2LOCldbN00= @@ -160,8 +160,8 @@ github.com/aws/aws-sdk-go-v2/service/comprehend v1.33.4 h1:XN5oTdsinlP0pm7+1UJDZ github.com/aws/aws-sdk-go-v2/service/comprehend v1.33.4/go.mod h1:w6DEUruPElD9u/sNIo8E+mdsi+ptoX0B5rMBl5QYu6o= github.com/aws/aws-sdk-go-v2/service/computeoptimizer v1.37.5 h1:0Ch7C38oQN+Jwd6VkxUjmJDfJPsRr3qiEW0UqOYhGiY= github.com/aws/aws-sdk-go-v2/service/computeoptimizer v1.37.5/go.mod h1:+X0pZ4zLSCZNlIYyFeg0d+SKhWFvISEPMgGJzFL6K3I= -github.com/aws/aws-sdk-go-v2/service/configservice v1.48.4 h1:SFNBg0ijUqerKuU17/YP6SQJWGLWRdHPnfs+O+9xoB8= -github.com/aws/aws-sdk-go-v2/service/configservice v1.48.4/go.mod h1:TmIgrBzx07j8zIlyVm4G1ynCQ0EAHbIB3sV+wHF4n30= +github.com/aws/aws-sdk-go-v2/service/configservice v1.48.5 h1:I2+CJ/0oYDHbNE/KR74E4ovre9P7Iy7pEz7zt9OIoKM= +github.com/aws/aws-sdk-go-v2/service/configservice v1.48.5/go.mod h1:TmIgrBzx07j8zIlyVm4G1ynCQ0EAHbIB3sV+wHF4n30= github.com/aws/aws-sdk-go-v2/service/connect v1.107.1 h1:rN8zmpLByJYKabn2r3qK0PMqOn3wxcKUdvHuvuqArdU= github.com/aws/aws-sdk-go-v2/service/connect v1.107.1/go.mod h1:BhQ5ItE0siEuYTP1gtaeQR2RClHE7IflOutRElug85E= github.com/aws/aws-sdk-go-v2/service/connectcases v1.19.4 h1:Qsn7LWzCFpwzjQ+YbHTnzV0zT03eEk1qAWgzrJ1kzDM= @@ -176,18 +176,18 @@ github.com/aws/aws-sdk-go-v2/service/costoptimizationhub v1.8.1 h1:Tn0hZIhVsVzMR github.com/aws/aws-sdk-go-v2/service/costoptimizationhub v1.8.1/go.mod h1:mSktTnKmJrNlAOxo9XMTuyZZgNtsRHiZFlCDtr0Cjug= github.com/aws/aws-sdk-go-v2/service/customerprofiles v1.39.4 h1:9EjSqpadafgsOJ+9IKeJfGHRJmXwtig1vrmDn7OGYl0= github.com/aws/aws-sdk-go-v2/service/customerprofiles v1.39.4/go.mod h1:8Pk+xY6CaUw3WKfykOFbBshmwWB5AYb1rXy54AExBzE= -github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.40.4 h1:9HagIn3jN6vhEz45xhnoCk75W+/6e4kxPi9S3tlYX3c= -github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.40.4/go.mod h1:qAh0WHqAis6yrT4nbIfSXeK1+i9+q0quWZFM7u2zcJ4= +github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.40.5 h1:ipl/oeBAF3TVauTx48yYMjU3cvaKZtfaBZfMSV/hEPQ= +github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.40.5/go.mod h1:qAh0WHqAis6yrT4nbIfSXeK1+i9+q0quWZFM7u2zcJ4= github.com/aws/aws-sdk-go-v2/service/databrew v1.31.4 h1:46F63DU425j0LtKALaYPvJGwUXCbXLGL3OwC82+ftP4= github.com/aws/aws-sdk-go-v2/service/databrew v1.31.4/go.mod h1:LcvdT10LOR5jsGhA+V3XelQOaJTbdiIT2AHKZzKG4/Q= github.com/aws/aws-sdk-go-v2/service/dataexchange v1.30.4 h1:lxty/0cqjBNTyXgMYBmqTzHcEXFrwYs6p6P+sTv2TUo= github.com/aws/aws-sdk-go-v2/service/dataexchange v1.30.4/go.mod h1:LDiUccKENw8Dqp6pRAnTff4VL5NOJKUWxK8XdgDeV6E= github.com/aws/aws-sdk-go-v2/service/datapipeline v1.23.4 h1:s7mM86bIZ5M7Pbvaah+ULpf8sXfhTo6tVTEXQXlHJR8= github.com/aws/aws-sdk-go-v2/service/datapipeline v1.23.4/go.mod h1:pHvGsW093b+jkdSoAbT+gA9nt6q1pNy8Ru2vsfaN1wk= -github.com/aws/aws-sdk-go-v2/service/datasync v1.40.4 h1:zqXdKVbWOp/gt9/P/45OLqQm4F1YUWRf1gSh12JBIBQ= -github.com/aws/aws-sdk-go-v2/service/datasync v1.40.4/go.mod h1:h0i3yaI4wcw8Oh2L2b1wtObPsebxt2EeMdP6XbIZtJU= -github.com/aws/aws-sdk-go-v2/service/datazone v1.17.1 h1:N7O3bi1PtoWHwl24P+Jzp08D4//nTAJOhD3tvdRdxys= -github.com/aws/aws-sdk-go-v2/service/datazone v1.17.1/go.mod h1:gLG/qM5isGCDBaAqYdBKjezrjDVT6v086DFbjNnNUus= +github.com/aws/aws-sdk-go-v2/service/datasync v1.40.5 h1:SrFqfu1mxbxu7ghEeTbGeeFYGf4Q+R8JdfMklFscTRg= +github.com/aws/aws-sdk-go-v2/service/datasync v1.40.5/go.mod h1:h0i3yaI4wcw8Oh2L2b1wtObPsebxt2EeMdP6XbIZtJU= +github.com/aws/aws-sdk-go-v2/service/datazone v1.17.2 h1:nrSYP5Wyk0FYjYlGUJZhoZJX4Foe00sB0csDYZ8+yYM= +github.com/aws/aws-sdk-go-v2/service/datazone v1.17.2/go.mod h1:gLG/qM5isGCDBaAqYdBKjezrjDVT6v086DFbjNnNUus= github.com/aws/aws-sdk-go-v2/service/dax v1.21.5 h1:DplHNGO6Em5GoFhu6kZsYbPOjcGhAGKWVBxRnv2WGi0= github.com/aws/aws-sdk-go-v2/service/dax v1.21.5/go.mod h1:SEzUZ4N5NEF9868UCBD5FCnaUDrLoEnMciJljIQmb8I= github.com/aws/aws-sdk-go-v2/service/detective v1.29.4 h1:LJb8MCom/LDZoDVIZ+uTkViXXFE7I893q/TgI3+FnII= @@ -196,58 +196,58 @@ github.com/aws/aws-sdk-go-v2/service/devicefarm v1.25.3 h1:32bbsAHr1rdar47uJdIzl github.com/aws/aws-sdk-go-v2/service/devicefarm v1.25.3/go.mod h1:26/n41x24OUdF+VLuwMxhPl31vD9RojMeLdMNZyed3o= github.com/aws/aws-sdk-go-v2/service/devopsguru v1.32.4 h1:o9afQQoma39xoywQVujTpcjrwe2+RDnv3JxJan2nwao= github.com/aws/aws-sdk-go-v2/service/devopsguru v1.32.4/go.mod h1:4Bmv1oe9qPHS1ZQ2JWEcnwnXWcKhFoCbGm/8s8vMzJ8= -github.com/aws/aws-sdk-go-v2/service/directconnect v1.27.6 h1:X4aC2lLOYhrlL+I3Gm8wD1ssljfU23K9S2TxGg+74OI= -github.com/aws/aws-sdk-go-v2/service/directconnect v1.27.6/go.mod h1:b2qLEkaXQgQkC9UWlhfCBPTaPDvnjv/TY5JWDyUCtps= +github.com/aws/aws-sdk-go-v2/service/directconnect v1.27.7 h1:e2gXkVtS/k7P4Z1RNQ9DhJpJn2bmzx6QMf/LuMNRKgE= +github.com/aws/aws-sdk-go-v2/service/directconnect v1.27.7/go.mod h1:b2qLEkaXQgQkC9UWlhfCBPTaPDvnjv/TY5JWDyUCtps= github.com/aws/aws-sdk-go-v2/service/directoryservice v1.27.4 h1:ox2+AKqwzfaB9lvaO5qse9fiEvIVBJvcCcvTKS7c3KU= github.com/aws/aws-sdk-go-v2/service/directoryservice v1.27.4/go.mod h1:N8l9k6ElY3Y948ET7gsGYfqSYhcAOfolzYmQdSg8THk= -github.com/aws/aws-sdk-go-v2/service/dlm v1.26.4 h1:yy7Y5+j+trB1T8uQxM+1g/jEoXPMCyOqxIVAUAbHKH0= -github.com/aws/aws-sdk-go-v2/service/dlm v1.26.4/go.mod h1:9RM2RVlqmhlGWOvabXaTqKEYxWYMaapsm2kRUJqju2I= -github.com/aws/aws-sdk-go-v2/service/docdb v1.37.0 h1:PDNOlWFXwsQGJYIdxp5Em5tOayA0IjwyAAL1MLaZer0= -github.com/aws/aws-sdk-go-v2/service/docdb v1.37.0/go.mod h1:bDONknhcJ0wREMHzTw/kaE+lVaCBQSuH248NVHjvmZg= +github.com/aws/aws-sdk-go-v2/service/dlm v1.26.5 h1:F+p3UASv4RTNWc7cBhdKJ3bhxGD9er5FT3/PdYz1kCA= +github.com/aws/aws-sdk-go-v2/service/dlm v1.26.5/go.mod h1:9RM2RVlqmhlGWOvabXaTqKEYxWYMaapsm2kRUJqju2I= +github.com/aws/aws-sdk-go-v2/service/docdb v1.37.1 h1:cVaY+WUpp2R/bTZffQjfsw66ymmWty29b3LKPLmBqXE= +github.com/aws/aws-sdk-go-v2/service/docdb v1.37.1/go.mod h1:bDONknhcJ0wREMHzTw/kaE+lVaCBQSuH248NVHjvmZg= github.com/aws/aws-sdk-go-v2/service/docdbelastic v1.11.4 h1:NrPkWTcgk6nKOUBMNryJeI8AENZmWXeJVb8g9A3Enm4= github.com/aws/aws-sdk-go-v2/service/docdbelastic v1.11.4/go.mod h1:f4jPGrPClbLTF4rwjGZ2Lfx+ETG6gU2j8m4zGNRGArA= github.com/aws/aws-sdk-go-v2/service/drs v1.28.4 h1:81aZMHBglrjRRcXiF/PNa5zQrHwAQXNU2qDaKDsPexA= github.com/aws/aws-sdk-go-v2/service/drs v1.28.4/go.mod h1:0jA7cK0TQBureDXRvNrNYHOImf+WOK9X1rBtDK5znxQ= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.5 h1:Cm77yt+/CV7A6DglkENsWA3H1hq8+4ItJnFKrhxHkvg= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.5/go.mod h1:s2fYaueBuCnwv1XQn6T8TfShxJWusv5tWPMcL+GY6+g= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.6 h1:LKZuRTlh8RszjuWcUwEDvCGwjx5olHPp6ZOepyZV5p8= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.6/go.mod h1:s2fYaueBuCnwv1XQn6T8TfShxJWusv5tWPMcL+GY6+g= github.com/aws/aws-sdk-go-v2/service/ec2 v1.176.0 h1:fWhkSvaQqa5eWiRwBw10FUnk1YatAQ9We4GdGxKiCtg= github.com/aws/aws-sdk-go-v2/service/ec2 v1.176.0/go.mod h1:ISODge3zgdwOEa4Ou6WM9PKbxJWJ15DYKnr2bfmCAIA= -github.com/aws/aws-sdk-go-v2/service/ecr v1.32.1 h1:PxM8EHsv1sd9eWGamMQCvqBEjxytK5kAwjrxlfG3tac= -github.com/aws/aws-sdk-go-v2/service/ecr v1.32.1/go.mod h1:kdk+WJbHcGVbIlRQfSrKyuKkbWDdD8I9NScyS5vZ8eQ= +github.com/aws/aws-sdk-go-v2/service/ecr v1.32.2 h1:2RjzMZp/8PXJUMqiKkDSp7RVj6inF5DpVel35THjV+I= +github.com/aws/aws-sdk-go-v2/service/ecr v1.32.2/go.mod h1:kdk+WJbHcGVbIlRQfSrKyuKkbWDdD8I9NScyS5vZ8eQ= github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.25.4 h1:VjvjAxO4Hu/vRz7aNoMtnxi+WBRdyZPDAjBZjrIwQVo= github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.25.4/go.mod h1:MaIyM8Niqa55SxzMACfiHVhC7xOr0wa9+pRcUWkGKV0= -github.com/aws/aws-sdk-go-v2/service/ecs v1.45.1 h1:3ZgHR32WOV1SWQVBDwsuOm4e69AKL1XMGuc1LyJjJ50= -github.com/aws/aws-sdk-go-v2/service/ecs v1.45.1/go.mod h1:er8WHbgZAl17Dmu41ifKmUrV7JPpiQnRc+XSrnu4qR8= +github.com/aws/aws-sdk-go-v2/service/ecs v1.45.2 h1:DSFxt4HBQjlgKNMyYdME9cbB11FFi7umpTGbqJaS9nw= +github.com/aws/aws-sdk-go-v2/service/ecs v1.45.2/go.mod h1:er8WHbgZAl17Dmu41ifKmUrV7JPpiQnRc+XSrnu4qR8= github.com/aws/aws-sdk-go-v2/service/efs v1.31.4 h1:uBcw1R0PusM+j1fYCaLeIFhqrDntEE1HcR/muOIUC00= github.com/aws/aws-sdk-go-v2/service/efs v1.31.4/go.mod h1:4scihofKQuQubaxzkeoX4t7YJ9AW2pnt4QKBwEtsMTI= -github.com/aws/aws-sdk-go-v2/service/eks v1.48.1 h1:KZ1GkevaklMvPxcqivG4UDwar3lqMSpbK9RpZowjMec= -github.com/aws/aws-sdk-go-v2/service/eks v1.48.1/go.mod h1:fff5mmwLCVxyXCojYjPY34sUGvWtXCD325yRL5qHAVs= -github.com/aws/aws-sdk-go-v2/service/elasticache v1.40.6 h1:P1ogcWCB8yIB0k6+2CYYL+8ml1tSvYQWUeZXVqBrkR0= -github.com/aws/aws-sdk-go-v2/service/elasticache v1.40.6/go.mod h1:8Fz2FIrfqAq4KAhs20vraNyG4wzPheq8EFCBb9Lpkqs= +github.com/aws/aws-sdk-go-v2/service/eks v1.48.2 h1:EFjJfHrl7/2qh/ZawUXtl9juOPAUUOTFDLOmov5KSgM= +github.com/aws/aws-sdk-go-v2/service/eks v1.48.2/go.mod h1:fff5mmwLCVxyXCojYjPY34sUGvWtXCD325yRL5qHAVs= +github.com/aws/aws-sdk-go-v2/service/elasticache v1.40.7 h1:Ea1/qjiNAz8mxw1IGDNBj3SvPI9DQcofPGQCDhcx1l8= +github.com/aws/aws-sdk-go-v2/service/elasticache v1.40.7/go.mod h1:8Fz2FIrfqAq4KAhs20vraNyG4wzPheq8EFCBb9Lpkqs= github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.26.3 h1:EpsrOsTMEL3dxOujbZEHrZh9OCK52jU2fambAqBcYBA= github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.26.3/go.mod h1:zfn0j3G+U6N+HZBFgIrtMZhFRy1T4d0NoutDzH8EsHI= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.26.4 h1:m+rMj7WOFCfc/v+N2X2/LBngi9+I9vhatWPnPTOmwo8= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.26.4/go.mod h1:LmgiPApGNIhqMYvqutZx8OZp/ia8Dzp89BaqH8TaQQ8= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.34.1 h1:kGMwyO/8QEbcE5s9hnprQg82Bo0U5iHkcqFtQm5FODg= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.34.1/go.mod h1:rdgCuor2mAOU7LhpD7tO3TPl7BACCY4PzM9N0jnnHyo= -github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.30.4 h1:f1HBTmA4yFu1yYd2TtgEXNKLN7D1xGrrEyE6JL5HzHc= -github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.30.4/go.mod h1:YqwsImPCrZ8Ay4V/YIqASX80JIfpaRp8zye3e8JU8UU= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.26.5 h1:DjOizZWhTjae9Qc4Dln6yle4Bb+CtVWQVS9cpAyE1sg= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.26.5/go.mod h1:LmgiPApGNIhqMYvqutZx8OZp/ia8Dzp89BaqH8TaQQ8= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.34.2 h1:pWaVzH7OFh4MmHTjIGBNRTbFauJDVpIaRTtGF1BEq2o= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.34.2/go.mod h1:rdgCuor2mAOU7LhpD7tO3TPl7BACCY4PzM9N0jnnHyo= +github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.30.5 h1:doJDRX17qdP/W93+FmW5zPj2vB9yWIojvqtOcK5CNnE= +github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.30.5/go.mod h1:YqwsImPCrZ8Ay4V/YIqASX80JIfpaRp8zye3e8JU8UU= github.com/aws/aws-sdk-go-v2/service/elastictranscoder v1.25.4 h1:oqcQPG5DC3KSHYtvU9IAGcx8m0bv/E1/N+axNTU8XBQ= github.com/aws/aws-sdk-go-v2/service/elastictranscoder v1.25.4/go.mod h1:vrCOclUVPrk9dUIy1jPS4EE3oTIMy41essKbVgDIOJc= -github.com/aws/aws-sdk-go-v2/service/emr v1.42.3 h1:ndpZbpeHezH1PvwyZPMfsQFwNsdOm1smePijmDHEYiQ= -github.com/aws/aws-sdk-go-v2/service/emr v1.42.3/go.mod h1:b5rw8jAiS1iQh/11s3kA/750pC0mnEfoOMRbrt3YwdM= -github.com/aws/aws-sdk-go-v2/service/emrcontainers v1.30.5 h1:cMTOHHfhnKH3vw2ktFHkl3wMHXkIuGKrmXq5kRl84aA= -github.com/aws/aws-sdk-go-v2/service/emrcontainers v1.30.5/go.mod h1:sdoSckikg3XGzZpkNn7/XFRJDj1qhzr0JRqE9t7GrVI= +github.com/aws/aws-sdk-go-v2/service/emr v1.42.4 h1:7CIO7fap0PFapVnvF3d3nJeWeFhi0aEj1M5m33uA8hk= +github.com/aws/aws-sdk-go-v2/service/emr v1.42.4/go.mod h1:b5rw8jAiS1iQh/11s3kA/750pC0mnEfoOMRbrt3YwdM= +github.com/aws/aws-sdk-go-v2/service/emrcontainers v1.31.0 h1:6RG0Vrxuq87tTgxzc0henW1jGX04QvNACHCTE13M18o= +github.com/aws/aws-sdk-go-v2/service/emrcontainers v1.31.0/go.mod h1:sdoSckikg3XGzZpkNn7/XFRJDj1qhzr0JRqE9t7GrVI= github.com/aws/aws-sdk-go-v2/service/emrserverless v1.23.4 h1:r3xbYSC/IVAC54eJNz9NSNItQYAEfE1fpyAd3xY+3oo= github.com/aws/aws-sdk-go-v2/service/emrserverless v1.23.4/go.mod h1:XudX9De0ob5VFmaVsph0WXw7omnOid6q8hW6YjT+xmE= -github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.4 h1:GWRTbj0tiFfk6lIwUcHv7F9bPdty0TGwr3ruK0jyBUc= -github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.4/go.mod h1:AudiowtxywCESLsT3fvGcAEEcN4l7nusiW2nZMaCo+g= +github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.5 h1:wL8V4pdudr0mHbZ/tj9YacfRak5klKz9omV0uXBt5Sk= +github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.5/go.mod h1:AudiowtxywCESLsT3fvGcAEEcN4l7nusiW2nZMaCo+g= github.com/aws/aws-sdk-go-v2/service/evidently v1.21.4 h1:feriNEUt2RPlVuVZwneOyIHvgHDXfb5aEe0BPvOhhjA= github.com/aws/aws-sdk-go-v2/service/evidently v1.21.4/go.mod h1:ihvSwcvyE0jUmVfeDxo4TMBsvZQSpuQmSi8WNFwgewU= github.com/aws/aws-sdk-go-v2/service/finspace v1.26.4 h1:+B3+oYV6P5XyE/r/n7as3DIEYFI2UgJpnvtemz5tNVI= github.com/aws/aws-sdk-go-v2/service/finspace v1.26.4/go.mod h1:MBYQlgoadm+2MlHRSEboBikXNZwc112vVh2vyKRei9A= -github.com/aws/aws-sdk-go-v2/service/firehose v1.32.1 h1:HNMNn+tfDWgZml26DIRJ2IZmBoa3Pf9Y1JRiuXiGUG8= -github.com/aws/aws-sdk-go-v2/service/firehose v1.32.1/go.mod h1:aEIXb5VUx5COGtVbhP8pe/Ulm0bQzxPbPmsVH5+Jog8= +github.com/aws/aws-sdk-go-v2/service/firehose v1.32.2 h1:BaLB1YvppB82w++nMzw0+CESCCW2vAPaLxRt0Zi06l8= +github.com/aws/aws-sdk-go-v2/service/firehose v1.32.2/go.mod h1:aEIXb5VUx5COGtVbhP8pe/Ulm0bQzxPbPmsVH5+Jog8= github.com/aws/aws-sdk-go-v2/service/fis v1.27.1 h1:bTpcI1WZYf82fqM+xTkZ3BL7Hqgg3v7h3KJhuPphWTc= github.com/aws/aws-sdk-go-v2/service/fis v1.27.1/go.mod h1:o7798u9XT3IvMK+42ZPTIjSAfnBfI+KSGkKScjqND+8= github.com/aws/aws-sdk-go-v2/service/fms v1.35.4 h1:UcpnExUV1/3dkWeCeRWEeayxJZaw/3igh+vq6NiCBi8= @@ -278,8 +278,8 @@ github.com/aws/aws-sdk-go-v2/service/identitystore v1.25.4 h1:icyZwij1BqzyW5yZGc github.com/aws/aws-sdk-go-v2/service/identitystore v1.25.4/go.mod h1:NPEyhoIDtRHby3oWpLFUdGrfbMwM8f/4u57VdtRdH8g= github.com/aws/aws-sdk-go-v2/service/inspector v1.23.4 h1:LMurtFmS0KLuSDNYiWZVmyaTmkbu5HJeJvySzoJ33XA= github.com/aws/aws-sdk-go-v2/service/inspector v1.23.4/go.mod h1:8sD0U1cNqtXjezRZoX35pR7ek1f2gvU+5YMawA+nP6o= -github.com/aws/aws-sdk-go-v2/service/inspector2 v1.29.0 h1:n9VLtNnW+zoL/nbCc4eg/ERa7A7b3ZUqfn9gAFYfd04= -github.com/aws/aws-sdk-go-v2/service/inspector2 v1.29.0/go.mod h1:4PRDAODr5QhbNtlhu0qaSiqAYnawLE7AxFkbUJ5VmQA= +github.com/aws/aws-sdk-go-v2/service/inspector2 v1.30.0 h1:fzthyIOA/ls15PJTvNuSStLYQh9yUB8Wln2IzKsH2ws= +github.com/aws/aws-sdk-go-v2/service/inspector2 v1.30.0/go.mod h1:4PRDAODr5QhbNtlhu0qaSiqAYnawLE7AxFkbUJ5VmQA= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4/go.mod h1:Vz1JQXliGcQktFTN/LN6uGppAIRoLBR2bMvIMP0gOjc= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 h1:GckUnpm4EJOAio1c8o25a+b3lVfwVzC9gnSBqiiNmZM= @@ -290,8 +290,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 h1:tJ5RnkHC github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18/go.mod h1:++NHzT+nAF7ZPrHPsA+ENvsXkOO8wEu+C6RXltAG4/c= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 h1:jg16PhLPUiHIj8zYIW6bqzeQSuHVEiWnGA0Brz5Xv2I= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16/go.mod h1:Uyk1zE1VVdsHSU7096h/rwnXDzOzYQVl+FNPhPw7ShY= -github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.4 h1:uEKMRTKNdS2ELDN3Kttfz7IFXanX0+T1sVE13mm/+Vk= -github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.4/go.mod h1:TfxNP+f4gWfHqxnXjHQx3ltEOjE+WBxC/K0cfyaP6K4= +github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.5 h1:PHRvcbXTWLtoZvsTxQ3PuoTJMz3s4hzmM4wuoN1AyVQ= +github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.5/go.mod h1:TfxNP+f4gWfHqxnXjHQx3ltEOjE+WBxC/K0cfyaP6K4= github.com/aws/aws-sdk-go-v2/service/iot v1.55.4 h1:kSWUXF8Bmqt7WA0TkQ/+rrGyNooDmQNno7EMwbRFbIs= github.com/aws/aws-sdk-go-v2/service/iot v1.55.4/go.mod h1:yutfNjkxEV9lNXKElY0h0C58gIBsEanE/w3Ommjx92w= github.com/aws/aws-sdk-go-v2/service/iotanalytics v1.24.4 h1:W7L9VJE5IyBewnGhqSF+kiK3RgL7cAXBbVIcO+bR/fI= @@ -310,20 +310,20 @@ github.com/aws/aws-sdk-go-v2/service/kendra v1.52.4 h1:9kH+n1+/qYj0CobsPKhkUkxXy github.com/aws/aws-sdk-go-v2/service/kendra v1.52.4/go.mod h1:AUVjCq/VBzeRwZ1Im+7vZUhzbp62+6c8CgoKIM4/52I= github.com/aws/aws-sdk-go-v2/service/keyspaces v1.12.4 h1:U6bdkrhFJgIAGAob4hUxca1z0tY7fHXMhGuTWzjckDM= github.com/aws/aws-sdk-go-v2/service/keyspaces v1.12.4/go.mod h1:PGidrVmU9AHcjWznXWXvFiqbe0UXm76/ZM7zK6IpzsI= -github.com/aws/aws-sdk-go-v2/service/kinesis v1.29.4 h1:Tu/EuXZH2pJD4Fcz1UmkLXcquc5xTvVLjhCQeBhTnQ4= -github.com/aws/aws-sdk-go-v2/service/kinesis v1.29.4/go.mod h1:pKTvEQz1PcNd+gKArVyeHpVM63AWnFqYyg07WAQQANQ= +github.com/aws/aws-sdk-go-v2/service/kinesis v1.29.5 h1:iirGMva2IXw4kcqsvuF+uc8ARweuVqoQJjzRZGaiV1E= +github.com/aws/aws-sdk-go-v2/service/kinesis v1.29.5/go.mod h1:pKTvEQz1PcNd+gKArVyeHpVM63AWnFqYyg07WAQQANQ= github.com/aws/aws-sdk-go-v2/service/kinesisanalytics v1.23.4 h1:yxySILn3hm1s8Ct+t9qMVaq2hSN+xiRNlZsofXhMw/o= github.com/aws/aws-sdk-go-v2/service/kinesisanalytics v1.23.4/go.mod h1:OgvIq7m7gzY2sBH++CIV1V7krAZBgJRRJ7MTW1FU0NQ= github.com/aws/aws-sdk-go-v2/service/kinesisanalyticsv2 v1.28.3 h1:w5xqARAaghK7j4r9JEUaprZP3PMZ6ugpX/BM0O6AWYo= github.com/aws/aws-sdk-go-v2/service/kinesisanalyticsv2 v1.28.3/go.mod h1:+Cs3ak0F/Dwib8XDDw1eFeLpSArW+qrGjXg/AFjgW20= github.com/aws/aws-sdk-go-v2/service/kinesisvideo v1.25.4 h1:tjkbOT23BfsZTHn96JOYMxxT/9sf5BtNfvIcWsVuk7M= github.com/aws/aws-sdk-go-v2/service/kinesisvideo v1.25.4/go.mod h1:cfZaiL9W37cK78XUMWmZB/Gaq54fRC9bqYsadOyY0VY= -github.com/aws/aws-sdk-go-v2/service/kms v1.35.4 h1:mG1MH6yPwT5gNEeBrhig3FHc4mK0QaZOXsmQUbphP6Y= -github.com/aws/aws-sdk-go-v2/service/kms v1.35.4/go.mod h1:A5CS0VRmxxj2YKYLCY08l/Zzbd01m6JZn0WzxgT1OCA= +github.com/aws/aws-sdk-go-v2/service/kms v1.35.5 h1:XUomV7SiclZl1QuXORdGcfFqHxEHET7rmNGtxTfNB+M= +github.com/aws/aws-sdk-go-v2/service/kms v1.35.5/go.mod h1:A5CS0VRmxxj2YKYLCY08l/Zzbd01m6JZn0WzxgT1OCA= github.com/aws/aws-sdk-go-v2/service/lakeformation v1.35.4 h1:KIYVcbLdEVB8L8NYG3xvSOqSnCRCORiYDMrI0cHj/T0= github.com/aws/aws-sdk-go-v2/service/lakeformation v1.35.4/go.mod h1:rc53HT3ic2CMOoxHrew0RLSTlGG69MbGTlhDV/zEvtc= -github.com/aws/aws-sdk-go-v2/service/lambda v1.58.0 h1:wOEkZI80JvZg4ir8Jlq/YyzEbLzb2SDkMItBUy6FD10= -github.com/aws/aws-sdk-go-v2/service/lambda v1.58.0/go.mod h1:19OJBUjzuycsyPiTi8Gxx17XJjsF9Ck/cQeDGvsiics= +github.com/aws/aws-sdk-go-v2/service/lambda v1.58.1 h1:AfTND9lcZ0i4QV0LwgiwonDbWm8YPr4iYJ28n/x+FAo= +github.com/aws/aws-sdk-go-v2/service/lambda v1.58.1/go.mod h1:19OJBUjzuycsyPiTi8Gxx17XJjsF9Ck/cQeDGvsiics= github.com/aws/aws-sdk-go-v2/service/launchwizard v1.6.4 h1:fsrhaoid0qqlvv6LCOMQfmxvk1Jc4uTyYu44PBNR6/8= github.com/aws/aws-sdk-go-v2/service/launchwizard v1.6.4/go.mod h1:QDUizvXGb8lXdbkNk6xsoDFjsPZomf5GU+TZlN45AVY= github.com/aws/aws-sdk-go-v2/service/lexmodelbuildingservice v1.26.4 h1:FzyfF9/Mpyz1MA0PeGM+vfc6gA7O8rGZ/kjByXYIazw= @@ -360,8 +360,8 @@ github.com/aws/aws-sdk-go-v2/service/mq v1.25.4 h1:UgMMxrhKx5jIEveuUZhmrkPYSGE0/ github.com/aws/aws-sdk-go-v2/service/mq v1.25.4/go.mod h1:Ybs/4mXgvtirfngZ4zpwLg2b3kjEN6D0MqLNoz5Q8V0= github.com/aws/aws-sdk-go-v2/service/mwaa v1.29.5 h1:RYt3Km7QVxs7b51FErHix4qhjI2RP7xjoG2BoxVTXaI= github.com/aws/aws-sdk-go-v2/service/mwaa v1.29.5/go.mod h1:RXA2l8NSnvZ6I4mP2gZxkMJuGDqE/fOTDQP0an3zFGU= -github.com/aws/aws-sdk-go-v2/service/neptune v1.33.4 h1:JmNfRNHnneLWLwKte6rBhV/WHvc5KPr52zGjefOBsHQ= -github.com/aws/aws-sdk-go-v2/service/neptune v1.33.4/go.mod h1:80/Yg9ovhmMth488NHpnPIp4l6Rw4+9+CoHrjuPxlyE= +github.com/aws/aws-sdk-go-v2/service/neptune v1.33.5 h1:lY0ZKbLG11a/vT8mgP+CDvGWFmsqC99o5u8fGY6DEV4= +github.com/aws/aws-sdk-go-v2/service/neptune v1.33.5/go.mod h1:80/Yg9ovhmMth488NHpnPIp4l6Rw4+9+CoHrjuPxlyE= github.com/aws/aws-sdk-go-v2/service/neptunegraph v1.11.1 h1:Gk7iJhJQEwqldrKpMBhBCaWnxji78/GKeBjCJ9E0ve0= github.com/aws/aws-sdk-go-v2/service/neptunegraph v1.11.1/go.mod h1:hnsmCvIWzyUk2RdWVSWnoHLwoKOQZToC9NoYsMagT3U= github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.41.1 h1:e1HnAPUIGkM1Eu4A5o83VQOp0MqWcW1BQXljHf8jCww= @@ -370,16 +370,16 @@ github.com/aws/aws-sdk-go-v2/service/networkmanager v1.29.4 h1:5LMCceliYKB9m3n2y github.com/aws/aws-sdk-go-v2/service/networkmanager v1.29.4/go.mod h1:cgdt9gLLpMm3ft6/MNTDmZ0pKPJa/sOPFkuWkyRQ9VY= github.com/aws/aws-sdk-go-v2/service/networkmonitor v1.5.4 h1:u/vDkh3lVqFHavOO2ujv5tJ3pdAwa88eJL6zxu0uR8Q= github.com/aws/aws-sdk-go-v2/service/networkmonitor v1.5.4/go.mod h1:kLZ+wCSQ04+zCjbymFTlNmlB78Mxi7dORmfbeChB7CY= -github.com/aws/aws-sdk-go-v2/service/oam v1.13.5 h1:51VYR5C0+/QEUrFURnwIGvT1eyiaKwnfQCoXVMRKtmg= -github.com/aws/aws-sdk-go-v2/service/oam v1.13.5/go.mod h1:dwn0suVbD6cdXDZQsEr5iYf4dhxDVr5wEAKSiCLSSQ8= -github.com/aws/aws-sdk-go-v2/service/opensearch v1.39.3 h1:EoXdh45m+CNUmP1tRFz+SD78qvsR4i5u7bFnMljgRV0= -github.com/aws/aws-sdk-go-v2/service/opensearch v1.39.3/go.mod h1:dt1En8oUmuPUz5AZjWi+fBeekG3O8WejKi1wgoafwNk= -github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.14.0 h1:gtYLTC9+xSRX0TKEEz1rYGx16P8f0LInx4O7j178WNo= -github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.14.0/go.mod h1:pQOhum5PBwXCSspA6bT4EZLhpawWF2aHTToUu/5vIBg= +github.com/aws/aws-sdk-go-v2/service/oam v1.13.6 h1:rY54ZNwelycmiSQ25kfJhJ+bH3EHFIkF0zGY370vya8= +github.com/aws/aws-sdk-go-v2/service/oam v1.13.6/go.mod h1:dwn0suVbD6cdXDZQsEr5iYf4dhxDVr5wEAKSiCLSSQ8= +github.com/aws/aws-sdk-go-v2/service/opensearch v1.39.4 h1:vjysXeUltnIdluOK7/zPxxM4FKM0/SA1bUwHuGAEZU8= +github.com/aws/aws-sdk-go-v2/service/opensearch v1.39.4/go.mod h1:dt1En8oUmuPUz5AZjWi+fBeekG3O8WejKi1wgoafwNk= +github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.14.1 h1:a7iXf42viBFboPZD+/Kz/318yu/kWXNMwHC9j9pjis0= +github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.14.1/go.mod h1:pQOhum5PBwXCSspA6bT4EZLhpawWF2aHTToUu/5vIBg= github.com/aws/aws-sdk-go-v2/service/opsworks v1.24.4 h1:2bzNoZZWJ8+lRIBfY/FSOdcRIfMYAae9DFwcYxIwD5w= github.com/aws/aws-sdk-go-v2/service/opsworks v1.24.4/go.mod h1:yjoW6GYtJ1dRtOth68jEL3gYgSXVJicc2Ljcjxt3s/4= -github.com/aws/aws-sdk-go-v2/service/organizations v1.30.3 h1:gYS53GRIaSesL04BlZA9MEBzDlENidWR/JDBXhZonFs= -github.com/aws/aws-sdk-go-v2/service/organizations v1.30.3/go.mod h1:qdJX3WZbuAan5dXCoinnJjuY1QERCpv3glXeI3+wbeA= +github.com/aws/aws-sdk-go-v2/service/organizations v1.31.0 h1:D+q5pWmlcuqISBcLIeeYFukvl33JgQr/1lfbQnrIvVk= +github.com/aws/aws-sdk-go-v2/service/organizations v1.31.0/go.mod h1:qdJX3WZbuAan5dXCoinnJjuY1QERCpv3glXeI3+wbeA= github.com/aws/aws-sdk-go-v2/service/osis v1.12.4 h1:D1+hSpaeBVydbHUc86o1Yv3EhOcM0CRazxOokfpC33g= github.com/aws/aws-sdk-go-v2/service/osis v1.12.4/go.mod h1:0MthgSZ1NbnrgPnmzoaW3gcEsrDIHwlM+sTD40C+2eQ= github.com/aws/aws-sdk-go-v2/service/outposts v1.42.1 h1:T6kre1roWWt69vi4zH/YHHBeNxyVKi7DRcvsAFqRcv4= @@ -396,18 +396,18 @@ github.com/aws/aws-sdk-go-v2/service/polly v1.42.4 h1:aFD49SdTdSj5Mqijyw9g3pkX8B github.com/aws/aws-sdk-go-v2/service/polly v1.42.4/go.mod h1:EBQG16GyTvSu5WRp7XF86TgUGZMxEemXRodXxoKwzhU= github.com/aws/aws-sdk-go-v2/service/pricing v1.30.4 h1:FTLZaannrPDlvD4/ZxL2fwUWh3uGSgVosJ58cCQ07fE= github.com/aws/aws-sdk-go-v2/service/pricing v1.30.4/go.mod h1:jpELsHJrG2Gy/Pc0FHd1s4PDQ7DdsyVLJXpjZz9F8y4= -github.com/aws/aws-sdk-go-v2/service/qbusiness v1.10.3 h1:W+ncQSLUP1MocKi2GMSbsdLT5HWkmC/P/2wuehcmIqY= -github.com/aws/aws-sdk-go-v2/service/qbusiness v1.10.3/go.mod h1:Pv7rG+8I3W5+tH3J9sUSTr1YSyppDfp6xpW4n39eUxM= +github.com/aws/aws-sdk-go-v2/service/qbusiness v1.11.0 h1:/7Rx0N5FBoj8hd4R8DsaPvSWFQMWYo0JYkzfLvXcm3c= +github.com/aws/aws-sdk-go-v2/service/qbusiness v1.11.0/go.mod h1:Pv7rG+8I3W5+tH3J9sUSTr1YSyppDfp6xpW4n39eUxM= github.com/aws/aws-sdk-go-v2/service/qldb v1.23.4 h1:71m+NvWv63AnrzLpLnLwKs6OlpeJ0g/y+IYInc/V3QI= github.com/aws/aws-sdk-go-v2/service/qldb v1.23.4/go.mod h1:E6pzF6rAtAfRz2IE1hRho83lQx17IUQGLCrfgS2+s6U= -github.com/aws/aws-sdk-go-v2/service/ram v1.27.4 h1:/Dq1qVV1GzFvjs5Lz9kE1d03XeiEI+JFzqHtwmnSAx8= -github.com/aws/aws-sdk-go-v2/service/ram v1.27.4/go.mod h1:TWkXQo8ew7pyPtytLlHIL8meywY2lOJk6QdC8zmBD/8= -github.com/aws/aws-sdk-go-v2/service/rbin v1.18.4 h1:oUAgSPugpGNhLsVruLMq7FBHq5DgQzokIh1xfgGB3Ro= -github.com/aws/aws-sdk-go-v2/service/rbin v1.18.4/go.mod h1:4FFWPDJJuUu9HeE5zO2DtmITnOnXScImuhEaQlpPWEY= -github.com/aws/aws-sdk-go-v2/service/rds v1.82.1 h1:4s+9AtQQGB5n0xMm0xRbIQOFoi6rrggMlFt8WwHcDvs= -github.com/aws/aws-sdk-go-v2/service/rds v1.82.1/go.mod h1:hfUZhydujCniydsJdzZ9bwzX6nUvbfnhhYQeFNREC2I= -github.com/aws/aws-sdk-go-v2/service/redshift v1.46.5 h1:2+q5D3ETSf+iikyY3y9wAcgeBl7OhwMr6sGNsFPSuiw= -github.com/aws/aws-sdk-go-v2/service/redshift v1.46.5/go.mod h1:ewgM3ybBFAedvhnzP5MqVUUopusCWk0BpacCQKZNge4= +github.com/aws/aws-sdk-go-v2/service/ram v1.27.5 h1:AEH+gEiuFOA4nOh+oWf9xmuddaHWQdGoeuYojaULOYQ= +github.com/aws/aws-sdk-go-v2/service/ram v1.27.5/go.mod h1:TWkXQo8ew7pyPtytLlHIL8meywY2lOJk6QdC8zmBD/8= +github.com/aws/aws-sdk-go-v2/service/rbin v1.18.5 h1:wnHzxJFWkNS+AjCcXlN4pFItrAS+tiNxuHJlIRdgJmk= +github.com/aws/aws-sdk-go-v2/service/rbin v1.18.5/go.mod h1:4FFWPDJJuUu9HeE5zO2DtmITnOnXScImuhEaQlpPWEY= +github.com/aws/aws-sdk-go-v2/service/rds v1.82.2 h1:kO/fQcueYZvuL5kPzTPQ503cKZj8jyBNg1MlnIqpFPg= +github.com/aws/aws-sdk-go-v2/service/rds v1.82.2/go.mod h1:hfUZhydujCniydsJdzZ9bwzX6nUvbfnhhYQeFNREC2I= +github.com/aws/aws-sdk-go-v2/service/redshift v1.46.6 h1:Fgq3jMHNYudXTvvqsGlmVDIl4CBYhkE8QvFEwqQXO9k= +github.com/aws/aws-sdk-go-v2/service/redshift v1.46.6/go.mod h1:ewgM3ybBFAedvhnzP5MqVUUopusCWk0BpacCQKZNge4= github.com/aws/aws-sdk-go-v2/service/redshiftdata v1.27.4 h1:3xIX2dSZqT4jw56itaL+pE/Byf7XNN27zMAWN1wN6QU= github.com/aws/aws-sdk-go-v2/service/redshiftdata v1.27.4/go.mod h1:C4qf7cVMEVAzocVdhne+xnrSNHCqBlqiDSqb95MEkls= github.com/aws/aws-sdk-go-v2/service/redshiftserverless v1.21.1 h1:LWLva+4Mvp8DfrcsbZs5OIi3eGKSKVeFCFF/7Fy/Yjk= @@ -418,14 +418,14 @@ github.com/aws/aws-sdk-go-v2/service/resiliencehub v1.24.1 h1:WqPlt/aLrtiy1pBiOx github.com/aws/aws-sdk-go-v2/service/resiliencehub v1.24.1/go.mod h1:zwLavE1e9LVWL7ipQnKkEwiMdoy7RsDIpKDxKrcXcZc= github.com/aws/aws-sdk-go-v2/service/resourceexplorer2 v1.12.4 h1:4WriI54AJNcwZ5/1Pv9FW/RA7ZSSiDyuKcB5Uhjv5w8= github.com/aws/aws-sdk-go-v2/service/resourceexplorer2 v1.12.4/go.mod h1:gTYtb5NQB1odCQC+4tJKsdqEIE8YK0UxIqeDGkGr1l8= -github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.24.4 h1:Y5HXLHlU6hAnXzvm9mdr3pxYKG5srAcJiJ5Xs9xv2VQ= -github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.24.4/go.mod h1:D9l849Ai7JGtu9/Bo2AG4PnNGrsUbUbCkL+DnS1xY+k= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.4 h1:ZNrtr5E45PPgq+sjGpX3FtzIFmhmeo0qzl+rtBECTgE= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.4/go.mod h1:XDlN4IONFWl3b9HSVfxYdFtUcZ7lofcrxU8mpJNGqJw= +github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.24.5 h1:H4JOfS7eP3HZdwlAbPih2/qPzCutHFf/zPiKYhuC7zU= +github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.24.5/go.mod h1:D9l849Ai7JGtu9/Bo2AG4PnNGrsUbUbCkL+DnS1xY+k= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.5 h1:b5Brlxqsj9tti4jEdgOZWKB4anmuu25XG/r1PkxoQt0= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.5/go.mod h1:XDlN4IONFWl3b9HSVfxYdFtUcZ7lofcrxU8mpJNGqJw= github.com/aws/aws-sdk-go-v2/service/rolesanywhere v1.14.1 h1:MbpIIxlZLEvaVBCs5Hz1S9WRrMLflJvs7weXfHb2j24= github.com/aws/aws-sdk-go-v2/service/rolesanywhere v1.14.1/go.mod h1:kRM2fTpo6FW8i7nbrp3naDtNdAhynDHGjE2ZVkUVnqg= -github.com/aws/aws-sdk-go-v2/service/route53 v1.42.4 h1:GXV/Yuwu/hizxIXr3EAqDJdRdjya1i0kINoUdBBHdbQ= -github.com/aws/aws-sdk-go-v2/service/route53 v1.42.4/go.mod h1:QN7tFo/W8QjLCR6aPZqMZKaVQJiAp95r/g78x1LWtkA= +github.com/aws/aws-sdk-go-v2/service/route53 v1.43.0 h1:xtp7jye7KhWu4ptBs5yh1Vep0vLAGSNGmArOUp997DU= +github.com/aws/aws-sdk-go-v2/service/route53 v1.43.0/go.mod h1:QN7tFo/W8QjLCR6aPZqMZKaVQJiAp95r/g78x1LWtkA= github.com/aws/aws-sdk-go-v2/service/route53domains v1.25.4 h1:YCHWMRbaIyNUzhsFXSxW2aJ00WV6FUGzt2OtyE7RMyw= github.com/aws/aws-sdk-go-v2/service/route53domains v1.25.4/go.mod h1:WUxTIZlbeHcwisUsauu2ra7O2+s11PM8xRLffHzc1q4= github.com/aws/aws-sdk-go-v2/service/route53profiles v1.2.4 h1:pUDTeq2jOs5+oAIzvCIQH/fz8OM8JBxhUDckji5y590= @@ -434,14 +434,14 @@ github.com/aws/aws-sdk-go-v2/service/route53recoverycontrolconfig v1.23.4 h1:Sq4 github.com/aws/aws-sdk-go-v2/service/route53recoverycontrolconfig v1.23.4/go.mod h1:1Kde+Ct5pBapu9i7xzb8p4ktqOeB0wwVlmqgs+ifTAE= github.com/aws/aws-sdk-go-v2/service/route53recoveryreadiness v1.19.4 h1:25V/wRbTT5E0EPAclAM9qcwTrn8l687qqdeeCmee5eE= github.com/aws/aws-sdk-go-v2/service/route53recoveryreadiness v1.19.4/go.mod h1:f6aal+/ZIeGgPS96j0kkxLQvDPTvDGUCM2weyXvc44A= -github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.4 h1:YuGLHnF+el3VbFDDMGjtEblJSx03uG9VelRShPXWu28= -github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.4/go.mod h1:nYjNCxhMB3EnfqEZFTqFJ/SmT28TrobM4kx50RuI/ng= +github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.5 h1:nZG8Cwj/jTpZn/e+t4iHVfML8LTKyP6jp2/aGAq0WNk= +github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.5/go.mod h1:nYjNCxhMB3EnfqEZFTqFJ/SmT28TrobM4kx50RuI/ng= github.com/aws/aws-sdk-go-v2/service/rum v1.19.4 h1:FOIxk29IdEuDQ/OExisyB/j2Gs27+rErI7F2cWQOLv8= github.com/aws/aws-sdk-go-v2/service/rum v1.19.4/go.mod h1:bdprjbQtxZ1HgvXeDfVzw17CerK0+YCRlDiKGLXIsgU= -github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0 h1:2QXGJvG19QwqXUvgcdoCOZPyLuvZf8LiXPCN4P53TdI= -github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI= -github.com/aws/aws-sdk-go-v2/service/s3control v1.46.4 h1:w8i47heyQSv0gNy34TuW2/RJgizvFWUBi2tD6d/m5Ik= -github.com/aws/aws-sdk-go-v2/service/s3control v1.46.4/go.mod h1:X0UNddpS5rWWrPKEMGGnVPqeFiaHZWs276CrCLiCTQA= +github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1 h1:mx2ucgtv+MWzJesJY9Ig/8AFHgoE5FwLXwUVgW/FGdI= +github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI= +github.com/aws/aws-sdk-go-v2/service/s3control v1.46.5 h1:qVyCc8Fx/+BsNNkTOGqwD5Z74bLOXwqhium8RWu5P5g= +github.com/aws/aws-sdk-go-v2/service/s3control v1.46.5/go.mod h1:X0UNddpS5rWWrPKEMGGnVPqeFiaHZWs276CrCLiCTQA= github.com/aws/aws-sdk-go-v2/service/s3outposts v1.26.4 h1:hBa2bDiI88EpC+TzuUvEIZhFkkL2v/zHGBicA4yolVE= github.com/aws/aws-sdk-go-v2/service/s3outposts v1.26.4/go.mod h1:VrGFzeizVWk1GfmZVNj3Dctn1dxkyFIRQxQ3lnnFsG4= github.com/aws/aws-sdk-go-v2/service/sagemaker v1.154.0 h1:NDEbY45I7YFiSAW055YdE6fFoxmudl+jK/8qe//Bduk= @@ -450,8 +450,8 @@ github.com/aws/aws-sdk-go-v2/service/scheduler v1.10.4 h1:vh2sqeiHm0L9aatuSTSbo/ github.com/aws/aws-sdk-go-v2/service/scheduler v1.10.4/go.mod h1:m014BftQaUEsNk/6VMkqSj16cmUwAvgXHejhGDC46Jc= github.com/aws/aws-sdk-go-v2/service/schemas v1.26.4 h1:QwtdnU+lr5vvHqnbJ/qGXvAPwdLwYGL9mn2kbDOr+4E= github.com/aws/aws-sdk-go-v2/service/schemas v1.26.4/go.mod h1:f6adT2VvyhA+haZ1jJXGYaZyHIx55jrYcN7oRV6myRg= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.5 h1:UDXu9dqpCZYonj7poM4kFISjzTdWI0v3WUusM+w+Gfc= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.5/go.mod h1:5NPkI3RsTOhwz1CuG7VVSgJCm3CINKkoIaUbUZWQ67w= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.6 h1:3TZlWvCC813uhS1Z4fVTmBhg41OYUrgSlvXqIDDkurw= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.6/go.mod h1:5NPkI3RsTOhwz1CuG7VVSgJCm3CINKkoIaUbUZWQ67w= github.com/aws/aws-sdk-go-v2/service/securityhub v1.52.0 h1:FzO8SVzUET6wNc74bt/x8WkJXZoTrrdMyNcq2xXOhVM= github.com/aws/aws-sdk-go-v2/service/securityhub v1.52.0/go.mod h1:DSn4Os/A8w+uGnJI0LxL0+HFXKUsBKZNZLvtsE271H8= github.com/aws/aws-sdk-go-v2/service/securitylake v1.16.4 h1:8sFt3y2akVCYqKmOdElGFYT6fNHTMYWf8j/orE/T1PQ= @@ -462,26 +462,26 @@ github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.30.4 h1:i0J7/4cRSW1/tQsp9 github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.30.4/go.mod h1:PRd4P8yzjyCUfWIMmgiLS4/DgPfmjq76XoXOPGk/Cug= github.com/aws/aws-sdk-go-v2/service/servicecatalogappregistry v1.28.4 h1:BkZVxMM1eMCH/K+oilj/5DiYDKzcyUgPCbOsENflPlg= github.com/aws/aws-sdk-go-v2/service/servicecatalogappregistry v1.28.4/go.mod h1:h3aaCEFaMrY1+zUS2YCphaW2UZGTyZuWNNr7S4QEVno= -github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.4 h1:YEY+Y4Lf3TuFrw8keb8NZ5nsbo/YplxEgZWbqnDlq+Y= -github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.4/go.mod h1:5autx6GwAtQVv8S/qTwBKfxzAAwe8hOlzVuTtLdliVw= -github.com/aws/aws-sdk-go-v2/service/servicequotas v1.23.4 h1:d2hcQdhIWKhLfifd/FvgSs6gQvFke885SotzqvUf0Bw= -github.com/aws/aws-sdk-go-v2/service/servicequotas v1.23.4/go.mod h1:tMgth4UXYC4ExLwX/9STbRJCiP0vz3Ih3ei8iUHh76w= +github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.5 h1:z7nPig/pFU+TAAKouI51pCVQPEeQHZC2mZXSK+g0Av8= +github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.5/go.mod h1:5autx6GwAtQVv8S/qTwBKfxzAAwe8hOlzVuTtLdliVw= +github.com/aws/aws-sdk-go-v2/service/servicequotas v1.23.5 h1:8WnSXSla6Ot01IdiT2liXpWa7oWQniZx5zpNIljp8MY= +github.com/aws/aws-sdk-go-v2/service/servicequotas v1.23.5/go.mod h1:tMgth4UXYC4ExLwX/9STbRJCiP0vz3Ih3ei8iUHh76w= github.com/aws/aws-sdk-go-v2/service/ses v1.26.0 h1:k42jq8i0DbnPxr+URD58oZw/Esb93kzoSczfEYrPlw4= github.com/aws/aws-sdk-go-v2/service/ses v1.26.0/go.mod h1:6Ul/Ir8oOCsI3dFN0prULK9fvpxP+WTYmlHDkFzaAVA= github.com/aws/aws-sdk-go-v2/service/sesv2 v1.33.0 h1:xgp46CIfHVv0vj2+/NXZ5l5rNyuOt40JX/uOTo3f748= github.com/aws/aws-sdk-go-v2/service/sesv2 v1.33.0/go.mod h1:qVIFAGMTTDMumfHxKW8QoQJXvlY3hkfaxPONLHT3asY= -github.com/aws/aws-sdk-go-v2/service/sfn v1.30.1 h1:9nvLjqQWTrehdzgfdDuBMAbOcAwlolbhYE9htVVTPvM= -github.com/aws/aws-sdk-go-v2/service/sfn v1.30.1/go.mod h1:jIKXvGI0iFk5QXBW8FntPO/tqdmfC3OS0Z38twH9a08= +github.com/aws/aws-sdk-go-v2/service/sfn v1.30.2 h1:FO9wG1mXg1tb8iizrN5+t5NR2Tu5Mo+KJ7u2TlhWxPI= +github.com/aws/aws-sdk-go-v2/service/sfn v1.30.2/go.mod h1:jIKXvGI0iFk5QXBW8FntPO/tqdmfC3OS0Z38twH9a08= github.com/aws/aws-sdk-go-v2/service/shield v1.27.4 h1:zIe0kKPu8+AaY61HaNbj/wQd8vqUk+9rgcRjBcYOv6M= github.com/aws/aws-sdk-go-v2/service/shield v1.27.4/go.mod h1:FNcYLPvoSlKrkSMkF1lLHCtm57w/144AkbL7Bk39u9o= github.com/aws/aws-sdk-go-v2/service/signer v1.24.4 h1:M45uI6Xs717kXTlX34aYi4izTtT0P+WFxgUF0drYJvI= github.com/aws/aws-sdk-go-v2/service/signer v1.24.4/go.mod h1:e2eA2NfmOL2k7BDY4d+qOideIxsR0mwMx/4uMAD/Or0= -github.com/aws/aws-sdk-go-v2/service/sns v1.31.4 h1:Bwb1nTBy6jrLJgSlI+jLt27rjyS1Kg030X5yWPnTecI= -github.com/aws/aws-sdk-go-v2/service/sns v1.31.4/go.mod h1:wDacBq+NshhM8KhdysbM4wRFxVyghyj7AAI+l8+o9f0= -github.com/aws/aws-sdk-go-v2/service/sqs v1.34.4 h1:FXPO72iKC5YmYNEANltl763bUj8A6qT20wx8Jwvxlsw= -github.com/aws/aws-sdk-go-v2/service/sqs v1.34.4/go.mod h1:7idt3XszF6sE9WPS1GqZRiDJOxw4oPtlRBXodWnCGjU= -github.com/aws/aws-sdk-go-v2/service/ssm v1.52.5 h1:eY1n+pyBbgqRBRnpVUg0QguAGMWVLQp2n+SfjjOJuQI= -github.com/aws/aws-sdk-go-v2/service/ssm v1.52.5/go.mod h1:Bw2YSeqq/I4VyVs9JSfdT9ArqyAbQkJEwj13AVm0heg= +github.com/aws/aws-sdk-go-v2/service/sns v1.31.5 h1:q8R1hxwOHE4e6TInafToa8AHTLQpJrxWXYk7GINJoyw= +github.com/aws/aws-sdk-go-v2/service/sns v1.31.5/go.mod h1:wDacBq+NshhM8KhdysbM4wRFxVyghyj7AAI+l8+o9f0= +github.com/aws/aws-sdk-go-v2/service/sqs v1.34.5 h1:HYyVDOC2/PIg+3oBX1q0wtDU5kONki6lrgIG0afrBkY= +github.com/aws/aws-sdk-go-v2/service/sqs v1.34.5/go.mod h1:7idt3XszF6sE9WPS1GqZRiDJOxw4oPtlRBXodWnCGjU= +github.com/aws/aws-sdk-go-v2/service/ssm v1.52.6 h1:uvd3OF/3jt2csfs2xZ64NIOukDY/YJYZiHqT9vP3Mhg= +github.com/aws/aws-sdk-go-v2/service/ssm v1.52.6/go.mod h1:Bw2YSeqq/I4VyVs9JSfdT9ArqyAbQkJEwj13AVm0heg= github.com/aws/aws-sdk-go-v2/service/ssmcontacts v1.24.4 h1:VJC0D1rgwZEA7sI6B4e41TBdjKmAb/IiLKB5LsiHVw8= github.com/aws/aws-sdk-go-v2/service/ssmcontacts v1.24.4/go.mod h1:3gYJPqrnwX7Tp5dz1J/ggR6iPrAVlC27mXQ8DLXsu3E= github.com/aws/aws-sdk-go-v2/service/ssmincidents v1.32.4 h1:9F1Hm3ZDFiLdVHztKWmmrb8LOaXn0HtY9YyUuPmoCmU= @@ -496,12 +496,12 @@ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 h1:SKvPgvdvmiTWoi0GAJ7AsJfO github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5/go.mod h1:20sz31hv/WsPa3HhU3hfrIet2kxM4Pe0r20eBZ20Tac= github.com/aws/aws-sdk-go-v2/service/storagegateway v1.31.4 h1:1jVRBgclr7cpeLiIs348kKXobvVjdlbHfVYM40Y/Bv0= github.com/aws/aws-sdk-go-v2/service/storagegateway v1.31.4/go.mod h1:WmqcvGd10eSVYIjcQYmBmk/tcIoCaxGtUHA1J1hSZvQ= -github.com/aws/aws-sdk-go-v2/service/sts v1.30.4 h1:iAckBT2OeEK/kBDyN/jDtpEExhjeeA/Im2q4X0rJZT8= -github.com/aws/aws-sdk-go-v2/service/sts v1.30.4/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0= -github.com/aws/aws-sdk-go-v2/service/swf v1.25.4 h1:TZ8i30MwDZybhMTTtSR6MfDRmq6IC1g0Yd+uYIu+U+M= -github.com/aws/aws-sdk-go-v2/service/swf v1.25.4/go.mod h1:friMlcMGTLFKOYtghIFILFGt/qXHugU3LVyb+ZZoUto= -github.com/aws/aws-sdk-go-v2/service/synthetics v1.26.4 h1:fLZX6D2oTLqHqtq8D7d2zXhTB47c62Vb3BpFD+bdX8I= -github.com/aws/aws-sdk-go-v2/service/synthetics v1.26.4/go.mod h1:7e8prP5gp4ppMRhWyxI6IS6HcdSYKUeCMSP0lCvc2Mc= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 h1:OMsEmCyz2i89XwRwPouAJvhj81wINh+4UK+k/0Yo/q8= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.5/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0= +github.com/aws/aws-sdk-go-v2/service/swf v1.25.5 h1:9CG8ZuU+9uGsQwlQ4z+R2VbWzahAVGr3aXMAg5EkMS0= +github.com/aws/aws-sdk-go-v2/service/swf v1.25.5/go.mod h1:friMlcMGTLFKOYtghIFILFGt/qXHugU3LVyb+ZZoUto= +github.com/aws/aws-sdk-go-v2/service/synthetics v1.26.5 h1:sQTnsqwZHFz+6Q1lNj30/xXIJg1OhgPLRRNVYY4w3NU= +github.com/aws/aws-sdk-go-v2/service/synthetics v1.26.5/go.mod h1:7e8prP5gp4ppMRhWyxI6IS6HcdSYKUeCMSP0lCvc2Mc= github.com/aws/aws-sdk-go-v2/service/timestreaminfluxdb v1.2.4 h1:fOMpu3sHr6ogDeIGA9RtyUJYhk8zftvRA5caPwSUy2c= github.com/aws/aws-sdk-go-v2/service/timestreaminfluxdb v1.2.4/go.mod h1:B90eVR/hml+ZWjDbFT6CuGWhDgDSDMUxdZXAhj7EdZM= github.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.27.4 h1:glNNLfVzW88jz83oPZ4gXndJL7VDDANHowCoJU673OU= @@ -528,8 +528,8 @@ github.com/aws/aws-sdk-go-v2/service/workspaces v1.45.1 h1:O2IZDp8Y+6ywBfIyBGMDl github.com/aws/aws-sdk-go-v2/service/workspaces v1.45.1/go.mod h1:NpECdAtx0GNmx6ANGHmgDxqV6LQq59cxs7lY7vUiLUY= github.com/aws/aws-sdk-go-v2/service/workspacesweb v1.21.4 h1:jzF1yA5OeQuHzuPgdNiQ7no4wWGJ7hnYlPelVloFrXg= github.com/aws/aws-sdk-go-v2/service/workspacesweb v1.21.4/go.mod h1:pS1ioSPDOAQ3c6BmkVxpVOaloLm6NbJ9Yvz5S3R+gP4= -github.com/aws/aws-sdk-go-v2/service/xray v1.27.4 h1:ybfrkoywYgvJj4RYUsQWdBlIXwa/ecmtybnEnYPgph8= -github.com/aws/aws-sdk-go-v2/service/xray v1.27.4/go.mod h1:dYbiZw60hQKk9dErFQ7t+OF+6qq6Vk9oazdnZxZhZSc= +github.com/aws/aws-sdk-go-v2/service/xray v1.27.5 h1:TYTsfyO/gub8V76TbPFURGuQP5FN5qNrVs9SNMuAPQM= +github.com/aws/aws-sdk-go-v2/service/xray v1.27.5/go.mod h1:dYbiZw60hQKk9dErFQ7t+OF+6qq6Vk9oazdnZxZhZSc= github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4= github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/beevik/etree v1.4.1 h1:PmQJDDYahBGNKDcpdX8uPy1xRCwoCGVUiW669MEirVI= diff --git a/internal/conns/awsclient_gen.go b/internal/conns/awsclient_gen.go index 9dd1c3492de..63c0a6d5271 100644 --- a/internal/conns/awsclient_gen.go +++ b/internal/conns/awsclient_gen.go @@ -241,7 +241,6 @@ import ( workspaces_sdkv2 "github.com/aws/aws-sdk-go-v2/service/workspaces" workspacesweb_sdkv2 "github.com/aws/aws-sdk-go-v2/service/workspacesweb" xray_sdkv2 "github.com/aws/aws-sdk-go-v2/service/xray" - emr_sdkv1 "github.com/aws/aws-sdk-go/service/emr" imagebuilder_sdkv1 "github.com/aws/aws-sdk-go/service/imagebuilder" quicksight_sdkv1 "github.com/aws/aws-sdk-go/service/quicksight" simpledb_sdkv1 "github.com/aws/aws-sdk-go/service/simpledb" @@ -609,10 +608,6 @@ func (c *AWSClient) ELBV2Client(ctx context.Context) *elasticloadbalancingv2_sdk return errs.Must(client[*elasticloadbalancingv2_sdkv2.Client](ctx, c, names.ELBV2, make(map[string]any))) } -func (c *AWSClient) EMRConn(ctx context.Context) *emr_sdkv1.EMR { - return errs.Must(conn[*emr_sdkv1.EMR](ctx, c, names.EMR, make(map[string]any))) -} - func (c *AWSClient) EMRClient(ctx context.Context) *emr_sdkv2.Client { return errs.Must(client[*emr_sdkv2.Client](ctx, c, names.EMR, make(map[string]any))) } diff --git a/internal/service/emr/block_public_access_configuration.go b/internal/service/emr/block_public_access_configuration.go index dd58c39bbf7..a5728e555dc 100644 --- a/internal/service/emr/block_public_access_configuration.go +++ b/internal/service/emr/block_public_access_configuration.go @@ -7,15 +7,15 @@ import ( "context" "log" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/emr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" - "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" - "github.com/hashicorp/terraform-provider-aws/names" ) // @SDKResource("aws_emr_block_public_access_configuration", name="Block Public Access Configuration") @@ -41,12 +41,12 @@ func resourceBlockPublicAccessConfiguration() *schema.Resource { ForceNew: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "min_range": { + "max_range": { Type: schema.TypeInt, Required: true, ValidateDiagFunc: validation.ToDiagFunc(validation.IsPortNumber), }, - "max_range": { + "min_range": { Type: schema.TypeInt, Required: true, ValidateDiagFunc: validation.ToDiagFunc(validation.IsPortNumber), @@ -58,52 +58,52 @@ func resourceBlockPublicAccessConfiguration() *schema.Resource { } } -const ( - ResNameBlockPublicAccessConfiguration = "Block Public Access Configuration" - dummyIDBlockPublicAccessConfiguration = "emr-block-public-access-configuration" - defaultPermittedPublicSecurityGroupRulePort = 22 -) - func resourceBlockPublicAccessConfigurationCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics + conn := meta.(*conns.AWSClient).EMRClient(ctx) - conn := meta.(*conns.AWSClient).EMRConn(ctx) - - blockPublicAccessConfiguration := &emr.BlockPublicAccessConfiguration{} + blockPublicAccessConfiguration := &awstypes.BlockPublicAccessConfiguration{} blockPublicSecurityGroupRules := d.Get("block_public_security_group_rules") blockPublicAccessConfiguration.BlockPublicSecurityGroupRules = aws.Bool(blockPublicSecurityGroupRules.(bool)) if v, ok := d.GetOk("permitted_public_security_group_rule_range"); ok { - blockPublicAccessConfiguration.PermittedPublicSecurityGroupRuleRanges = expandPermittedPublicSecurityGroupRuleRanges(v.([]interface{})) + blockPublicAccessConfiguration.PermittedPublicSecurityGroupRuleRanges = expandPortRanges(v.([]interface{})) } - in := &emr.PutBlockPublicAccessConfigurationInput{ + input := &emr.PutBlockPublicAccessConfigurationInput{ BlockPublicAccessConfiguration: blockPublicAccessConfiguration, } - _, err := conn.PutBlockPublicAccessConfigurationWithContext(ctx, in) + _, err := conn.PutBlockPublicAccessConfiguration(ctx, input) + if err != nil { - return create.AppendDiagError(diags, names.EMR, create.ErrActionCreating, ResNameBlockPublicAccessConfiguration, d.Id(), err) + return sdkdiag.AppendErrorf(diags, "setting EMR Block Public Access Configuration: %s", err) } - d.SetId(dummyIDBlockPublicAccessConfiguration) + + d.SetId("emr-block-public-access-configuration") return append(diags, resourceBlockPublicAccessConfigurationRead(ctx, d, meta)...) } func resourceBlockPublicAccessConfigurationRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics + conn := meta.(*conns.AWSClient).EMRClient(ctx) - conn := meta.(*conns.AWSClient).EMRConn(ctx) + bpa, err := findBlockPublicAccessConfiguration(ctx, conn) - out, err := findBlockPublicAccessConfiguration(ctx, conn) + if !d.IsNewResource() && tfresource.NotFound(err) { + log.Printf("[WARN] EMR Block Public Access Configuration (%s) not found, removing from state", d.Id()) + d.SetId("") + return diags + } if err != nil { - return create.AppendDiagError(diags, names.EMR, create.ErrActionReading, ResNameBlockPublicAccessConfiguration, d.Id(), err) + return sdkdiag.AppendErrorf(diags, "reading EMR Block Public Access Configuration (%s): %s", d.Id(), err) } - d.Set("block_public_security_group_rules", out.BlockPublicAccessConfiguration.BlockPublicSecurityGroupRules) - if err := d.Set("permitted_public_security_group_rule_range", flattenPermittedPublicSecurityGroupRuleRanges(out.BlockPublicAccessConfiguration.PermittedPublicSecurityGroupRuleRanges)); err != nil { - return create.AppendDiagError(diags, names.EMR, create.ErrActionSetting, ResNameBlockPublicAccessConfiguration, d.Id(), err) + d.Set("block_public_security_group_rules", bpa.BlockPublicSecurityGroupRules) + if err := d.Set("permitted_public_security_group_rule_range", flattenPortRanges(bpa.PermittedPublicSecurityGroupRuleRanges)); err != nil { + return sdkdiag.AppendErrorf(diags, "setting permitted_public_security_group_rule_range: %s", err) } return diags @@ -111,27 +111,24 @@ func resourceBlockPublicAccessConfigurationRead(ctx context.Context, d *schema.R func resourceBlockPublicAccessConfigurationDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics + conn := meta.(*conns.AWSClient).EMRClient(ctx) - conn := meta.(*conns.AWSClient).EMRConn(ctx) - - log.Print("[INFO] Restoring EMR Block Public Access Configuration to default settings") - - blockPublicAccessConfiguration := findDefaultBlockPublicAccessConfiguration() - in := &emr.PutBlockPublicAccessConfigurationInput{ - BlockPublicAccessConfiguration: blockPublicAccessConfiguration, - } + log.Printf("[DEBUG] Deleting EMR Block Public Access Configuration: %s", d.Id()) + _, err := conn.PutBlockPublicAccessConfiguration(ctx, &emr.PutBlockPublicAccessConfigurationInput{ + BlockPublicAccessConfiguration: defaultBlockPublicAccessConfiguration(), + }) - _, err := conn.PutBlockPublicAccessConfigurationWithContext(ctx, in) if err != nil { - return create.AppendDiagError(diags, names.EMR, create.ErrActionDeleting, ResNameBlockPublicAccessConfiguration, d.Id(), err) + return sdkdiag.AppendErrorf(diags, "resetting EMR Block Public Access Configuration: %s", err) } return diags } -func findBlockPublicAccessConfiguration(ctx context.Context, conn *emr.EMR) (*emr.GetBlockPublicAccessConfigurationOutput, error) { +func findBlockPublicAccessConfiguration(ctx context.Context, conn *emr.Client) (*awstypes.BlockPublicAccessConfiguration, error) { input := &emr.GetBlockPublicAccessConfigurationInput{} - output, err := conn.GetBlockPublicAccessConfigurationWithContext(ctx, input) + output, err := conn.GetBlockPublicAccessConfiguration(ctx, input) + if err != nil { return nil, err } @@ -140,89 +137,73 @@ func findBlockPublicAccessConfiguration(ctx context.Context, conn *emr.EMR) (*em return nil, tfresource.NewEmptyResultError(input) } - return output, nil + return output.BlockPublicAccessConfiguration, nil } -func findDefaultBlockPublicAccessConfiguration() *emr.BlockPublicAccessConfiguration { - defaultPort := int64(defaultPermittedPublicSecurityGroupRulePort) - defaultPortPointer := &defaultPort - portRange := &emr.PortRange{MinRange: defaultPortPointer, MaxRange: defaultPortPointer} - permittedPublicSecurityGroupRuleRanges := []*emr.PortRange{portRange} - blockPublicAccessConfiguration := &emr.BlockPublicAccessConfiguration{ - BlockPublicSecurityGroupRules: aws.Bool(true), - PermittedPublicSecurityGroupRuleRanges: permittedPublicSecurityGroupRuleRanges, - } - return blockPublicAccessConfiguration -} +func defaultBlockPublicAccessConfiguration() *awstypes.BlockPublicAccessConfiguration { + const port = 22 -func flattenPermittedPublicSecurityGroupRuleRange(apiObject *emr.PortRange) map[string]interface{} { - if apiObject == nil { - return nil + return &awstypes.BlockPublicAccessConfiguration{ + BlockPublicSecurityGroupRules: aws.Bool(true), + PermittedPublicSecurityGroupRuleRanges: []awstypes.PortRange{{ + MinRange: aws.Int32(port), + MaxRange: aws.Int32(port), + }}, } +} - m := map[string]interface{}{} +func flattenPortRange(apiObject *awstypes.PortRange) map[string]interface{} { + tfMap := map[string]interface{}{} if v := apiObject.MinRange; v != nil { - m["min_range"] = aws.Int64Value(v) + tfMap["min_range"] = aws.ToInt32(v) } if v := apiObject.MaxRange; v != nil { - m["max_range"] = aws.Int64Value(v) + tfMap["max_range"] = aws.ToInt32(v) } - return m + return tfMap } -func flattenPermittedPublicSecurityGroupRuleRanges(apiObjects []*emr.PortRange) []interface{} { +func flattenPortRanges(apiObjects []awstypes.PortRange) []interface{} { if len(apiObjects) == 0 { return nil } - var l []interface{} + var tfMap []interface{} for _, apiObject := range apiObjects { - if apiObject == nil { - continue - } - - l = append(l, flattenPermittedPublicSecurityGroupRuleRange(apiObject)) + tfMap = append(tfMap, flattenPortRange(&apiObject)) } - return l + return tfMap } -func expandPermittedPublicSecurityGroupRuleRange(tfMap map[string]interface{}) *emr.PortRange { - a := &emr.PortRange{} - - a.MinRange = aws.Int64(int64(tfMap["min_range"].(int))) +func expandPortRange(tfMap map[string]interface{}) *awstypes.PortRange { + apiObject := &awstypes.PortRange{} - a.MaxRange = aws.Int64(int64(tfMap["max_range"].(int))) + apiObject.MinRange = aws.Int32(int32(tfMap["min_range"].(int))) + apiObject.MaxRange = aws.Int32(int32(tfMap["max_range"].(int))) - return a + return apiObject } -func expandPermittedPublicSecurityGroupRuleRanges(tfList []interface{}) []*emr.PortRange { +func expandPortRanges(tfList []interface{}) []awstypes.PortRange { if len(tfList) == 0 { return nil } - var s []*emr.PortRange - - for _, r := range tfList { - m, ok := r.(map[string]interface{}) + var apiObjects []awstypes.PortRange + for _, tfMapRaw := range tfList { + tfMap, ok := tfMapRaw.(map[string]interface{}) if !ok { continue } - a := expandPermittedPublicSecurityGroupRuleRange(m) - - if a == nil { - continue - } - - s = append(s, a) + apiObjects = append(apiObjects, *expandPortRange(tfMap)) } - return s + return apiObjects } diff --git a/internal/service/emr/block_public_access_configuration_test.go b/internal/service/emr/block_public_access_configuration_test.go index 204589e5611..67fb2e3d224 100644 --- a/internal/service/emr/block_public_access_configuration_test.go +++ b/internal/service/emr/block_public_access_configuration_test.go @@ -5,28 +5,41 @@ package emr_test import ( "context" - "errors" "fmt" "testing" - "github.com/aws/aws-sdk-go/service/emr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/emr" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/hashicorp/terraform-provider-aws/internal/acctest" "github.com/hashicorp/terraform-provider-aws/internal/conns" - "github.com/hashicorp/terraform-provider-aws/internal/create" tfemr "github.com/hashicorp/terraform-provider-aws/internal/service/emr" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) -func TestAccEMRBlockPublicAccessConfiguration_basic(t *testing.T) { +func TestAccEMRBlockPublicAccessConfiguration_serial(t *testing.T) { + t.Parallel() + + testCases := map[string]func(t *testing.T){ + acctest.CtBasic: testAccBlockPublicAccessConfiguration_basic, + acctest.CtDisappears: testAccBlockPublicAccessConfiguration_disappears, + "default": testAccBlockPublicAccessConfiguration_default, + "enabledMultiRange": testAccBlockPublicAccessConfiguration_enabledMultiRange, + } + + acctest.RunSerialTests1Level(t, testCases, 0) +} + +func testAccBlockPublicAccessConfiguration_basic(t *testing.T) { ctx := acctest.Context(t) resourceName := "aws_emr_block_public_access_configuration.test" resource.Test(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, emr.EndpointsID) + acctest.PreCheckPartitionHasService(t, names.EMREndpointID) testAccPreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.EMRServiceID), @@ -36,43 +49,41 @@ func TestAccEMRBlockPublicAccessConfiguration_basic(t *testing.T) { { Config: testAccBlockPublicAccessConfigurationConfig_basic(true), Check: resource.ComposeTestCheckFunc( - testAccCheckBlockPublicAccessConfigurationAttributes_enabledOnly(ctx, resourceName), + testAccCheckBlockPublicAccessConfigurationExists(ctx, resourceName), resource.TestCheckResourceAttr(resourceName, "block_public_security_group_rules", acctest.CtTrue), resource.TestCheckResourceAttr(resourceName, "permitted_public_security_group_rule_range.#", acctest.Ct0), ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{names.AttrApplyImmediately, "user"}, + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, }, { Config: testAccBlockPublicAccessConfigurationConfig_basic(false), Check: resource.ComposeTestCheckFunc( - testAccCheckBlockPublicAccessConfigurationAttributes_disabled(ctx, resourceName), + testAccCheckBlockPublicAccessConfigurationExists(ctx, resourceName), resource.TestCheckResourceAttr(resourceName, "block_public_security_group_rules", acctest.CtFalse), resource.TestCheckResourceAttr(resourceName, "permitted_public_security_group_rule_range.#", acctest.Ct0), ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{names.AttrApplyImmediately, "user"}, + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, }, }, }) } -func TestAccEMRBlockPublicAccessConfiguration_disappears(t *testing.T) { +func testAccBlockPublicAccessConfiguration_disappears(t *testing.T) { ctx := acctest.Context(t) resourceName := "aws_emr_block_public_access_configuration.test" resource.Test(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, emr.EndpointsID) + acctest.PreCheckPartitionHasService(t, names.EMREndpointID) testAccPreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.EMRServiceID), @@ -82,29 +93,23 @@ func TestAccEMRBlockPublicAccessConfiguration_disappears(t *testing.T) { { Config: testAccBlockPublicAccessConfigurationConfig_basic(true), Check: resource.ComposeTestCheckFunc( - testAccCheckBlockPublicAccessConfigurationAttributes_enabledOnly(ctx, resourceName), + testAccCheckBlockPublicAccessConfigurationExists(ctx, resourceName), acctest.CheckResourceDisappears(ctx, acctest.Provider, tfemr.ResourceBlockPublicAccessConfiguration(), resourceName), ), ExpectNonEmptyPlan: true, }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{names.AttrApplyImmediately, "user"}, - }, }, }) } -func TestAccEMRBlockPublicAccessConfiguration_default(t *testing.T) { +func testAccBlockPublicAccessConfiguration_default(t *testing.T) { ctx := acctest.Context(t) resourceName := "aws_emr_block_public_access_configuration.test" resource.Test(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, emr.EndpointsID) + acctest.PreCheckPartitionHasService(t, names.EMREndpointID) testAccPreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.EMRServiceID), @@ -114,7 +119,7 @@ func TestAccEMRBlockPublicAccessConfiguration_default(t *testing.T) { { Config: blockPublicAccessConfigurationConfig_defaultString, Check: resource.ComposeTestCheckFunc( - testAccCheckBlockPublicAccessConfigurationAttributes_default(ctx, resourceName), + testAccCheckBlockPublicAccessConfigurationExists(ctx, resourceName), resource.TestCheckResourceAttr(resourceName, "block_public_security_group_rules", acctest.CtTrue), resource.TestCheckResourceAttr(resourceName, "permitted_public_security_group_rule_range.#", acctest.Ct1), resource.TestCheckResourceAttr(resourceName, "permitted_public_security_group_rule_range.0.min_range", "22"), @@ -122,23 +127,22 @@ func TestAccEMRBlockPublicAccessConfiguration_default(t *testing.T) { ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{names.AttrApplyImmediately, "user"}, + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, }, }, }) } -func TestAccEMRBlockPublicAccessConfiguration_enabledMultiRange(t *testing.T) { +func testAccBlockPublicAccessConfiguration_enabledMultiRange(t *testing.T) { ctx := acctest.Context(t) resourceName := "aws_emr_block_public_access_configuration.test" resource.Test(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, emr.EndpointsID) + acctest.PreCheckPartitionHasService(t, names.EMREndpointID) testAccPreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.EMRServiceID), @@ -148,7 +152,7 @@ func TestAccEMRBlockPublicAccessConfiguration_enabledMultiRange(t *testing.T) { { Config: blockPublicAccessConfigurationConfig_enabledMultiRangeString, Check: resource.ComposeTestCheckFunc( - testAccCheckBlockPublicAccessConfigurationAttributes_enabledMultiRange(ctx, resourceName), + testAccCheckBlockPublicAccessConfigurationExists(ctx, resourceName), resource.TestCheckResourceAttr(resourceName, "block_public_security_group_rules", acctest.CtTrue), resource.TestCheckResourceAttr(resourceName, "permitted_public_security_group_rule_range.#", acctest.Ct2), resource.TestCheckResourceAttr(resourceName, "permitted_public_security_group_rule_range.0.min_range", "22"), @@ -158,10 +162,9 @@ func TestAccEMRBlockPublicAccessConfiguration_enabledMultiRange(t *testing.T) { ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{names.AttrApplyImmediately, "user"}, + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, }, }, }) @@ -169,168 +172,58 @@ func TestAccEMRBlockPublicAccessConfiguration_enabledMultiRange(t *testing.T) { func testAccCheckBlockPublicAccessConfigurationDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_emr_block_public_access_configuration" { continue } - resp, err := tfemr.FindBlockPublicAccessConfiguration(ctx, conn) + output, err := tfemr.FindBlockPublicAccessConfiguration(ctx, conn) - if err != nil { - return err + if tfresource.NotFound(err) { + continue } - blockPublicSecurityGroupRules := resp.BlockPublicAccessConfiguration.BlockPublicSecurityGroupRules - permittedPublicSecurityGroupRuleRanges := resp.BlockPublicAccessConfiguration.PermittedPublicSecurityGroupRuleRanges - - if *blockPublicSecurityGroupRules != true { - return fmt.Errorf("Block Public Security Group Rules is not enabled") + if err != nil { + return err } - if length := len(permittedPublicSecurityGroupRuleRanges); length != 1 { - return fmt.Errorf("The incorrect number (%v) of permitted public security group rule ranges exist, should be 1 by default", length) - } - if p := permittedPublicSecurityGroupRuleRanges; !((*p[0].MinRange == 22 && *p[0].MaxRange == 22) || (*p[1].MinRange == 22 || *p[1].MaxRange == 22)) { - return fmt.Errorf("Port 22 is not open as a permitted public security group rule") + // See defaultBlockPublicAccessConfiguration(). + if aws.ToBool(output.BlockPublicSecurityGroupRules) && + len(output.PermittedPublicSecurityGroupRuleRanges) == 1 && + aws.ToInt32(output.PermittedPublicSecurityGroupRuleRanges[0].MinRange) == 22 && + aws.ToInt32(output.PermittedPublicSecurityGroupRuleRanges[0].MaxRange) == 22 { + return nil } - } - - return nil - } -} - -func testAccCheckBlockPublicAccessConfigurationAttributes_enabledOnly(ctx context.Context, name string) resource.TestCheckFunc { - return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[name] - if !ok { - return create.Error(names.EMR, create.ErrActionCheckingExistence, tfemr.ResNameBlockPublicAccessConfiguration, name, errors.New("not found")) - } - - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) - resp, err := tfemr.FindBlockPublicAccessConfiguration(ctx, conn) - - if err != nil { - return create.Error(names.EMR, create.ErrActionCheckingExistence, tfemr.ResNameBlockPublicAccessConfiguration, rs.Primary.ID, err) - } - - blockPublicSecurityGroupRules := resp.BlockPublicAccessConfiguration.BlockPublicSecurityGroupRules - permittedPublicSecurityGroupRuleRanges := resp.BlockPublicAccessConfiguration.PermittedPublicSecurityGroupRuleRanges - if *blockPublicSecurityGroupRules != true { - return fmt.Errorf("Block Public Security Group Rules is not enabled") - } - - if length := len(permittedPublicSecurityGroupRuleRanges); length != 0 { - return fmt.Errorf("The incorrect number (%v) of permitted public security group rule ranges have been created, should be 0", length) + return fmt.Errorf("EMR Block Public Access Configuration %s still exists", rs.Primary.ID) } return nil } } -func testAccCheckBlockPublicAccessConfigurationAttributes_default(ctx context.Context, name string) resource.TestCheckFunc { +func testAccCheckBlockPublicAccessConfigurationExists(ctx context.Context, n string) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) - - rs, ok := s.RootModule().Resources[name] + _, ok := s.RootModule().Resources[n] if !ok { - return create.Error(names.EMR, create.ErrActionCheckingExistence, tfemr.ResNameBlockPublicAccessConfiguration, name, errors.New("not found")) + return fmt.Errorf("Not found: %s", n) } - resp, err := tfemr.FindBlockPublicAccessConfiguration(ctx, conn) - - if err != nil { - return create.Error(names.EMR, create.ErrActionCheckingExistence, tfemr.ResNameBlockPublicAccessConfiguration, rs.Primary.ID, err) - } + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) - blockPublicSecurityGroupRules := resp.BlockPublicAccessConfiguration.BlockPublicSecurityGroupRules - permittedPublicSecurityGroupRuleRanges := resp.BlockPublicAccessConfiguration.PermittedPublicSecurityGroupRuleRanges + _, err := tfemr.FindBlockPublicAccessConfiguration(ctx, conn) - if *blockPublicSecurityGroupRules != true { - return fmt.Errorf("Block Public Security Group Rules is not enabled") - } - - if length := len(permittedPublicSecurityGroupRuleRanges); length != 1 { - return fmt.Errorf("The incorrect number (%v) of permitted public security group rule ranges exist, should be 1 by default", length) - } - if p := permittedPublicSecurityGroupRuleRanges; !((*p[0].MinRange == 22 && *p[0].MaxRange == 22) || (*p[1].MinRange == 22 || *p[1].MaxRange == 22)) { - return fmt.Errorf("Port 22 is not open as a permitted public security group rule") - } - - return nil - } -} - -func testAccCheckBlockPublicAccessConfigurationAttributes_enabledMultiRange(ctx context.Context, name string) resource.TestCheckFunc { - return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[name] - if !ok { - return create.Error(names.EMR, create.ErrActionCheckingExistence, tfemr.ResNameBlockPublicAccessConfiguration, name, errors.New("not found")) - } - - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) - resp, err := tfemr.FindBlockPublicAccessConfiguration(ctx, conn) - - if err != nil { - return create.Error(names.EMR, create.ErrActionCheckingExistence, tfemr.ResNameBlockPublicAccessConfiguration, rs.Primary.ID, err) - } - - blockPublicSecurityGroupRules := resp.BlockPublicAccessConfiguration.BlockPublicSecurityGroupRules - permittedPublicSecurityGroupRuleRanges := resp.BlockPublicAccessConfiguration.PermittedPublicSecurityGroupRuleRanges - - if *blockPublicSecurityGroupRules != true { - return fmt.Errorf("Block Public Security Group Rules is not enabled") - } - - if length := len(permittedPublicSecurityGroupRuleRanges); length != 2 { - return fmt.Errorf("The incorrect number (%v) of permitted public security group rule ranges have been created, should be 2", length) - } - if p := permittedPublicSecurityGroupRuleRanges; !((*p[0].MinRange == 22 && *p[0].MaxRange == 22) || (*p[1].MinRange == 22 || *p[1].MaxRange == 22)) { - return fmt.Errorf("Port 22 has not been opened as a permitted_public_security_group_rule") - } - if p := permittedPublicSecurityGroupRuleRanges; !((*p[0].MinRange == 100 && *p[0].MaxRange == 101) || (*p[1].MinRange == 100 || *p[1].MaxRange == 101)) { - return fmt.Errorf("Ports 100-101 have not been opened as a permitted_public_security_group_rule") - } - - return nil - } -} - -func testAccCheckBlockPublicAccessConfigurationAttributes_disabled(ctx context.Context, name string) resource.TestCheckFunc { - return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[name] - if !ok { - return create.Error(names.EMR, create.ErrActionCheckingExistence, tfemr.ResNameBlockPublicAccessConfiguration, name, errors.New("not found")) - } - - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) - resp, err := tfemr.FindBlockPublicAccessConfiguration(ctx, conn) - - if err != nil { - return create.Error(names.EMR, create.ErrActionCheckingExistence, tfemr.ResNameBlockPublicAccessConfiguration, rs.Primary.ID, err) - } - - blockPublicSecurityGroupRules := resp.BlockPublicAccessConfiguration.BlockPublicSecurityGroupRules - permittedPublicSecurityGroupRuleRanges := resp.BlockPublicAccessConfiguration.PermittedPublicSecurityGroupRuleRanges - - if *blockPublicSecurityGroupRules != false { - return fmt.Errorf("Block Public Security Group Rules is not disabled") - } - - if length := len(permittedPublicSecurityGroupRuleRanges); length != 0 { - return fmt.Errorf("The incorrect number (%v) of permitted public security group rule ranges have been created, should be 0", length) - } - return nil + return err } } func testAccPreCheck(ctx context.Context, t *testing.T) { - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) input := &emr.GetBlockPublicAccessConfigurationInput{} - _, err := conn.GetBlockPublicAccessConfigurationWithContext(ctx, input) + _, err := conn.GetBlockPublicAccessConfiguration(ctx, input) if acctest.PreCheckSkipError(err) { t.Skipf("skipping acceptance testing: %s", err) diff --git a/internal/service/emr/cluster.go b/internal/service/emr/cluster.go index 16ce540fa03..f65472c3be6 100644 --- a/internal/service/emr/cluster.go +++ b/internal/service/emr/cluster.go @@ -6,8 +6,6 @@ package emr import ( "bytes" "context" - "encoding/json" - "errors" "fmt" "log" "net/http" @@ -15,11 +13,13 @@ import ( "slices" "strings" "time" + _ "unsafe" // Required for go:linkname - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/private/protocol/json/jsonutil" - "github.com/aws/aws-sdk-go/service/emr" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" + smithyjson "github.com/aws/smithy-go/encoding/json" + "github.com/hashicorp/aws-sdk-go-base/v2/tfawserr" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -27,8 +27,13 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/flex" + tfjson "github.com/hashicorp/terraform-provider-aws/internal/json" + "github.com/hashicorp/terraform-provider-aws/internal/sdkv2" + tfslices "github.com/hashicorp/terraform-provider-aws/internal/slices" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/internal/verify" @@ -158,10 +163,10 @@ func resourceCluster() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "allocation_strategy": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validation.StringInSlice(emr.OnDemandProvisioningAllocationStrategy_Values(), false), + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateDiagFunc: enum.Validate[awstypes.OnDemandProvisioningAllocationStrategy](), }, }, }, @@ -174,10 +179,10 @@ func resourceCluster() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "allocation_strategy": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - ValidateFunc: validation.StringInSlice(emr.SpotProvisioningAllocationStrategy_Values(), false), + Type: schema.TypeString, + ForceNew: true, + Required: true, + ValidateDiagFunc: enum.Validate[awstypes.SpotProvisioningAllocationStrategy](), }, "block_duration_minutes": { Type: schema.TypeInt, @@ -186,10 +191,10 @@ func resourceCluster() *schema.Resource { Default: 0, }, "timeout_action": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validation.StringInSlice(emr.SpotProvisioningTimeoutAction_Values(), false), + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateDiagFunc: enum.Validate[awstypes.SpotProvisioningTimeoutAction](), }, "timeout_duration_minutes": { Type: schema.TypeInt, @@ -233,11 +238,12 @@ func resourceCluster() *schema.Resource { return map[string]*schema.Schema{ "additional_info": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, - ValidateFunc: validation.StringIsJSON, - DiffSuppressFunc: verify.SuppressEquivalentJSONDiffs, + Type: schema.TypeString, + Optional: true, + ForceNew: true, + ValidateFunc: validation.StringIsJSON, + DiffSuppressFunc: verify.SuppressEquivalentJSONDiffs, + DiffSuppressOnRefresh: true, StateFunc: func(v interface{}) string { json, _ := structure.NormalizeJsonString(v) return json @@ -306,11 +312,12 @@ func resourceCluster() *schema.Resource { ConflictsWith: []string{"configurations_json"}, }, "configurations_json": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, - ValidateFunc: validation.StringIsJSON, - DiffSuppressFunc: verify.SuppressEquivalentJSONDiffs, + Type: schema.TypeString, + Optional: true, + ForceNew: true, + ValidateFunc: validation.StringIsJSON, + DiffSuppressFunc: verify.SuppressEquivalentJSONDiffs, + DiffSuppressOnRefresh: true, StateFunc: func(v interface{}) string { json, _ := structure.NormalizeJsonString(v) return json @@ -335,10 +342,11 @@ func resourceCluster() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "autoscaling_policy": { - Type: schema.TypeString, - Optional: true, - DiffSuppressFunc: verify.SuppressEquivalentJSONDiffs, - ValidateFunc: validation.StringIsJSON, + Type: schema.TypeString, + Optional: true, + ValidateFunc: validation.StringIsJSON, + DiffSuppressFunc: verify.SuppressEquivalentJSONDiffs, + DiffSuppressOnRefresh: true, }, "bid_price": { Type: schema.TypeString, @@ -528,8 +536,8 @@ func resourceCluster() *schema.Resource { Type: schema.TypeSet, Optional: true, Elem: &schema.Schema{ - Type: schema.TypeString, - ValidateFunc: validation.StringInSlice(emr.StepState_Values(), false), + Type: schema.TypeString, + ValidateDiagFunc: enum.Validate[awstypes.StepState](), }, }, "log_encryption_kms_key_id": { @@ -650,17 +658,17 @@ func resourceCluster() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "instance_role": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - ValidateFunc: validation.StringInSlice(emr.InstanceRoleType_Values(), false), + Type: schema.TypeString, + ForceNew: true, + Required: true, + ValidateDiagFunc: enum.Validate[awstypes.InstanceRoleType](), }, "placement_strategy": { - Type: schema.TypeString, - ForceNew: true, - Optional: true, - Computed: true, - ValidateFunc: validation.StringInSlice(emr.PlacementGroupStrategy_Values(), false), + Type: schema.TypeString, + ForceNew: true, + Optional: true, + Computed: true, + ValidateDiagFunc: enum.Validate[awstypes.PlacementGroupStrategy](), }, }, }, @@ -671,11 +679,11 @@ func resourceCluster() *schema.Resource { Required: true, }, "scale_down_behavior": { - Type: schema.TypeString, - ForceNew: true, - Optional: true, - Computed: true, - ValidateFunc: validation.StringInSlice(emr.ScaleDownBehavior_Values(), false), + Type: schema.TypeString, + ForceNew: true, + Optional: true, + Computed: true, + ValidateDiagFunc: enum.Validate[awstypes.ScaleDownBehavior](), }, "security_configuration": { Type: schema.TypeString, @@ -696,10 +704,10 @@ func resourceCluster() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "action_on_failure": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validation.StringInSlice(emr.ActionOnFailure_Values(), false), + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateDiagFunc: enum.Validate[awstypes.ActionOnFailure](), }, "hadoop_jar_step": { Type: schema.TypeList, @@ -772,7 +780,7 @@ func resourceCluster() *schema.Resource { func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) applications := d.Get("applications").(*schema.Set).List() keepJobFlowAliveWhenNoSteps := true @@ -795,7 +803,7 @@ func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, meta int unhealthyNodeReplacement = v.(bool) } - instanceConfig := &emr.JobFlowInstancesConfig{ + instanceConfig := &awstypes.JobFlowInstancesConfig{ KeepJobFlowAliveWhenNoSteps: aws.Bool(keepJobFlowAliveWhenNoSteps), TerminationProtected: aws.Bool(terminationProtection), UnhealthyNodeReplacement: aws.Bool(unhealthyNodeReplacement), @@ -804,20 +812,20 @@ func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, meta int if l := d.Get("master_instance_group").([]interface{}); len(l) > 0 && l[0] != nil { m := l[0].(map[string]interface{}) - instanceGroup := &emr.InstanceGroupConfig{ - InstanceCount: aws.Int64(int64(m[names.AttrInstanceCount].(int))), - InstanceRole: aws.String(emr.InstanceRoleTypeMaster), + instanceGroup := awstypes.InstanceGroupConfig{ + InstanceCount: aws.Int32(int32(m[names.AttrInstanceCount].(int))), + InstanceRole: awstypes.InstanceRoleTypeMaster, InstanceType: aws.String(m[names.AttrInstanceType].(string)), - Market: aws.String(emr.MarketTypeOnDemand), + Market: awstypes.MarketTypeOnDemand, Name: aws.String(m[names.AttrName].(string)), } if v, ok := m["bid_price"]; ok && v.(string) != "" { instanceGroup.BidPrice = aws.String(v.(string)) - instanceGroup.Market = aws.String(emr.MarketTypeSpot) + instanceGroup.Market = awstypes.MarketTypeSpot } - expandEBSConfig(m, instanceGroup) + expandEBSConfig(m, &instanceGroup) instanceConfig.InstanceGroups = append(instanceConfig.InstanceGroups, instanceGroup) } @@ -825,42 +833,42 @@ func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, meta int if l := d.Get("core_instance_group").([]interface{}); len(l) > 0 && l[0] != nil { m := l[0].(map[string]interface{}) - instanceGroup := &emr.InstanceGroupConfig{ - InstanceCount: aws.Int64(int64(m[names.AttrInstanceCount].(int))), - InstanceRole: aws.String(emr.InstanceRoleTypeCore), + instanceGroup := awstypes.InstanceGroupConfig{ + InstanceCount: aws.Int32(int32(m[names.AttrInstanceCount].(int))), + InstanceRole: awstypes.InstanceRoleTypeCore, InstanceType: aws.String(m[names.AttrInstanceType].(string)), - Market: aws.String(emr.MarketTypeOnDemand), + Market: awstypes.MarketTypeOnDemand, Name: aws.String(m[names.AttrName].(string)), } if v, ok := m["autoscaling_policy"]; ok && v.(string) != "" { - var autoScalingPolicy *emr.AutoScalingPolicy + var autoScalingPolicy awstypes.AutoScalingPolicy - if err := json.Unmarshal([]byte(v.(string)), &autoScalingPolicy); err != nil { - return sdkdiag.AppendErrorf(diags, "parsing core_instance_group Auto Scaling Policy JSON: %s", err) + if err := tfjson.DecodeFromString(v.(string), &autoScalingPolicy); err != nil { + return sdkdiag.AppendFromErr(diags, err) } - instanceGroup.AutoScalingPolicy = autoScalingPolicy + instanceGroup.AutoScalingPolicy = &autoScalingPolicy } if v, ok := m["bid_price"]; ok && v.(string) != "" { instanceGroup.BidPrice = aws.String(v.(string)) - instanceGroup.Market = aws.String(emr.MarketTypeSpot) + instanceGroup.Market = awstypes.MarketTypeSpot } - expandEBSConfig(m, instanceGroup) + expandEBSConfig(m, &instanceGroup) instanceConfig.InstanceGroups = append(instanceConfig.InstanceGroups, instanceGroup) } if l := d.Get("master_instance_fleet").([]interface{}); len(l) > 0 && l[0] != nil { - instanceFleetConfig := readInstanceFleetConfig(l[0].(map[string]interface{}), emr.InstanceFleetTypeMaster) - instanceConfig.InstanceFleets = append(instanceConfig.InstanceFleets, instanceFleetConfig) + instanceFleetConfig := expandInstanceFleetConfig(l[0].(map[string]interface{}), awstypes.InstanceFleetTypeMaster) + instanceConfig.InstanceFleets = append(instanceConfig.InstanceFleets, *instanceFleetConfig) } if l := d.Get("core_instance_fleet").([]interface{}); len(l) > 0 && l[0] != nil { - instanceFleetConfig := readInstanceFleetConfig(l[0].(map[string]interface{}), emr.InstanceFleetTypeCore) - instanceConfig.InstanceFleets = append(instanceConfig.InstanceFleets, instanceFleetConfig) + instanceFleetConfig := expandInstanceFleetConfig(l[0].(map[string]interface{}), awstypes.InstanceFleetTypeCore) + instanceConfig.InstanceFleets = append(instanceConfig.InstanceFleets, *instanceFleetConfig) } var instanceProfile string @@ -875,7 +883,7 @@ func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, meta int instanceConfig.Ec2SubnetId = aws.String(v.(string)) } if v, ok := attributes[names.AttrSubnetIDs]; ok { - instanceConfig.Ec2SubnetIds = flex.ExpandStringSet(v.(*schema.Set)) + instanceConfig.Ec2SubnetIds = flex.ExpandStringValueSet(v.(*schema.Set)) } if v, ok := attributes["additional_master_security_groups"]; ok { @@ -883,7 +891,7 @@ func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, meta int for i, s := range strSlice { strSlice[i] = strings.TrimSpace(s) } - instanceConfig.AdditionalMasterSecurityGroups = aws.StringSlice(strSlice) + instanceConfig.AdditionalMasterSecurityGroups = strSlice } if v, ok := attributes["additional_slave_security_groups"]; ok { @@ -891,7 +899,7 @@ func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, meta int for i, s := range strSlice { strSlice[i] = strings.TrimSpace(s) } - instanceConfig.AdditionalSlaveSecurityGroups = aws.StringSlice(strSlice) + instanceConfig.AdditionalSlaveSecurityGroups = strSlice } if v, ok := attributes["emr_managed_master_security_group"]; ok { @@ -910,12 +918,11 @@ func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, meta int } } - emrApps := expandApplications(applications) - - params := &emr.RunJobFlowInput{ + name := d.Get(names.AttrName).(string) + input := &emr.RunJobFlowInput{ Instances: instanceConfig, - Name: aws.String(d.Get(names.AttrName).(string)), - Applications: emrApps, + Name: aws.String(name), + Applications: expandApplications(applications), ReleaseLabel: aws.String(d.Get("release_label").(string)), ServiceRole: aws.String(d.Get(names.AttrServiceRole).(string)), @@ -924,131 +931,125 @@ func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, meta int } if v, ok := d.GetOk("additional_info"); ok { - info, err := structure.NormalizeJsonString(v) + v, err := structure.NormalizeJsonString(v) if err != nil { - return sdkdiag.AppendErrorf(diags, "Additional Info contains an invalid JSON: %v", err) + return sdkdiag.AppendFromErr(diags, err) } - params.AdditionalInfo = aws.String(info) + input.AdditionalInfo = aws.String(v) } if v, ok := d.GetOk("log_encryption_kms_key_id"); ok { - params.LogEncryptionKmsKeyId = aws.String(v.(string)) + input.LogEncryptionKmsKeyId = aws.String(v.(string)) } if v, ok := d.GetOk("log_uri"); ok { - params.LogUri = aws.String(v.(string)) + input.LogUri = aws.String(v.(string)) } if v, ok := d.GetOk("autoscaling_role"); ok { - params.AutoScalingRole = aws.String(v.(string)) + input.AutoScalingRole = aws.String(v.(string)) } if v, ok := d.GetOk("scale_down_behavior"); ok { - params.ScaleDownBehavior = aws.String(v.(string)) + input.ScaleDownBehavior = awstypes.ScaleDownBehavior(v.(string)) } if v, ok := d.GetOk("security_configuration"); ok { - params.SecurityConfiguration = aws.String(v.(string)) + input.SecurityConfiguration = aws.String(v.(string)) } if v, ok := d.GetOk("ebs_root_volume_size"); ok { - params.EbsRootVolumeSize = aws.Int64(int64(v.(int))) + input.EbsRootVolumeSize = aws.Int32(int32(v.(int))) } if v, ok := d.GetOk("custom_ami_id"); ok { - params.CustomAmiId = aws.String(v.(string)) + input.CustomAmiId = aws.String(v.(string)) } if v, ok := d.GetOk("step_concurrency_level"); ok { - params.StepConcurrencyLevel = aws.Int64(int64(v.(int))) + input.StepConcurrencyLevel = aws.Int32(int32(v.(int))) } if instanceProfile != "" { - params.JobFlowRole = aws.String(instanceProfile) + input.JobFlowRole = aws.String(instanceProfile) } if v, ok := d.GetOk("bootstrap_action"); ok { - bootstrapActions := v.([]interface{}) - params.BootstrapActions = expandBootstrapActions(bootstrapActions) + input.BootstrapActions = expandBootstrapActions(v.([]interface{})) } if v, ok := d.GetOk("step"); ok { - steps := v.([]interface{}) - params.Steps = expandStepConfigs(steps) + input.Steps = expandStepConfigs(v.([]interface{})) } if v, ok := d.GetOk("configurations"); ok { - confUrl := v.(string) - params.Configurations = expandConfigures(confUrl) + input.Configurations = expandConfigures(v.(string)) } if v, ok := d.GetOk("configurations_json"); ok { - info, err := structure.NormalizeJsonString(v) + v, err := structure.NormalizeJsonString(v) if err != nil { - return sdkdiag.AppendErrorf(diags, "configurations_json contains an invalid JSON: %v", err) + return sdkdiag.AppendFromErr(diags, err) } - params.Configurations, err = expandConfigurationJSON(info) + input.Configurations, err = expandConfigurationJSON(v) if err != nil { - return sdkdiag.AppendErrorf(diags, "reading EMR configurations_json: %s", err) + return sdkdiag.AppendFromErr(diags, err) } } if v, ok := d.GetOk("kerberos_attributes"); ok { - kerberosAttributesList := v.([]interface{}) - kerberosAttributesMap := kerberosAttributesList[0].(map[string]interface{}) - params.KerberosAttributes = expandKerberosAttributes(kerberosAttributesMap) + input.KerberosAttributes = expandKerberosAttributes(v.([]interface{})[0].(map[string]interface{})) } if v, ok := d.GetOk("auto_termination_policy"); ok && len(v.([]interface{})) > 0 { - params.AutoTerminationPolicy = expandAutoTerminationPolicy(v.([]interface{})) + input.AutoTerminationPolicy = expandAutoTerminationPolicy(v.([]interface{})) } if v, ok := d.GetOk("placement_group_config"); ok { - placementGroupConfigs := v.([]interface{}) - params.PlacementGroupConfigs = expandPlacementGroupConfigs(placementGroupConfigs) + input.PlacementGroupConfigs = expandPlacementGroupConfigs(v.([]interface{})) } - var resp *emr.RunJobFlowOutput - err := retry.RetryContext(ctx, propagationTimeout, func() *retry.RetryError { - var err error - resp, err = conn.RunJobFlowWithContext(ctx, params) - if err != nil { - if tfawserr.ErrMessageContains(err, "ValidationException", "Invalid InstanceProfile:") { - return retry.RetryableError(err) + outputRaw, err := tfresource.RetryWhen(ctx, propagationTimeout, + func() (interface{}, error) { + return conn.RunJobFlow(ctx, input) + }, + func(err error) (bool, error) { + if tfawserr.ErrMessageContains(err, errCodeValidationException, "Invalid InstanceProfile:") { + return true, err } - if tfawserr.ErrMessageContains(err, "AccessDeniedException", "Failed to authorize instance profile") { - return retry.RetryableError(err) + + if tfawserr.ErrMessageContains(err, errCodeAccessDeniedException, "Failed to authorize instance profile") { + return true, err } - return retry.NonRetryableError(err) - } - return nil - }) - if tfresource.TimedOut(err) { - resp, err = conn.RunJobFlowWithContext(ctx, params) - } + + return false, err + }, + ) + if err != nil { - return sdkdiag.AppendErrorf(diags, "running EMR Job Flow: %s", err) + return sdkdiag.AppendErrorf(diags, "running EMR Job Flow (%s): %s", name, err) } - d.SetId(aws.StringValue(resp.JobFlowId)) + d.SetId(aws.ToString(outputRaw.(*emr.RunJobFlowOutput).JobFlowId)) // This value can only be obtained through a deprecated function - d.Set("keep_job_flow_alive_when_no_steps", params.Instances.KeepJobFlowAliveWhenNoSteps) + d.Set("keep_job_flow_alive_when_no_steps", input.Instances.KeepJobFlowAliveWhenNoSteps) - log.Println("[INFO] Waiting for EMR Cluster to be available") cluster, err := waitClusterCreated(ctx, conn, d.Id()) if err != nil { - return sdkdiag.AppendErrorf(diags, "waiting for EMR Cluster (%s) to create: %s", d.Id(), err) + return sdkdiag.AppendErrorf(diags, "waiting for EMR Cluster (%s) create: %s", d.Id(), err) } // For multiple master nodes, EMR automatically enables // termination protection and ignores the configuration at launch. // This additional handling is to potentially disable termination // protection to match the desired Terraform configuration. - if aws.BoolValue(cluster.TerminationProtected) != terminationProtection { + if aws.ToBool(cluster.TerminationProtected) != terminationProtection { input := &emr.SetTerminationProtectionInput{ - JobFlowIds: []*string{aws.String(d.Id())}, + JobFlowIds: []string{d.Id()}, TerminationProtected: aws.Bool(terminationProtection), } - if _, err := conn.SetTerminationProtectionWithContext(ctx, input); err != nil { + _, err := conn.SetTerminationProtection(ctx, input) + + if err != nil { return sdkdiag.AppendErrorf(diags, "setting EMR Cluster (%s) termination protection to match configuration: %s", d.Id(), err) } } @@ -1058,7 +1059,7 @@ func resourceClusterCreate(ctx context.Context, d *schema.ResourceData, meta int func resourceClusterRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) cluster, err := findClusterByID(ctx, conn, d.Id()) @@ -1075,16 +1076,15 @@ func resourceClusterRead(ctx context.Context, d *schema.ResourceData, meta inter d.Set("cluster_state", cluster.Status.State) d.Set(names.AttrARN, cluster.ClusterArn) - instanceGroups, err := fetchAllInstanceGroups(ctx, conn, d.Id()) + instanceGroups, err := findInstanceGroupsByClusterID(ctx, conn, d.Id()) if err == nil { // find instance group - coreGroup := coreInstanceGroup(instanceGroups) - masterGroup := findMasterGroup(instanceGroups) + coreGroup, _ := coreInstanceGroup(instanceGroups) + masterGroup, _ := masterInstanceGroup(instanceGroups) flattenedCoreInstanceGroup, err := flattenCoreInstanceGroup(coreGroup) - if err != nil { - return sdkdiag.AppendErrorf(diags, "flattening core_instance_group: %s", err) + return sdkdiag.AppendFromErr(diags, err) } if err := d.Set("core_instance_group", flattenedCoreInstanceGroup); err != nil { @@ -1096,11 +1096,11 @@ func resourceClusterRead(ctx context.Context, d *schema.ResourceData, meta inter } } - instanceFleets, err := FetchAllInstanceFleets(ctx, conn, d.Id()) + instanceFleets, err := findInstanceFleetsByClusterID(ctx, conn, d.Id()) if err == nil { // find instance fleets - coreFleet := findInstanceFleet(instanceFleets, emr.InstanceFleetTypeCore) - masterFleet := findInstanceFleet(instanceFleets, emr.InstanceFleetTypeMaster) + coreFleet, _ := instanceFleetForRole(instanceFleets, awstypes.InstanceFleetTypeCore) + masterFleet, _ := instanceFleetForRole(instanceFleets, awstypes.InstanceFleetTypeMaster) flattenedCoreInstanceFleet := flattenInstanceFleet(coreFleet) if err := d.Set("core_instance_fleet", flattenedCoreInstanceFleet); err != nil { @@ -1134,58 +1134,48 @@ func resourceClusterRead(ctx context.Context, d *schema.ResourceData, meta inter d.Set("custom_ami_id", cluster.CustomAmiId) if err := d.Set("applications", flattenApplications(cluster.Applications)); err != nil { - return sdkdiag.AppendErrorf(diags, "setting EMR Applications for cluster (%s): %s", d.Id(), err) + return sdkdiag.AppendErrorf(diags, "setting applications: %s", err) } if _, ok := d.GetOk("configurations_json"); ok { configOut, err := flattenConfigurationJSON(cluster.Configurations) if err != nil { - return sdkdiag.AppendErrorf(diags, "reading EMR cluster configurations: %s", err) + return sdkdiag.AppendFromErr(diags, err) } if err := d.Set("configurations_json", configOut); err != nil { - return sdkdiag.AppendErrorf(diags, "setting EMR configurations_json for cluster (%s): %s", d.Id(), err) + return sdkdiag.AppendErrorf(diags, "setting configurations_json: %s", err) } } if err := d.Set("ec2_attributes", flattenEC2InstanceAttributes(cluster.Ec2InstanceAttributes)); err != nil { - return sdkdiag.AppendErrorf(diags, "setting EMR Ec2 Attributes: %s", err) + return sdkdiag.AppendErrorf(diags, "setting ec2_attributes: %s", err) } if err := d.Set("kerberos_attributes", flattenKerberosAttributes(d, cluster.KerberosAttributes)); err != nil { return sdkdiag.AppendErrorf(diags, "setting kerberos_attributes: %s", err) } - respBootstraps, err := conn.ListBootstrapActionsWithContext(ctx, &emr.ListBootstrapActionsInput{ - ClusterId: cluster.Id, - }) + bootstrapActions, err := findBootstrapActionsByClusterID(ctx, conn, d.Id()) + if err != nil { - return sdkdiag.AppendErrorf(diags, "listing EMR Cluster (%s) bootstrap actions: %s", d.Id(), err) + return sdkdiag.AppendErrorf(diags, "reading EMR Cluster (%s) bootstrap actions: %s", d.Id(), err) } - if err := d.Set("bootstrap_action", flattenBootstrapArguments(respBootstraps.BootstrapActions)); err != nil { - return sdkdiag.AppendErrorf(diags, "setting Bootstrap Actions: %s", err) + if err := d.Set("bootstrap_action", flattenBootstrapArguments(bootstrapActions)); err != nil { + return sdkdiag.AppendErrorf(diags, "setting bootstrap_action: %s", err) } - var stepSummaries []*emr.StepSummary input := &emr.ListStepsInput{ ClusterId: aws.String(d.Id()), } - if v, ok := d.GetOk("list_steps_states"); ok && v.(*schema.Set).Len() > 0 { - input.StepStates = flex.ExpandStringSet(v.(*schema.Set)) + input.StepStates = flex.ExpandStringyValueSet[awstypes.StepState](v.(*schema.Set)) } - err = conn.ListStepsPagesWithContext(ctx, input, func(page *emr.ListStepsOutput, lastPage bool) bool { - // ListSteps returns steps in reverse order (newest first). - for _, step := range page.Steps { - stepSummaries = append([]*emr.StepSummary{step}, stepSummaries...) - } - - return !lastPage - }) + stepSummaries, err := findStepSummaries(ctx, conn, input) if err != nil { - return sdkdiag.AppendErrorf(diags, "listing EMR Cluster (%s) steps: %s", d.Id(), err) + return sdkdiag.AppendErrorf(diags, "listing EMR Cluster (%s) step summaries: %s", d.Id(), err) } if err := d.Set("step", flattenStepSummaries(stepSummaries)); err != nil { @@ -1194,30 +1184,23 @@ func resourceClusterRead(ctx context.Context, d *schema.ResourceData, meta inter // AWS provides no other way to read back the additional_info if v, ok := d.GetOk("additional_info"); ok { - info, err := structure.NormalizeJsonString(v) + v, err := structure.NormalizeJsonString(v) if err != nil { - return sdkdiag.AppendErrorf(diags, "Additional Info contains an invalid JSON: %v", err) + return sdkdiag.AppendFromErr(diags, err) } - d.Set("additional_info", info) + d.Set("additional_info", v) } - atpOut, err := conn.GetAutoTerminationPolicyWithContext(ctx, &emr.GetAutoTerminationPolicyInput{ - ClusterId: aws.String(d.Id()), - }) - - if err != nil { - if tfawserr.ErrMessageContains(err, ErrCodeValidationException, "Auto-termination is not available for this account when using this release of EMR") || - tfawserr.ErrMessageContains(err, ErrCodeUnknownOperationException, "Could not find operation GetAutoTerminationPolicy") { - err = nil - } - } - - if err != nil { + autoTerminationPolicy, err := findAutoTerminationPolicyByClusterID(ctx, conn, d.Id()) + switch { + case tfresource.NotFound(err): + d.Set("auto_termination_policy", nil) + case err != nil: return sdkdiag.AppendErrorf(diags, "reading EMR Cluster (%s) auto-termination policy: %s", d.Id(), err) - } - - if err := d.Set("auto_termination_policy", flattenAutoTerminationPolicy(atpOut.AutoTerminationPolicy)); err != nil { - return sdkdiag.AppendErrorf(diags, "setting auto_termination_policy: %s", err) + default: + if err := d.Set("auto_termination_policy", flattenAutoTerminationPolicy(autoTerminationPolicy)); err != nil { + return sdkdiag.AppendErrorf(diags, "setting auto_termination_policy: %s", err) + } } if err := d.Set("placement_group_config", flattenPlacementGroupConfigs(cluster.PlacementGroups)); err != nil { @@ -1229,13 +1212,16 @@ func resourceClusterRead(ctx context.Context, d *schema.ResourceData, meta inter func resourceClusterUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) if d.HasChange("visible_to_all_users") { - _, err := conn.SetVisibleToAllUsersWithContext(ctx, &emr.SetVisibleToAllUsersInput{ - JobFlowIds: []*string{aws.String(d.Id())}, + input := &emr.SetVisibleToAllUsersInput{ + JobFlowIds: []string{d.Id()}, VisibleToAllUsers: aws.Bool(d.Get("visible_to_all_users").(bool)), - }) + } + + _, err := conn.SetVisibleToAllUsers(ctx, input) + if err != nil { return sdkdiag.AppendErrorf(diags, "updating EMR Cluster (%s): setting visibility: %s", d.Id(), err) } @@ -1244,21 +1230,23 @@ func resourceClusterUpdate(ctx context.Context, d *schema.ResourceData, meta int if d.HasChange("auto_termination_policy") { _, n := d.GetChange("auto_termination_policy") if len(n.([]interface{})) > 0 { - log.Printf("[DEBUG] Putting EMR cluster Auto Termination Policy") - - _, err := conn.PutAutoTerminationPolicyWithContext(ctx, &emr.PutAutoTerminationPolicyInput{ + input := &emr.PutAutoTerminationPolicyInput{ AutoTerminationPolicy: expandAutoTerminationPolicy(n.([]interface{})), ClusterId: aws.String(d.Id()), - }) + } + + _, err := conn.PutAutoTerminationPolicy(ctx, input) + if err != nil { return sdkdiag.AppendErrorf(diags, "updating EMR Cluster (%s): setting auto termination policy: %s", d.Id(), err) } } else { - log.Printf("[DEBUG] Removing EMR cluster Auto Termination Policy") - - _, err := conn.RemoveAutoTerminationPolicyWithContext(ctx, &emr.RemoveAutoTerminationPolicyInput{ + input := &emr.RemoveAutoTerminationPolicyInput{ ClusterId: aws.String(d.Id()), - }) + } + + _, err := conn.RemoveAutoTerminationPolicy(ctx, input) + if err != nil { return sdkdiag.AppendErrorf(diags, "updating EMR Cluster (%s): removing auto termination policy: %s", d.Id(), err) } @@ -1266,20 +1254,26 @@ func resourceClusterUpdate(ctx context.Context, d *schema.ResourceData, meta int } if d.HasChange("termination_protection") { - _, err := conn.SetTerminationProtectionWithContext(ctx, &emr.SetTerminationProtectionInput{ - JobFlowIds: []*string{aws.String(d.Id())}, + input := &emr.SetTerminationProtectionInput{ + JobFlowIds: []string{d.Id()}, TerminationProtected: aws.Bool(d.Get("termination_protection").(bool)), - }) + } + + _, err := conn.SetTerminationProtection(ctx, input) + if err != nil { return sdkdiag.AppendErrorf(diags, "updating EMR Cluster (%s): setting termination protection: %s", d.Id(), err) } } if d.HasChange("unhealthy_node_replacement") { - _, err := conn.SetUnhealthyNodeReplacementWithContext(ctx, &emr.SetUnhealthyNodeReplacementInput{ - JobFlowIds: []*string{aws.String(d.Id())}, + input := &emr.SetUnhealthyNodeReplacementInput{ + JobFlowIds: []string{d.Id()}, UnhealthyNodeReplacement: aws.Bool(d.Get("unhealthy_node_replacement").(bool)), - }) + } + + _, err := conn.SetUnhealthyNodeReplacement(ctx, input) + if err != nil { return sdkdiag.AppendErrorf(diags, "updating EMR Cluster (%s): setting unhealthy node replacement: %s", d.Id(), err) } @@ -1290,19 +1284,21 @@ func resourceClusterUpdate(ctx context.Context, d *schema.ResourceData, meta int instanceGroupID := d.Get("core_instance_group.0.id").(string) if autoscalingPolicyStr != "" { - var autoScalingPolicy *emr.AutoScalingPolicy + var autoScalingPolicy awstypes.AutoScalingPolicy - if err := json.Unmarshal([]byte(autoscalingPolicyStr), &autoScalingPolicy); err != nil { - return sdkdiag.AppendErrorf(diags, "parsing core_instance_group Auto Scaling Policy JSON: %s", err) + if err := tfjson.DecodeFromString(autoscalingPolicyStr, &autoScalingPolicy); err != nil { + return sdkdiag.AppendFromErr(diags, err) } input := &emr.PutAutoScalingPolicyInput{ ClusterId: aws.String(d.Id()), - AutoScalingPolicy: autoScalingPolicy, + AutoScalingPolicy: &autoScalingPolicy, InstanceGroupId: aws.String(instanceGroupID), } - if _, err := conn.PutAutoScalingPolicyWithContext(ctx, input); err != nil { + _, err := conn.PutAutoScalingPolicy(ctx, input) + + if err != nil { return sdkdiag.AppendErrorf(diags, "updating EMR Cluster (%s): setting autoscaling policy: %s", d.Id(), err) } } else { @@ -1311,36 +1307,21 @@ func resourceClusterUpdate(ctx context.Context, d *schema.ResourceData, meta int InstanceGroupId: aws.String(instanceGroupID), } - if _, err := conn.RemoveAutoScalingPolicyWithContext(ctx, input); err != nil { + _, err := conn.RemoveAutoScalingPolicy(ctx, input) + + if err != nil { return sdkdiag.AppendErrorf(diags, "updating EMR Cluster (%s): removing autoscaling policy: %s", d.Id(), err) } // RemoveAutoScalingPolicy seems to have eventual consistency. // Retry reading Instance Group configuration until the policy is removed. - err := retry.RetryContext(ctx, 1*time.Minute, func() *retry.RetryError { - autoscalingPolicy, err := getCoreInstanceGroupAutoScalingPolicy(ctx, conn, d.Id()) - - if err != nil { - return retry.NonRetryableError(err) - } - - if autoscalingPolicy != nil { - return retry.RetryableError(errors.New("still exists")) - } - - return nil + const ( + timeout = 1 * time.Minute + ) + _, err = tfresource.RetryUntilNotFound(ctx, timeout, func() (interface{}, error) { + return findCoreInstanceGroupAutoScalingPolicy(ctx, conn, d.Id()) }) - if tfresource.TimedOut(err) { - var autoscalingPolicy *emr.AutoScalingPolicyDescription - - autoscalingPolicy, err = getCoreInstanceGroupAutoScalingPolicy(ctx, conn, d.Id()) - - if autoscalingPolicy != nil { - err = errors.New("still exists") - } - } - if err != nil { return sdkdiag.AppendErrorf(diags, "updating EMR Cluster (%s): removing autoscaling policy: waiting for completion: %s", d.Id(), err) } @@ -1351,32 +1332,24 @@ func resourceClusterUpdate(ctx context.Context, d *schema.ResourceData, meta int instanceGroupID := d.Get("core_instance_group.0.id").(string) input := &emr.ModifyInstanceGroupsInput{ - InstanceGroups: []*emr.InstanceGroupModifyConfig{ + InstanceGroups: []awstypes.InstanceGroupModifyConfig{ { InstanceGroupId: aws.String(instanceGroupID), - InstanceCount: aws.Int64(int64(d.Get("core_instance_group.0.instance_count").(int))), + InstanceCount: aws.Int32(int32(d.Get("core_instance_group.0.instance_count").(int))), }, }, } - if _, err := conn.ModifyInstanceGroupsWithContext(ctx, input); err != nil { - return sdkdiag.AppendErrorf(diags, "modifying EMR Cluster (%s) Instance Group (%s): %s", d.Id(), instanceGroupID, err) - } + _, err := conn.ModifyInstanceGroups(ctx, input) - stateConf := &retry.StateChangeConf{ - Pending: []string{ - emr.InstanceGroupStateBootstrapping, - emr.InstanceGroupStateProvisioning, - emr.InstanceGroupStateReconfiguring, - emr.InstanceGroupStateResizing, - }, - Target: []string{emr.InstanceGroupStateRunning}, - Refresh: instanceGroupStateRefresh(ctx, conn, d.Id(), instanceGroupID), - Timeout: 20 * time.Minute, - Delay: 10 * time.Second, + if err != nil { + return sdkdiag.AppendErrorf(diags, "modifying EMR Cluster (%s) Instance Group (%s): %s", d.Id(), instanceGroupID, err) } - if _, err := stateConf.WaitForStateContext(ctx); err != nil { + const ( + timeout = 20 * time.Minute + ) + if _, err := waitInstanceGroupRunning(ctx, conn, d.Id(), instanceGroupID, timeout); err != nil { return sdkdiag.AppendErrorf(diags, "waiting for EMR Cluster (%s) Instance Group (%s) modification: %s", d.Id(), instanceGroupID, err) } } @@ -1400,22 +1373,22 @@ func resourceClusterUpdate(ctx context.Context, d *schema.ResourceData, meta int } if v, ok := nInstanceGroup["autoscaling_policy"]; ok && v.(string) != "" { - var autoScalingPolicy *emr.AutoScalingPolicy + var autoScalingPolicy awstypes.AutoScalingPolicy - err := json.Unmarshal([]byte(v.(string)), &autoScalingPolicy) - if err != nil { - return sdkdiag.AppendErrorf(diags, "parsing EMR Auto Scaling Policy JSON for update: \n\n%s\n\n%s", v.(string), err) + if err := tfjson.DecodeFromString(v.(string), &autoScalingPolicy); err != nil { + return sdkdiag.AppendFromErr(diags, err) } - putAutoScalingPolicy := &emr.PutAutoScalingPolicyInput{ + input := &emr.PutAutoScalingPolicyInput{ ClusterId: aws.String(d.Id()), - AutoScalingPolicy: autoScalingPolicy, + AutoScalingPolicy: &autoScalingPolicy, InstanceGroupId: aws.String(oInstanceGroup[names.AttrID].(string)), } - _, errModify := conn.PutAutoScalingPolicyWithContext(ctx, putAutoScalingPolicy) - if errModify != nil { - return sdkdiag.AppendErrorf(diags, "updating autoscaling policy for instance group %q: %s", oInstanceGroup[names.AttrID].(string), errModify) + _, err := conn.PutAutoScalingPolicy(ctx, input) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "updating autoscaling policy for instance group %q: %s", oInstanceGroup[names.AttrID].(string), err) } break @@ -1425,10 +1398,13 @@ func resourceClusterUpdate(ctx context.Context, d *schema.ResourceData, meta int } if d.HasChange("step_concurrency_level") { - _, err := conn.ModifyClusterWithContext(ctx, &emr.ModifyClusterInput{ + input := &emr.ModifyClusterInput{ ClusterId: aws.String(d.Id()), - StepConcurrencyLevel: aws.Int64(int64(d.Get("step_concurrency_level").(int))), - }) + StepConcurrencyLevel: aws.Int32(int32(d.Get("step_concurrency_level").(int))), + } + + _, err := conn.ModifyCluster(ctx, input) + if err != nil { return sdkdiag.AppendErrorf(diags, "updating EMR Cluster (%s): updating step concurrency level: %s", d.Id(), err) } @@ -1439,51 +1415,25 @@ func resourceClusterUpdate(ctx context.Context, d *schema.ResourceData, meta int func resourceClusterDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) log.Printf("[DEBUG] Deleting EMR Cluster: %s", d.Id()) - _, err := conn.TerminateJobFlowsWithContext(ctx, &emr.TerminateJobFlowsInput{ - JobFlowIds: []*string{ - aws.String(d.Id()), - }, + _, err := conn.TerminateJobFlows(ctx, &emr.TerminateJobFlowsInput{ + JobFlowIds: []string{d.Id()}, }) if err != nil { return sdkdiag.AppendErrorf(diags, "terminating EMR Cluster (%s): %s", d.Id(), err) } - log.Println("[INFO] Waiting for EMR Cluster to be terminated") - _, err = waitClusterDeleted(ctx, conn, d.Id()) - - if err != nil { - return sdkdiag.AppendErrorf(diags, "waiting for EMR Cluster (%s) to delete: %s", d.Id(), err) + if _, err := waitClusterDeleted(ctx, conn, d.Id()); err != nil { + return sdkdiag.AppendErrorf(diags, "waiting for EMR Cluster (%s) delete: %s", d.Id(), err) } return diags } -func findCluster(ctx context.Context, conn *emr.EMR, input *emr.DescribeClusterInput) (*emr.Cluster, error) { - output, err := conn.DescribeClusterWithContext(ctx, input) - - if tfawserr.ErrCodeEquals(err, ErrCodeClusterNotFound) || tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "is not valid") { - return nil, &retry.NotFoundError{ - LastError: err, - LastRequest: input, - } - } - - if err != nil { - return nil, err - } - - if output == nil || output.Cluster == nil || output.Cluster.Status == nil { - return nil, tfresource.NewEmptyResultError(input) - } - - return output.Cluster, nil -} - -func findClusterByID(ctx context.Context, conn *emr.EMR, id string) (*emr.Cluster, error) { +func findClusterByID(ctx context.Context, conn *emr.Client, id string) (*awstypes.Cluster, error) { input := &emr.DescribeClusterInput{ ClusterId: aws.String(id), } @@ -1495,15 +1445,15 @@ func findClusterByID(ctx context.Context, conn *emr.EMR, id string) (*emr.Cluste } // Eventual consistency check. - if aws.StringValue(output.Id) != id { + if aws.ToString(output.Id) != id { return nil, &retry.NotFoundError{ LastRequest: input, } } - if state := aws.StringValue(output.Status.State); state == emr.ClusterStateTerminated || state == emr.ClusterStateTerminatedWithErrors { + if output.Status.State == awstypes.ClusterStateTerminated || output.Status.State == awstypes.ClusterStateTerminatedWithErrors { return nil, &retry.NotFoundError{ - Message: state, + Message: string(output.Status.State), LastRequest: input, } } @@ -1511,12 +1461,32 @@ func findClusterByID(ctx context.Context, conn *emr.EMR, id string) (*emr.Cluste return output, nil } -func statusCluster(ctx context.Context, conn *emr.EMR, id string) retry.StateRefreshFunc { +func findCluster(ctx context.Context, conn *emr.Client, input *emr.DescribeClusterInput) (*awstypes.Cluster, error) { + output, err := conn.DescribeCluster(ctx, input) + + if tfawserr.ErrCodeEquals(err, errCodeClusterNotFound) || errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "is not valid") { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, + } + } + + if err != nil { + return nil, err + } + + if output == nil || output.Cluster == nil || output.Cluster.Status == nil { + return nil, tfresource.NewEmptyResultError(input) + } + + return output.Cluster, nil +} + +func statusCluster(ctx context.Context, conn *emr.Client, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { input := &emr.DescribeClusterInput{ ClusterId: aws.String(id), } - output, err := findCluster(ctx, conn, input) if tfresource.NotFound(err) { @@ -1527,17 +1497,17 @@ func statusCluster(ctx context.Context, conn *emr.EMR, id string) retry.StateRef return nil, "", err } - return output, aws.StringValue(output.Status.State), nil + return output, string(output.Status.State), nil } } -func waitClusterCreated(ctx context.Context, conn *emr.EMR, id string) (*emr.Cluster, error) { +func waitClusterCreated(ctx context.Context, conn *emr.Client, id string) (*awstypes.Cluster, error) { const ( timeout = 75 * time.Minute ) stateConf := &retry.StateChangeConf{ - Pending: []string{emr.ClusterStateBootstrapping, emr.ClusterStateStarting}, - Target: []string{emr.ClusterStateRunning, emr.ClusterStateWaiting}, + Pending: enum.Slice(awstypes.ClusterStateBootstrapping, awstypes.ClusterStateStarting), + Target: enum.Slice(awstypes.ClusterStateRunning, awstypes.ClusterStateWaiting), Refresh: statusCluster(ctx, conn, id), Timeout: timeout, MinTimeout: 10 * time.Second, @@ -1546,9 +1516,9 @@ func waitClusterCreated(ctx context.Context, conn *emr.EMR, id string) (*emr.Clu outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*emr.Cluster); ok { + if output, ok := outputRaw.(*awstypes.Cluster); ok { if stateChangeReason := output.Status.StateChangeReason; stateChangeReason != nil { - tfresource.SetLastError(err, fmt.Errorf("%s: %s", aws.StringValue(stateChangeReason.Code), aws.StringValue(stateChangeReason.Message))) + tfresource.SetLastError(err, fmt.Errorf("%s: %s", stateChangeReason.Code, aws.ToString(stateChangeReason.Message))) } return output, err @@ -1557,13 +1527,13 @@ func waitClusterCreated(ctx context.Context, conn *emr.EMR, id string) (*emr.Clu return nil, err } -func waitClusterDeleted(ctx context.Context, conn *emr.EMR, id string) (*emr.Cluster, error) { +func waitClusterDeleted(ctx context.Context, conn *emr.Client, id string) (*awstypes.Cluster, error) { const ( timeout = 20 * time.Minute ) stateConf := &retry.StateChangeConf{ - Pending: []string{emr.ClusterStateTerminating}, - Target: []string{emr.ClusterStateTerminated, emr.ClusterStateTerminatedWithErrors}, + Pending: enum.Slice(awstypes.ClusterStateTerminating), + Target: enum.Slice(awstypes.ClusterStateTerminated, awstypes.ClusterStateTerminatedWithErrors), Refresh: statusCluster(ctx, conn, id), Timeout: timeout, MinTimeout: 10 * time.Second, @@ -1572,9 +1542,9 @@ func waitClusterDeleted(ctx context.Context, conn *emr.EMR, id string) (*emr.Clu outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*emr.Cluster); ok { + if output, ok := outputRaw.(*awstypes.Cluster); ok { if stateChangeReason := output.Status.StateChangeReason; stateChangeReason != nil { - tfresource.SetLastError(err, fmt.Errorf("%s: %s", aws.StringValue(stateChangeReason.Code), aws.StringValue(stateChangeReason.Message))) + tfresource.SetLastError(err, fmt.Errorf("%s: %s", stateChangeReason.Code, aws.ToString(stateChangeReason.Message))) } return output, err @@ -1583,170 +1553,234 @@ func waitClusterDeleted(ctx context.Context, conn *emr.EMR, id string) (*emr.Clu return nil, err } -func expandApplications(apps []interface{}) []*emr.Application { - appOut := make([]*emr.Application, 0, len(apps)) +func findBootstrapActionsByClusterID(ctx context.Context, conn *emr.Client, id string) ([]awstypes.Command, error) { + input := &emr.ListBootstrapActionsInput{ + ClusterId: aws.String(id), + } + + return findBootstrapActions(ctx, conn, input) +} + +func findBootstrapActions(ctx context.Context, conn *emr.Client, input *emr.ListBootstrapActionsInput) ([]awstypes.Command, error) { + var output []awstypes.Command + + pages := emr.NewListBootstrapActionsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) - for _, appName := range flex.ExpandStringList(apps) { - app := &emr.Application{ - Name: appName, + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "is not valid") { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, + } } - appOut = append(appOut, app) + + if err != nil { + return nil, err + } + + output = append(output, page.BootstrapActions...) } - return appOut + + return output, nil } -func flattenApplications(apps []*emr.Application) []interface{} { - appOut := make([]interface{}, 0, len(apps)) +func findStepSummaries(ctx context.Context, conn *emr.Client, input *emr.ListStepsInput) ([]awstypes.StepSummary, error) { + var output []awstypes.StepSummary + + pages := emr.NewListStepsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "is not valid") { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, + } + } + + if err != nil { + return nil, err + } - for _, app := range apps { - appOut = append(appOut, aws.StringValue(app.Name)) + output = append(output, page.Steps...) } - return appOut + + // ListSteps returns steps in reverse order (newest first). + slices.Reverse(output) + + return output, nil } -func flattenEC2InstanceAttributes(ia *emr.Ec2InstanceAttributes) []map[string]interface{} { - attrs := map[string]interface{}{} - result := make([]map[string]interface{}, 0) +func findAutoTerminationPolicyByClusterID(ctx context.Context, conn *emr.Client, id string) (*awstypes.AutoTerminationPolicy, error) { + input := &emr.GetAutoTerminationPolicyInput{ + ClusterId: aws.String(id), + } + + return findAutoTerminationPolicy(ctx, conn, input) +} - if ia.Ec2KeyName != nil { - attrs["key_name"] = aws.StringValue(ia.Ec2KeyName) +func findAutoTerminationPolicy(ctx context.Context, conn *emr.Client, input *emr.GetAutoTerminationPolicyInput) (*awstypes.AutoTerminationPolicy, error) { + output, err := conn.GetAutoTerminationPolicy(ctx, input) + + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "is not valid") || + tfawserr.ErrMessageContains(err, errCodeUnknownOperationException, "Could not find operation GetAutoTerminationPolicy") || + tfawserr.ErrMessageContains(err, errCodeValidationException, "Auto-termination is not available for this account when using this release of EMR") { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, + } } - if ia.Ec2SubnetId != nil { - attrs[names.AttrSubnetID] = aws.StringValue(ia.Ec2SubnetId) + + if err != nil { + return nil, err } - if ia.RequestedEc2SubnetIds != nil && len(ia.RequestedEc2SubnetIds) > 0 { - attrs[names.AttrSubnetIDs] = flex.FlattenStringSet(ia.RequestedEc2SubnetIds) + + if output == nil || output.AutoTerminationPolicy == nil { + return nil, tfresource.NewEmptyResultError(input) } - if ia.IamInstanceProfile != nil { - attrs["instance_profile"] = aws.StringValue(ia.IamInstanceProfile) + + return output.AutoTerminationPolicy, nil +} + +func expandApplications(tfList []interface{}) []awstypes.Application { + apiObjects := make([]awstypes.Application, 0, len(tfList)) + + for _, v := range flex.ExpandStringList(tfList) { + apiObjects = append(apiObjects, awstypes.Application{ + Name: v, + }) } - if ia.EmrManagedMasterSecurityGroup != nil { - attrs["emr_managed_master_security_group"] = aws.StringValue(ia.EmrManagedMasterSecurityGroup) + + return apiObjects +} + +func flattenApplications(apiObjects []awstypes.Application) []interface{} { + return tfslices.ApplyToAll(apiObjects, func(app awstypes.Application) interface{} { + return aws.ToString(app.Name) + }) +} + +func flattenEC2InstanceAttributes(apiObject *awstypes.Ec2InstanceAttributes) []interface{} { + tfList := make([]interface{}, 0) + tfMap := map[string]interface{}{} + + if apiObject.Ec2KeyName != nil { + tfMap["key_name"] = aws.ToString(apiObject.Ec2KeyName) + } + if apiObject.Ec2SubnetId != nil { + tfMap[names.AttrSubnetID] = aws.ToString(apiObject.Ec2SubnetId) + } + if apiObject.RequestedEc2SubnetIds != nil && len(apiObject.RequestedEc2SubnetIds) > 0 { + tfMap[names.AttrSubnetIDs] = flex.FlattenStringValueSet(apiObject.RequestedEc2SubnetIds) } - if ia.EmrManagedSlaveSecurityGroup != nil { - attrs["emr_managed_slave_security_group"] = aws.StringValue(ia.EmrManagedSlaveSecurityGroup) + if apiObject.IamInstanceProfile != nil { + tfMap["instance_profile"] = aws.ToString(apiObject.IamInstanceProfile) + } + if apiObject.EmrManagedMasterSecurityGroup != nil { + tfMap["emr_managed_master_security_group"] = aws.ToString(apiObject.EmrManagedMasterSecurityGroup) + } + if apiObject.EmrManagedSlaveSecurityGroup != nil { + tfMap["emr_managed_slave_security_group"] = aws.ToString(apiObject.EmrManagedSlaveSecurityGroup) } - if len(ia.AdditionalMasterSecurityGroups) > 0 { - strs := aws.StringValueSlice(ia.AdditionalMasterSecurityGroups) - attrs["additional_master_security_groups"] = strings.Join(strs, ",") + if len(apiObject.AdditionalMasterSecurityGroups) > 0 { + tfMap["additional_master_security_groups"] = strings.Join(apiObject.AdditionalMasterSecurityGroups, ",") } - if len(ia.AdditionalSlaveSecurityGroups) > 0 { - strs := aws.StringValueSlice(ia.AdditionalSlaveSecurityGroups) - attrs["additional_slave_security_groups"] = strings.Join(strs, ",") + if len(apiObject.AdditionalSlaveSecurityGroups) > 0 { + tfMap["additional_slave_security_groups"] = strings.Join(apiObject.AdditionalSlaveSecurityGroups, ",") } - if ia.ServiceAccessSecurityGroup != nil { - attrs["service_access_security_group"] = aws.StringValue(ia.ServiceAccessSecurityGroup) + if apiObject.ServiceAccessSecurityGroup != nil { + tfMap["service_access_security_group"] = aws.ToString(apiObject.ServiceAccessSecurityGroup) } - result = append(result, attrs) + tfList = append(tfList, tfMap) - return result + return tfList } -func flattenAutoScalingPolicyDescription(policy *emr.AutoScalingPolicyDescription) (string, error) { - if policy == nil { +// Dirty hack to avoid any backwards compatibility issues with the AWS SDK for Go v2 migration. +// Reach down into the SDK and use the same serialization function that the SDK uses. +// +//go:linkname serializeAutoScalingPolicy github.com/aws/aws-sdk-go-v2/service/emr.awsAwsjson11_serializeDocumentAutoScalingPolicy +func serializeAutoScalingPolicy(v *awstypes.AutoScalingPolicy, value smithyjson.Value) error + +func flattenAutoScalingPolicyDescription(apiObject *awstypes.AutoScalingPolicyDescription) (string, error) { + if apiObject == nil { return "", nil } - // AutoScalingPolicy has an additional Status field and null values that are causing a new hashcode to be generated - // for `instance_group`. - // We are purposefully omitting that field and the null values here when we flatten the autoscaling policy string - // for the statefile. - for i, rule := range policy.Rules { - for j, dimension := range rule.Trigger.CloudWatchAlarmDefinition.Dimensions { - if aws.StringValue(dimension.Key) == "JobFlowId" { - policy.Rules[i].Trigger.CloudWatchAlarmDefinition.Dimensions = slices.Delete(policy.Rules[i].Trigger.CloudWatchAlarmDefinition.Dimensions, j, j+1) - } - } - if len(policy.Rules[i].Trigger.CloudWatchAlarmDefinition.Dimensions) == 0 { - policy.Rules[i].Trigger.CloudWatchAlarmDefinition.Dimensions = nil + for i, rule := range apiObject.Rules { + dimensions := rule.Trigger.CloudWatchAlarmDefinition.Dimensions + dimensions = slices.DeleteFunc(dimensions, func(v awstypes.MetricDimension) bool { + return aws.ToString(v.Key) == "JobFlowId" + }) + if len(dimensions) == 0 { + dimensions = nil } + apiObject.Rules[i].Trigger.CloudWatchAlarmDefinition.Dimensions = dimensions } - tmpAutoScalingPolicy := emr.AutoScalingPolicy{ - Constraints: policy.Constraints, - Rules: policy.Rules, - } - autoscalingPolicyConstraintsBytes, err := json.Marshal(tmpAutoScalingPolicy.Constraints) - if err != nil { - return "", fmt.Errorf("parsing EMR Cluster Instance Groups AutoScalingPolicy Constraints: %w", err) - } - autoscalingPolicyConstraintsString := string(autoscalingPolicyConstraintsBytes) - - autoscalingPolicyRulesBytes, err := json.Marshal(tmpAutoScalingPolicy.Rules) - if err != nil { - return "", fmt.Errorf("parsing EMR Cluster Instance Groups AutoScalingPolicy Rules: %w", err) - } - - var rules []map[string]interface{} - if err := json.Unmarshal(autoscalingPolicyRulesBytes, &rules); err != nil { - return "", err - } - - var cleanRules []map[string]interface{} - for _, rule := range rules { - cleanRules = append(cleanRules, removeNil(rule)) + autoScalingPolicy := &awstypes.AutoScalingPolicy{ + Constraints: apiObject.Constraints, + Rules: apiObject.Rules, } + jsonEncoder := smithyjson.NewEncoder() + err := serializeAutoScalingPolicy(autoScalingPolicy, jsonEncoder.Value) - withoutNulls, err := json.Marshal(cleanRules) if err != nil { return "", err } - autoscalingPolicyRulesString := string(withoutNulls) - autoscalingPolicyString := fmt.Sprintf("{\"Constraints\":%s,\"Rules\":%s}", autoscalingPolicyConstraintsString, autoscalingPolicyRulesString) - - return autoscalingPolicyString, nil + return jsonEncoder.String(), nil } -func flattenCoreInstanceGroup(instanceGroup *emr.InstanceGroup) ([]interface{}, error) { - if instanceGroup == nil { +func flattenCoreInstanceGroup(apiObject *awstypes.InstanceGroup) ([]interface{}, error) { + if apiObject == nil { return []interface{}{}, nil } - autoscalingPolicy, err := flattenAutoScalingPolicyDescription(instanceGroup.AutoScalingPolicy) - + autoscalingPolicy, err := flattenAutoScalingPolicyDescription(apiObject.AutoScalingPolicy) if err != nil { return nil, err } - m := map[string]interface{}{ + tfMap := map[string]interface{}{ "autoscaling_policy": autoscalingPolicy, - "bid_price": aws.StringValue(instanceGroup.BidPrice), - "ebs_config": flattenEBSConfig(instanceGroup.EbsBlockDevices), - names.AttrID: aws.StringValue(instanceGroup.Id), - names.AttrInstanceCount: aws.Int64Value(instanceGroup.RequestedInstanceCount), - names.AttrInstanceType: aws.StringValue(instanceGroup.InstanceType), - names.AttrName: aws.StringValue(instanceGroup.Name), + "bid_price": aws.ToString(apiObject.BidPrice), + "ebs_config": flattenEBSConfig(apiObject.EbsBlockDevices), + names.AttrID: aws.ToString(apiObject.Id), + names.AttrInstanceCount: aws.ToInt32(apiObject.RequestedInstanceCount), + names.AttrInstanceType: aws.ToString(apiObject.InstanceType), + names.AttrName: aws.ToString(apiObject.Name), } - return []interface{}{m}, nil + return []interface{}{tfMap}, nil } -func flattenMasterInstanceGroup(instanceGroup *emr.InstanceGroup) []interface{} { - if instanceGroup == nil { +func flattenMasterInstanceGroup(apiObject *awstypes.InstanceGroup) []interface{} { + if apiObject == nil { return []interface{}{} } - m := map[string]interface{}{ - "bid_price": aws.StringValue(instanceGroup.BidPrice), - "ebs_config": flattenEBSConfig(instanceGroup.EbsBlockDevices), - names.AttrID: aws.StringValue(instanceGroup.Id), - names.AttrInstanceCount: aws.Int64Value(instanceGroup.RequestedInstanceCount), - names.AttrInstanceType: aws.StringValue(instanceGroup.InstanceType), - names.AttrName: aws.StringValue(instanceGroup.Name), + tfMap := map[string]interface{}{ + "bid_price": aws.ToString(apiObject.BidPrice), + "ebs_config": flattenEBSConfig(apiObject.EbsBlockDevices), + names.AttrID: aws.ToString(apiObject.Id), + names.AttrInstanceCount: aws.ToInt32(apiObject.RequestedInstanceCount), + names.AttrInstanceType: aws.ToString(apiObject.InstanceType), + names.AttrName: aws.ToString(apiObject.Name), } - return []interface{}{m} + return []interface{}{tfMap} } -func flattenKerberosAttributes(d *schema.ResourceData, kerberosAttributes *emr.KerberosAttributes) []map[string]interface{} { - l := make([]map[string]interface{}, 0) +func flattenKerberosAttributes(d *schema.ResourceData, apiObject *awstypes.KerberosAttributes) []interface{} { + tfList := make([]interface{}, 0) - if kerberosAttributes == nil || kerberosAttributes.Realm == nil { - return l + if apiObject == nil || apiObject.Realm == nil { + return tfList } // Do not set from API: @@ -1755,284 +1789,297 @@ func flattenKerberosAttributes(d *schema.ResourceData, kerberosAttributes *emr.K // * cross_realm_trust_principal_password // * kdc_admin_password - m := map[string]interface{}{ + tfMap := map[string]interface{}{ "kdc_admin_password": d.Get("kerberos_attributes.0.kdc_admin_password").(string), - "realm": aws.StringValue(kerberosAttributes.Realm), + "realm": aws.ToString(apiObject.Realm), } if v, ok := d.GetOk("kerberos_attributes.0.ad_domain_join_password"); ok { - m["ad_domain_join_password"] = v.(string) + tfMap["ad_domain_join_password"] = v.(string) } if v, ok := d.GetOk("kerberos_attributes.0.ad_domain_join_user"); ok { - m["ad_domain_join_user"] = v.(string) + tfMap["ad_domain_join_user"] = v.(string) } if v, ok := d.GetOk("kerberos_attributes.0.cross_realm_trust_principal_password"); ok { - m["cross_realm_trust_principal_password"] = v.(string) + tfMap["cross_realm_trust_principal_password"] = v.(string) } - l = append(l, m) + tfList = append(tfList, tfMap) - return l + return tfList } -func flattenHadoopStepConfig(config *emr.HadoopStepConfig) map[string]interface{} { - if config == nil { +func flattenHadoopStepConfig(apiObject *awstypes.HadoopStepConfig) map[string]interface{} { + if apiObject == nil { return nil } - m := map[string]interface{}{ - "args": aws.StringValueSlice(config.Args), - "jar": aws.StringValue(config.Jar), - "main_class": aws.StringValue(config.MainClass), - names.AttrProperties: aws.StringValueMap(config.Properties), + tfMap := map[string]interface{}{ + "args": apiObject.Args, + "jar": aws.ToString(apiObject.Jar), + "main_class": aws.ToString(apiObject.MainClass), + names.AttrProperties: apiObject.Properties, } - return m + return tfMap } -func flattenStepSummaries(stepSummaries []*emr.StepSummary) []map[string]interface{} { - l := make([]map[string]interface{}, 0) +func flattenStepSummaries(apiObjects []awstypes.StepSummary) []interface{} { + tfList := make([]interface{}, 0) - if len(stepSummaries) == 0 { - return l + if len(apiObjects) == 0 { + return tfList } - for _, stepSummary := range stepSummaries { - l = append(l, flattenStepSummary(stepSummary)) + for _, apiObject := range apiObjects { + tfList = append(tfList, flattenStepSummary(&apiObject)) } - return l + return tfList } -func flattenStepSummary(stepSummary *emr.StepSummary) map[string]interface{} { - if stepSummary == nil { +func flattenStepSummary(apiObject *awstypes.StepSummary) map[string]interface{} { + if apiObject == nil { return nil } - m := map[string]interface{}{ - "action_on_failure": aws.StringValue(stepSummary.ActionOnFailure), - "hadoop_jar_step": []map[string]interface{}{flattenHadoopStepConfig(stepSummary.Config)}, - names.AttrName: aws.StringValue(stepSummary.Name), + tfMap := map[string]interface{}{ + "action_on_failure": apiObject.ActionOnFailure, + "hadoop_jar_step": []map[string]interface{}{flattenHadoopStepConfig(apiObject.Config)}, + names.AttrName: aws.ToString(apiObject.Name), } - return m + return tfMap } -func flattenEBSConfig(ebsBlockDevices []*emr.EbsBlockDevice) *schema.Set { +func flattenEBSConfig(apiObjects []awstypes.EbsBlockDevice) *schema.Set { uniqueEBS := make(map[int]int) - ebsConfig := make([]interface{}, 0) - for _, ebs := range ebsBlockDevices { - ebsAttrs := make(map[string]interface{}) - if ebs.VolumeSpecification.Iops != nil { - ebsAttrs[names.AttrIOPS] = int(aws.Int64Value(ebs.VolumeSpecification.Iops)) + tfList := make([]interface{}, 0) + + for _, apiObject := range apiObjects { + tfMap := make(map[string]interface{}) + + if apiObject.VolumeSpecification.Iops != nil { + tfMap[names.AttrIOPS] = int(aws.ToInt32(apiObject.VolumeSpecification.Iops)) } - if ebs.VolumeSpecification.SizeInGB != nil { - ebsAttrs[names.AttrSize] = int(aws.Int64Value(ebs.VolumeSpecification.SizeInGB)) + if apiObject.VolumeSpecification.SizeInGB != nil { + tfMap[names.AttrSize] = int(aws.ToInt32(apiObject.VolumeSpecification.SizeInGB)) } - if ebs.VolumeSpecification.Throughput != nil { - ebsAttrs[names.AttrThroughput] = aws.Int64Value(ebs.VolumeSpecification.Throughput) + if apiObject.VolumeSpecification.Throughput != nil { + tfMap[names.AttrThroughput] = aws.ToInt32(apiObject.VolumeSpecification.Throughput) } - if ebs.VolumeSpecification.VolumeType != nil { - ebsAttrs[names.AttrType] = aws.StringValue(ebs.VolumeSpecification.VolumeType) + if apiObject.VolumeSpecification.VolumeType != nil { + tfMap[names.AttrType] = aws.ToString(apiObject.VolumeSpecification.VolumeType) } - ebsAttrs["volumes_per_instance"] = 1 - uniqueEBS[resourceClusterEBSHashConfig(ebsAttrs)] += 1 - ebsConfig = append(ebsConfig, ebsAttrs) + tfMap["volumes_per_instance"] = 1 + + uniqueEBS[resourceClusterEBSHashConfig(tfMap)] += 1 + + tfList = append(tfList, tfMap) } - for _, ebs := range ebsConfig { - ebs.(map[string]interface{})["volumes_per_instance"] = uniqueEBS[resourceClusterEBSHashConfig(ebs)] + for _, tfMapRaw := range tfList { + tfMapRaw.(map[string]interface{})["volumes_per_instance"] = uniqueEBS[resourceClusterEBSHashConfig(tfMapRaw)] } - return schema.NewSet(resourceClusterEBSHashConfig, ebsConfig) + + return schema.NewSet(resourceClusterEBSHashConfig, tfList) } -func flattenBootstrapArguments(actions []*emr.Command) []map[string]interface{} { - result := make([]map[string]interface{}, 0) +func flattenBootstrapArguments(apiObjects []awstypes.Command) []interface{} { + tfList := make([]interface{}, 0) + + for _, apiObject := range apiObjects { + tfMap := make(map[string]interface{}) + + tfMap[names.AttrName] = aws.ToString(apiObject.Name) + tfMap[names.AttrPath] = aws.ToString(apiObject.ScriptPath) + tfMap["args"] = apiObject.Args - for _, b := range actions { - attrs := make(map[string]interface{}) - attrs[names.AttrName] = aws.StringValue(b.Name) - attrs[names.AttrPath] = aws.StringValue(b.ScriptPath) - attrs["args"] = flex.FlattenStringList(b.Args) - result = append(result, attrs) + tfList = append(tfList, tfMap) } - return result + return tfList } -func coreInstanceGroup(grps []*emr.InstanceGroup) *emr.InstanceGroup { - for _, grp := range grps { - if aws.StringValue(grp.InstanceGroupType) == emr.InstanceGroupTypeCore { - return grp - } - } - return nil +func coreInstanceGroup(grps []awstypes.InstanceGroup) (*awstypes.InstanceGroup, error) { + return tfresource.AssertSingleValueResult(tfslices.Filter(grps, func(v awstypes.InstanceGroup) bool { + return v.InstanceGroupType == awstypes.InstanceGroupTypeCore + })) } -func expandBootstrapActions(bootstrapActions []interface{}) []*emr.BootstrapActionConfig { - actionsOut := []*emr.BootstrapActionConfig{} +func expandBootstrapActions(tfList []interface{}) []awstypes.BootstrapActionConfig { + apiObjects := []awstypes.BootstrapActionConfig{} - for _, raw := range bootstrapActions { - actionAttributes := raw.(map[string]interface{}) - actionName := actionAttributes[names.AttrName].(string) - actionPath := actionAttributes[names.AttrPath].(string) - actionArgs := actionAttributes["args"].([]interface{}) + for _, tfMapRaw := range tfList { + tfMap := tfMapRaw.(map[string]interface{}) - action := &emr.BootstrapActionConfig{ - Name: aws.String(actionName), - ScriptBootstrapAction: &emr.ScriptBootstrapActionConfig{ - Path: aws.String(actionPath), - Args: flex.ExpandStringListEmpty(actionArgs), + apiObject := awstypes.BootstrapActionConfig{ + Name: aws.String(tfMap[names.AttrName].(string)), + ScriptBootstrapAction: &awstypes.ScriptBootstrapActionConfig{ + Path: aws.String(tfMap[names.AttrPath].(string)), + Args: flex.ExpandStringValueListEmpty(tfMap["args"].([]interface{})), }, } - actionsOut = append(actionsOut, action) + + apiObjects = append(apiObjects, apiObject) } - return actionsOut + return apiObjects } -func expandHadoopJarStepConfig(m map[string]interface{}) *emr.HadoopJarStepConfig { - hadoopJarStepConfig := &emr.HadoopJarStepConfig{ - Jar: aws.String(m["jar"].(string)), +func expandHadoopJarStepConfig(tfMap map[string]interface{}) *awstypes.HadoopJarStepConfig { + apiObject := &awstypes.HadoopJarStepConfig{ + Jar: aws.String(tfMap["jar"].(string)), } - if v, ok := m["args"]; ok { - hadoopJarStepConfig.Args = flex.ExpandStringList(v.([]interface{})) + if v, ok := tfMap["args"]; ok { + apiObject.Args = flex.ExpandStringValueList(v.([]interface{})) } - if v, ok := m["main_class"]; ok { - hadoopJarStepConfig.MainClass = aws.String(v.(string)) + if v, ok := tfMap["main_class"]; ok { + apiObject.MainClass = aws.String(v.(string)) } - if v, ok := m[names.AttrProperties]; ok { - hadoopJarStepConfig.Properties = expandKeyValues(v.(map[string]interface{})) + if v, ok := tfMap[names.AttrProperties]; ok { + apiObject.Properties = expandKeyValues(v.(map[string]interface{})) } - return hadoopJarStepConfig + return apiObject } -func expandKeyValues(m map[string]interface{}) []*emr.KeyValue { - keyValues := make([]*emr.KeyValue, 0) +func expandKeyValues(tfMap map[string]interface{}) []awstypes.KeyValue { + apiObjects := make([]awstypes.KeyValue, 0) - for k, v := range m { - keyValue := &emr.KeyValue{ + for k, v := range tfMap { + apiObject := awstypes.KeyValue{ Key: aws.String(k), Value: aws.String(v.(string)), } - keyValues = append(keyValues, keyValue) + + apiObjects = append(apiObjects, apiObject) } - return keyValues + return apiObjects } -func expandKerberosAttributes(m map[string]interface{}) *emr.KerberosAttributes { - kerberosAttributes := &emr.KerberosAttributes{ - KdcAdminPassword: aws.String(m["kdc_admin_password"].(string)), - Realm: aws.String(m["realm"].(string)), +func expandKerberosAttributes(tfMap map[string]interface{}) *awstypes.KerberosAttributes { + apiObject := &awstypes.KerberosAttributes{ + KdcAdminPassword: aws.String(tfMap["kdc_admin_password"].(string)), + Realm: aws.String(tfMap["realm"].(string)), } - if v, ok := m["ad_domain_join_password"]; ok && v.(string) != "" { - kerberosAttributes.ADDomainJoinPassword = aws.String(v.(string)) + + if v, ok := tfMap["ad_domain_join_password"]; ok && v.(string) != "" { + apiObject.ADDomainJoinPassword = aws.String(v.(string)) } - if v, ok := m["ad_domain_join_user"]; ok && v.(string) != "" { - kerberosAttributes.ADDomainJoinUser = aws.String(v.(string)) + if v, ok := tfMap["ad_domain_join_user"]; ok && v.(string) != "" { + apiObject.ADDomainJoinUser = aws.String(v.(string)) } - if v, ok := m["cross_realm_trust_principal_password"]; ok && v.(string) != "" { - kerberosAttributes.CrossRealmTrustPrincipalPassword = aws.String(v.(string)) + if v, ok := tfMap["cross_realm_trust_principal_password"]; ok && v.(string) != "" { + apiObject.CrossRealmTrustPrincipalPassword = aws.String(v.(string)) } - return kerberosAttributes -} -func expandStepConfig(m map[string]interface{}) *emr.StepConfig { - hadoopJarStepList := m["hadoop_jar_step"].([]interface{}) - hadoopJarStepMap := hadoopJarStepList[0].(map[string]interface{}) + return apiObject +} - stepConfig := &emr.StepConfig{ - ActionOnFailure: aws.String(m["action_on_failure"].(string)), - HadoopJarStep: expandHadoopJarStepConfig(hadoopJarStepMap), - Name: aws.String(m[names.AttrName].(string)), +func expandStepConfig(tfMap map[string]interface{}) awstypes.StepConfig { + apiObject := awstypes.StepConfig{ + ActionOnFailure: awstypes.ActionOnFailure(tfMap["action_on_failure"].(string)), + HadoopJarStep: expandHadoopJarStepConfig(tfMap["hadoop_jar_step"].([]interface{})[0].(map[string]interface{})), + Name: aws.String(tfMap[names.AttrName].(string)), } - return stepConfig + return apiObject } -func expandStepConfigs(l []interface{}) []*emr.StepConfig { - stepConfigs := []*emr.StepConfig{} +func expandStepConfigs(tfList []interface{}) []awstypes.StepConfig { + apiObjects := []awstypes.StepConfig{} - for _, raw := range l { - m := raw.(map[string]interface{}) - stepConfigs = append(stepConfigs, expandStepConfig(m)) + for _, tfMapRaw := range tfList { + tfMap := tfMapRaw.(map[string]interface{}) + apiObjects = append(apiObjects, expandStepConfig(tfMap)) } - return stepConfigs + return apiObjects } -func expandEBSConfig(configAttributes map[string]interface{}, config *emr.InstanceGroupConfig) { - if rawEbsConfigs, ok := configAttributes["ebs_config"]; ok { - ebsConfig := &emr.EbsConfiguration{} - - ebsBlockDeviceConfigs := make([]*emr.EbsBlockDeviceConfig, 0) - for _, rawEbsConfig := range rawEbsConfigs.(*schema.Set).List() { - rawEbsConfig := rawEbsConfig.(map[string]interface{}) - ebsBlockDeviceConfig := &emr.EbsBlockDeviceConfig{ - VolumesPerInstance: aws.Int64(int64(rawEbsConfig["volumes_per_instance"].(int))), - VolumeSpecification: &emr.VolumeSpecification{ - SizeInGB: aws.Int64(int64(rawEbsConfig[names.AttrSize].(int))), - VolumeType: aws.String(rawEbsConfig[names.AttrType].(string)), +func expandEBSConfig(tfMap map[string]interface{}, apiObject *awstypes.InstanceGroupConfig) { + if v, ok := tfMap["ebs_config"]; ok { + ebsConfig := &awstypes.EbsConfiguration{} + ebsBlockDeviceConfigs := make([]awstypes.EbsBlockDeviceConfig, 0) + + for _, v := range v.(*schema.Set).List() { + tfMap := v.(map[string]interface{}) + ebsBlockDeviceConfig := awstypes.EbsBlockDeviceConfig{ + VolumesPerInstance: aws.Int32(int32(tfMap["volumes_per_instance"].(int))), + VolumeSpecification: &awstypes.VolumeSpecification{ + SizeInGB: aws.Int32(int32(tfMap[names.AttrSize].(int))), + VolumeType: aws.String(tfMap[names.AttrType].(string)), }, } - if v, ok := rawEbsConfig[names.AttrThroughput].(int); ok && v != 0 { - ebsBlockDeviceConfig.VolumeSpecification.Throughput = aws.Int64(int64(v)) + + if v, ok := tfMap[names.AttrThroughput].(int); ok && v != 0 { + ebsBlockDeviceConfig.VolumeSpecification.Throughput = aws.Int32(int32(v)) } - if v, ok := rawEbsConfig[names.AttrIOPS].(int); ok && v != 0 { - ebsBlockDeviceConfig.VolumeSpecification.Iops = aws.Int64(int64(v)) + if v, ok := tfMap[names.AttrIOPS].(int); ok && v != 0 { + ebsBlockDeviceConfig.VolumeSpecification.Iops = aws.Int32(int32(v)) } + ebsBlockDeviceConfigs = append(ebsBlockDeviceConfigs, ebsBlockDeviceConfig) } + ebsConfig.EbsBlockDeviceConfigs = ebsBlockDeviceConfigs - config.EbsConfiguration = ebsConfig + apiObject.EbsConfiguration = ebsConfig } } -func expandConfigurationJSON(input string) ([]*emr.Configuration, error) { - configsOut := []*emr.Configuration{} - err := json.Unmarshal([]byte(input), &configsOut) - if err != nil { +func expandConfigurationJSON(tfString string) ([]awstypes.Configuration, error) { + apiObjects := []awstypes.Configuration{} + + if err := tfjson.DecodeFromString(tfString, &apiObjects); err != nil { return nil, err } - log.Printf("[DEBUG] Expanded EMR Configurations %s", configsOut) - return configsOut, nil + return apiObjects, nil } -func flattenConfigurationJSON(config []*emr.Configuration) (string, error) { - out, err := jsonutil.BuildJSON(config) +// Dirty hack to avoid any backwards compatibility issues with the AWS SDK for Go v2 migration. +// Reach down into the SDK and use the same serialization function that the SDK uses. +// +//go:linkname serializeConfigurations github.com/aws/aws-sdk-go-v2/service/emr.awsAwsjson11_serializeDocumentConfigurationList +func serializeConfigurations(v []awstypes.Configuration, value smithyjson.Value) error + +func flattenConfigurationJSON(apiObjects []awstypes.Configuration) (string, error) { + jsonEncoder := smithyjson.NewEncoder() + err := serializeConfigurations(apiObjects, jsonEncoder.Value) + if err != nil { return "", err } - return string(out), nil + + return jsonEncoder.String(), nil } -func expandConfigures(input string) []*emr.Configuration { - configsOut := []*emr.Configuration{} - if strings.HasPrefix(input, "http") { - if err := readHTTPJSON(input, &configsOut); err != nil { +func expandConfigures(tfString string) []awstypes.Configuration { + apiObjects := []awstypes.Configuration{} + + if strings.HasPrefix(tfString, "http") { + if err := readHTTPJSON(tfString, &apiObjects); err != nil { log.Printf("[ERR] Error reading HTTP JSON: %s", err) } - } else if strings.HasSuffix(input, ".json") { - if err := readLocalJSON(input, &configsOut); err != nil { + } else if strings.HasSuffix(tfString, ".json") { + if err := readLocalJSON(tfString, &apiObjects); err != nil { log.Printf("[ERR] Error reading local JSON: %s", err) } } else { - if err := readBodyJSON(input, &configsOut); err != nil { + if err := readBodyJSON(tfString, &apiObjects); err != nil { log.Printf("[ERR] Error reading body JSON: %s", err) } } - log.Printf("[DEBUG] Expanded EMR Configurations %s", configsOut) - return configsOut + return apiObjects } func readHTTPJSON(url string, target interface{}) error { @@ -2042,234 +2089,207 @@ func readHTTPJSON(url string, target interface{}) error { } defer r.Body.Close() - return json.NewDecoder(r.Body).Decode(target) + return tfjson.DecodeFromReader(r.Body, target) } func readLocalJSON(localFile string, target interface{}) error { - file, e := os.ReadFile(localFile) - if e != nil { - log.Printf("[ERROR] %s", e) - return e + file, err := os.Open(localFile) + if err != nil { + return err } + defer file.Close() - return json.Unmarshal(file, target) + return tfjson.DecodeFromReader(file, target) } func readBodyJSON(body string, target interface{}) error { - log.Printf("[DEBUG] Raw Body %s\n", body) - err := json.Unmarshal([]byte(body), target) - if err != nil { - log.Printf("[ERROR] parsing JSON %s", err) - return err - } - return nil + return tfjson.DecodeFromString(body, target) } -func findMasterGroup(instanceGroups []*emr.InstanceGroup) *emr.InstanceGroup { - for _, group := range instanceGroups { - if aws.StringValue(group.InstanceGroupType) == emr.InstanceRoleTypeMaster { - return group - } - } - return nil +func masterInstanceGroup(instanceGroups []awstypes.InstanceGroup) (*awstypes.InstanceGroup, error) { + return tfresource.AssertSingleValueResult(tfslices.Filter(instanceGroups, func(v awstypes.InstanceGroup) bool { + return v.InstanceGroupType == awstypes.InstanceGroupTypeMaster + })) } -func resourceClusterEBSHashConfig(v interface{}) int { - var buf bytes.Buffer - m := v.(map[string]interface{}) - buf.WriteString(fmt.Sprintf("%d-", m[names.AttrSize].(int))) - buf.WriteString(fmt.Sprintf("%s-", m[names.AttrType].(string))) - buf.WriteString(fmt.Sprintf("%d-", m["volumes_per_instance"].(int))) - if v, ok := m[names.AttrThroughput].(int); ok && v != 0 { - buf.WriteString(fmt.Sprintf("%d-", v)) - } - if v, ok := m[names.AttrIOPS].(int); ok && v != 0 { - buf.WriteString(fmt.Sprintf("%d-", v)) - } - return create.StringHashcode(buf.String()) -} +var resourceClusterEBSHashConfig = sdkv2.SimpleSchemaSetFunc( + names.AttrSize, + names.AttrType, + "volumes_per_instance", + names.AttrThroughput, + names.AttrIOPS, +) -func getCoreInstanceGroupAutoScalingPolicy(ctx context.Context, conn *emr.EMR, clusterID string) (*emr.AutoScalingPolicyDescription, error) { - instanceGroups, err := fetchAllInstanceGroups(ctx, conn, clusterID) +func findCoreInstanceGroupAutoScalingPolicy(ctx context.Context, conn *emr.Client, clusterID string) (*awstypes.AutoScalingPolicyDescription, error) { + instanceGroups, err := findInstanceGroupsByClusterID(ctx, conn, clusterID) if err != nil { return nil, err } - coreGroup := coreInstanceGroup(instanceGroups) + instanceGroup, err := coreInstanceGroup(instanceGroups) + + if err != nil { + return nil, err + } - if coreGroup == nil { - return nil, fmt.Errorf("EMR Cluster (%s) Core Instance Group not found", clusterID) + if instanceGroup.AutoScalingPolicy == nil { + return nil, tfresource.NewEmptyResultError(nil) } - return coreGroup.AutoScalingPolicy, nil + return instanceGroup.AutoScalingPolicy, nil } -func fetchAllInstanceGroups(ctx context.Context, conn *emr.EMR, clusterID string) ([]*emr.InstanceGroup, error) { +func findInstanceGroupsByClusterID(ctx context.Context, conn *emr.Client, clusterID string) ([]awstypes.InstanceGroup, error) { input := &emr.ListInstanceGroupsInput{ ClusterId: aws.String(clusterID), } - var groups []*emr.InstanceGroup - err := conn.ListInstanceGroupsPagesWithContext(ctx, input, func(page *emr.ListInstanceGroupsOutput, lastPage bool) bool { - groups = append(groups, page.InstanceGroups...) - - return !lastPage - }) - - return groups, err + return findInstanceGroups(ctx, conn, input, tfslices.PredicateTrue[*awstypes.InstanceGroup]()) } -func readInstanceFleetConfig(data map[string]interface{}, InstanceFleetType string) *emr.InstanceFleetConfig { - config := &emr.InstanceFleetConfig{ - InstanceFleetType: &InstanceFleetType, - Name: aws.String(data[names.AttrName].(string)), - TargetOnDemandCapacity: aws.Int64(int64(data["target_on_demand_capacity"].(int))), - TargetSpotCapacity: aws.Int64(int64(data["target_spot_capacity"].(int))), +func expandInstanceFleetConfig(tfMap map[string]interface{}, instanceFleetType awstypes.InstanceFleetType) *awstypes.InstanceFleetConfig { + apiObject := &awstypes.InstanceFleetConfig{ + InstanceFleetType: instanceFleetType, + Name: aws.String(tfMap[names.AttrName].(string)), + TargetOnDemandCapacity: aws.Int32(int32(tfMap["target_on_demand_capacity"].(int))), + TargetSpotCapacity: aws.Int32(int32(tfMap["target_spot_capacity"].(int))), } - if v, ok := data["instance_type_configs"].(*schema.Set); ok && v.Len() > 0 { - config.InstanceTypeConfigs = expandInstanceTypeConfigs(v.List()) + if v, ok := tfMap["instance_type_configs"].(*schema.Set); ok && v.Len() > 0 { + apiObject.InstanceTypeConfigs = expandInstanceTypeConfigs(v.List()) } - if v, ok := data["launch_specifications"].([]interface{}); ok && len(v) == 1 && v[0] != nil { - config.LaunchSpecifications = expandLaunchSpecification(v[0].(map[string]interface{})) + if v, ok := tfMap["launch_specifications"].([]interface{}); ok && len(v) == 1 && v[0] != nil { + apiObject.LaunchSpecifications = expandLaunchSpecification(v[0].(map[string]interface{})) } - return config + return apiObject } -func FetchAllInstanceFleets(ctx context.Context, conn *emr.EMR, clusterID string) ([]*emr.InstanceFleet, error) { +func findInstanceFleetsByClusterID(ctx context.Context, conn *emr.Client, clusterID string) ([]awstypes.InstanceFleet, error) { input := &emr.ListInstanceFleetsInput{ ClusterId: aws.String(clusterID), } - var fleets []*emr.InstanceFleet - - err := conn.ListInstanceFleetsPagesWithContext(ctx, input, func(page *emr.ListInstanceFleetsOutput, lastPage bool) bool { - fleets = append(fleets, page.InstanceFleets...) - - return !lastPage - }) - return fleets, err + return findInstanceFleets(ctx, conn, input, tfslices.PredicateTrue[*awstypes.InstanceFleet]()) } -func findInstanceFleet(instanceFleets []*emr.InstanceFleet, instanceRoleType string) *emr.InstanceFleet { - for _, instanceFleet := range instanceFleets { - if instanceFleet.InstanceFleetType != nil { - if aws.StringValue(instanceFleet.InstanceFleetType) == instanceRoleType { - return instanceFleet - } - } - } - return nil +func instanceFleetForRole(instanceFleets []awstypes.InstanceFleet, instanceRoleType awstypes.InstanceFleetType) (*awstypes.InstanceFleet, error) { + return tfresource.AssertSingleValueResult(tfslices.Filter(instanceFleets, func(v awstypes.InstanceFleet) bool { + return v.InstanceFleetType == instanceRoleType + })) } -func flattenInstanceFleet(instanceFleet *emr.InstanceFleet) []interface{} { - if instanceFleet == nil { +func flattenInstanceFleet(apiObject *awstypes.InstanceFleet) []interface{} { + if apiObject == nil { return []interface{}{} } - m := map[string]interface{}{ - names.AttrID: aws.StringValue(instanceFleet.Id), - names.AttrName: aws.StringValue(instanceFleet.Name), - "target_on_demand_capacity": aws.Int64Value(instanceFleet.TargetOnDemandCapacity), - "target_spot_capacity": aws.Int64Value(instanceFleet.TargetSpotCapacity), - "provisioned_on_demand_capacity": aws.Int64Value(instanceFleet.ProvisionedOnDemandCapacity), - "provisioned_spot_capacity": aws.Int64Value(instanceFleet.ProvisionedSpotCapacity), - "instance_type_configs": flatteninstanceTypeConfigs(instanceFleet.InstanceTypeSpecifications), - "launch_specifications": flattenLaunchSpecifications(instanceFleet.LaunchSpecifications), + tfMap := map[string]interface{}{ + names.AttrID: aws.ToString(apiObject.Id), + names.AttrName: aws.ToString(apiObject.Name), + "target_on_demand_capacity": aws.ToInt32(apiObject.TargetOnDemandCapacity), + "target_spot_capacity": aws.ToInt32(apiObject.TargetSpotCapacity), + "provisioned_on_demand_capacity": aws.ToInt32(apiObject.ProvisionedOnDemandCapacity), + "provisioned_spot_capacity": aws.ToInt32(apiObject.ProvisionedSpotCapacity), + "instance_type_configs": flattenInstanceTypeSpecifications(apiObject.InstanceTypeSpecifications), + "launch_specifications": flattenInstanceFleetProvisioningSpecifications(apiObject.LaunchSpecifications), } - return []interface{}{m} + return []interface{}{tfMap} } -func flatteninstanceTypeConfigs(instanceTypeSpecifications []*emr.InstanceTypeSpecification) *schema.Set { - instanceTypeConfigs := make([]interface{}, 0) +func flattenInstanceTypeSpecifications(apiObjects []awstypes.InstanceTypeSpecification) []interface{} { + tfList := make([]interface{}, 0) - for _, itc := range instanceTypeSpecifications { - flattenTypeConfig := make(map[string]interface{}) + for _, apiObject := range apiObjects { + tfMap := make(map[string]interface{}) - if itc.BidPrice != nil { - flattenTypeConfig["bid_price"] = aws.StringValue(itc.BidPrice) + if apiObject.BidPrice != nil { + tfMap["bid_price"] = aws.ToString(apiObject.BidPrice) } - if itc.BidPriceAsPercentageOfOnDemandPrice != nil { - flattenTypeConfig["bid_price_as_percentage_of_on_demand_price"] = aws.Float64Value(itc.BidPriceAsPercentageOfOnDemandPrice) + if apiObject.BidPriceAsPercentageOfOnDemandPrice != nil { + tfMap["bid_price_as_percentage_of_on_demand_price"] = aws.ToFloat64(apiObject.BidPriceAsPercentageOfOnDemandPrice) } - flattenTypeConfig[names.AttrInstanceType] = aws.StringValue(itc.InstanceType) - flattenTypeConfig["weighted_capacity"] = int(aws.Int64Value(itc.WeightedCapacity)) - - flattenTypeConfig["ebs_config"] = flattenEBSConfig(itc.EbsBlockDevices) + tfMap["ebs_config"] = flattenEBSConfig(apiObject.EbsBlockDevices) + tfMap[names.AttrInstanceType] = aws.ToString(apiObject.InstanceType) + tfMap["weighted_capacity"] = int(aws.ToInt32(apiObject.WeightedCapacity)) - instanceTypeConfigs = append(instanceTypeConfigs, flattenTypeConfig) + tfList = append(tfList, tfMap) } - return schema.NewSet(resourceInstanceTypeHashConfig, instanceTypeConfigs) + return tfList } -func flattenLaunchSpecifications(launchSpecifications *emr.InstanceFleetProvisioningSpecifications) []interface{} { - if launchSpecifications == nil { +func flattenInstanceFleetProvisioningSpecifications(apiObject *awstypes.InstanceFleetProvisioningSpecifications) []interface{} { + if apiObject == nil { return []interface{}{} } - m := map[string]interface{}{ - "on_demand_specification": flattenOnDemandSpecification(launchSpecifications.OnDemandSpecification), - "spot_specification": flattenSpotSpecification(launchSpecifications.SpotSpecification), + tfMap := map[string]interface{}{ + "on_demand_specification": flattenOnDemandProvisioningSpecification(apiObject.OnDemandSpecification), + "spot_specification": flattenSpotProvisioningSpecification(apiObject.SpotSpecification), } - return []interface{}{m} + + return []interface{}{tfMap} } -func flattenOnDemandSpecification(onDemandSpecification *emr.OnDemandProvisioningSpecification) []interface{} { - if onDemandSpecification == nil { +func flattenOnDemandProvisioningSpecification(apiObject *awstypes.OnDemandProvisioningSpecification) []interface{} { + if apiObject == nil { return []interface{}{} } - m := map[string]interface{}{ + + tfMap := map[string]interface{}{ // The return value from api is wrong. it return the value with uppercase letters and '_' vs. '-' // The value needs to be normalized to avoid perpetual difference in the Terraform plan - "allocation_strategy": strings.Replace(strings.ToLower(aws.StringValue(onDemandSpecification.AllocationStrategy)), "_", "-", -1), + "allocation_strategy": strings.Replace(strings.ToLower(string(apiObject.AllocationStrategy)), "_", "-", -1), } - return []interface{}{m} + + return []interface{}{tfMap} } -func flattenSpotSpecification(spotSpecification *emr.SpotProvisioningSpecification) []interface{} { - if spotSpecification == nil { +func flattenSpotProvisioningSpecification(apiObject *awstypes.SpotProvisioningSpecification) []interface{} { + if apiObject == nil { return []interface{}{} } - m := map[string]interface{}{ - "timeout_action": aws.StringValue(spotSpecification.TimeoutAction), - "timeout_duration_minutes": aws.Int64Value(spotSpecification.TimeoutDurationMinutes), - } - if spotSpecification.BlockDurationMinutes != nil { - m["block_duration_minutes"] = aws.Int64Value(spotSpecification.BlockDurationMinutes) + + tfMap := map[string]interface{}{ + "timeout_action": apiObject.TimeoutAction, + "timeout_duration_minutes": aws.ToInt32(apiObject.TimeoutDurationMinutes), } - if spotSpecification.AllocationStrategy != nil { - // The return value from api is wrong. it return the value with uppercase letters and '_' vs. '-' - // The value needs to be normalized to avoid perpetual difference in the Terraform plan - m["allocation_strategy"] = strings.Replace(strings.ToLower(aws.StringValue(spotSpecification.AllocationStrategy)), "_", "-", -1) + + if apiObject.BlockDurationMinutes != nil { + tfMap["block_duration_minutes"] = aws.ToInt32(apiObject.BlockDurationMinutes) } - return []interface{}{m} + // The return value from api is wrong. it return the value with uppercase letters and '_' vs. '-' + // The value needs to be normalized to avoid perpetual difference in the Terraform plan + tfMap["allocation_strategy"] = strings.Replace(strings.ToLower(string(apiObject.AllocationStrategy)), "_", "-", -1) + + return []interface{}{tfMap} } -func expandEBSConfiguration(ebsConfigurations []interface{}) *emr.EbsConfiguration { - ebsConfig := &emr.EbsConfiguration{} - ebsConfigs := make([]*emr.EbsBlockDeviceConfig, 0) +// TODO +func expandEBSConfiguration(ebsConfigurations []interface{}) *awstypes.EbsConfiguration { + ebsConfig := &awstypes.EbsConfiguration{} + ebsConfigs := make([]awstypes.EbsBlockDeviceConfig, 0) for _, ebsConfiguration := range ebsConfigurations { cfg := ebsConfiguration.(map[string]interface{}) - ebsBlockDeviceConfig := &emr.EbsBlockDeviceConfig{ - VolumesPerInstance: aws.Int64(int64(cfg["volumes_per_instance"].(int))), - VolumeSpecification: &emr.VolumeSpecification{ - SizeInGB: aws.Int64(int64(cfg[names.AttrSize].(int))), + ebsBlockDeviceConfig := awstypes.EbsBlockDeviceConfig{ + VolumesPerInstance: aws.Int32(int32(cfg["volumes_per_instance"].(int))), + VolumeSpecification: &awstypes.VolumeSpecification{ + SizeInGB: aws.Int32(int32(cfg[names.AttrSize].(int))), VolumeType: aws.String(cfg[names.AttrType].(string)), }, } if v, ok := cfg[names.AttrThroughput].(int); ok && v != 0 { - ebsBlockDeviceConfig.VolumeSpecification.Throughput = aws.Int64(int64(v)) + ebsBlockDeviceConfig.VolumeSpecification.Throughput = aws.Int32(int32(v)) } if v, ok := cfg[names.AttrIOPS].(int); ok && v != 0 { - ebsBlockDeviceConfig.VolumeSpecification.Iops = aws.Int64(int64(v)) + ebsBlockDeviceConfig.VolumeSpecification.Iops = aws.Int32(int32(v)) } ebsConfigs = append(ebsConfigs, ebsBlockDeviceConfig) } @@ -2277,103 +2297,92 @@ func expandEBSConfiguration(ebsConfigurations []interface{}) *emr.EbsConfigurati return ebsConfig } -func expandInstanceTypeConfigs(instanceTypeConfigs []interface{}) []*emr.InstanceTypeConfig { - configsOut := []*emr.InstanceTypeConfig{} +func expandInstanceTypeConfigs(tfList []interface{}) []awstypes.InstanceTypeConfig { + apiObjects := []awstypes.InstanceTypeConfig{} - for _, raw := range instanceTypeConfigs { - configAttributes := raw.(map[string]interface{}) - - config := &emr.InstanceTypeConfig{ - InstanceType: aws.String(configAttributes[names.AttrInstanceType].(string)), + for _, tfMapRaw := range tfList { + tfMap := tfMapRaw.(map[string]interface{}) + apiObject := awstypes.InstanceTypeConfig{ + InstanceType: aws.String(tfMap[names.AttrInstanceType].(string)), } - if bidPrice, ok := configAttributes["bid_price"]; ok { - if bidPrice != "" { - config.BidPrice = aws.String(bidPrice.(string)) - } + if v, ok := tfMap["bid_price"]; ok && v != "" { + apiObject.BidPrice = aws.String(v.(string)) } - if v, ok := configAttributes["bid_price_as_percentage_of_on_demand_price"].(float64); ok && v != 0 { - config.BidPriceAsPercentageOfOnDemandPrice = aws.Float64(v) + if v, ok := tfMap["bid_price_as_percentage_of_on_demand_price"].(float64); ok && v != 0 { + apiObject.BidPriceAsPercentageOfOnDemandPrice = aws.Float64(v) } - if v, ok := configAttributes["weighted_capacity"].(int); ok { - config.WeightedCapacity = aws.Int64(int64(v)) + if v, ok := tfMap["weighted_capacity"].(int); ok { + apiObject.WeightedCapacity = aws.Int32(int32(v)) } - if v, ok := configAttributes["configurations"].(*schema.Set); ok && v.Len() > 0 { - config.Configurations = expandConfigurations(v.List()) + if v, ok := tfMap["configurations"].(*schema.Set); ok && v.Len() > 0 { + apiObject.Configurations = expandConfigurations(v.List()) } - if v, ok := configAttributes["ebs_config"].(*schema.Set); ok && v.Len() == 1 { - config.EbsConfiguration = expandEBSConfiguration(v.List()) + if v, ok := tfMap["ebs_config"].(*schema.Set); ok && v.Len() == 1 { + apiObject.EbsConfiguration = expandEBSConfiguration(v.List()) } - configsOut = append(configsOut, config) + apiObjects = append(apiObjects, apiObject) } - return configsOut + return apiObjects } -func expandLaunchSpecification(launchSpecification map[string]interface{}) *emr.InstanceFleetProvisioningSpecifications { - onDemandSpecification := launchSpecification["on_demand_specification"].([]interface{}) - spotSpecification := launchSpecification["spot_specification"].([]interface{}) - - fleetSpecification := &emr.InstanceFleetProvisioningSpecifications{} +func expandLaunchSpecification(tfMap map[string]interface{}) *awstypes.InstanceFleetProvisioningSpecifications { + apiObject := &awstypes.InstanceFleetProvisioningSpecifications{} - if len(onDemandSpecification) > 0 { - fleetSpecification.OnDemandSpecification = &emr.OnDemandProvisioningSpecification{ - AllocationStrategy: aws.String(onDemandSpecification[0].(map[string]interface{})["allocation_strategy"].(string)), + if v := tfMap["on_demand_specification"].([]interface{}); len(v) > 0 { + apiObject.OnDemandSpecification = &awstypes.OnDemandProvisioningSpecification{ + AllocationStrategy: awstypes.OnDemandProvisioningAllocationStrategy(v[0].(map[string]interface{})["allocation_strategy"].(string)), } } - if len(spotSpecification) > 0 { - configAttributes := spotSpecification[0].(map[string]interface{}) - spotProvisioning := &emr.SpotProvisioningSpecification{ - TimeoutAction: aws.String(configAttributes["timeout_action"].(string)), - TimeoutDurationMinutes: aws.Int64(int64(configAttributes["timeout_duration_minutes"].(int))), + if v := tfMap["spot_specification"].([]interface{}); len(v) > 0 { + tfMap := v[0].(map[string]interface{}) + spotProvisioning := &awstypes.SpotProvisioningSpecification{ + TimeoutAction: awstypes.SpotProvisioningTimeoutAction(tfMap["timeout_action"].(string)), + TimeoutDurationMinutes: aws.Int32(int32(tfMap["timeout_duration_minutes"].(int))), } - if v, ok := configAttributes["block_duration_minutes"]; ok && v != 0 { - spotProvisioning.BlockDurationMinutes = aws.Int64(int64(v.(int))) + if v, ok := tfMap["block_duration_minutes"]; ok && v != 0 { + spotProvisioning.BlockDurationMinutes = aws.Int32(int32(v.(int))) } - if v, ok := configAttributes["allocation_strategy"]; ok { - spotProvisioning.AllocationStrategy = aws.String(v.(string)) + if v, ok := tfMap["allocation_strategy"]; ok { + spotProvisioning.AllocationStrategy = awstypes.SpotProvisioningAllocationStrategy(v.(string)) } - fleetSpecification.SpotSpecification = spotProvisioning + apiObject.SpotSpecification = spotProvisioning } - return fleetSpecification + return apiObject } -func expandConfigurations(configurations []interface{}) []*emr.Configuration { - configsOut := []*emr.Configuration{} +func expandConfigurations(tfList []interface{}) []awstypes.Configuration { + apiObjects := []awstypes.Configuration{} - for _, raw := range configurations { - configAttributes := raw.(map[string]interface{}) + for _, tfMapRaw := range tfList { + tfMap := tfMapRaw.(map[string]interface{}) + apiObject := awstypes.Configuration{} - config := &emr.Configuration{} - - if v, ok := configAttributes["classification"].(string); ok { - config.Classification = aws.String(v) + if v, ok := tfMap["classification"].(string); ok { + apiObject.Classification = aws.String(v) } - if v, ok := configAttributes["configurations"].([]interface{}); ok { - config.Configurations = expandConfigurations(v) + if v, ok := tfMap["configurations"].([]interface{}); ok { + apiObject.Configurations = expandConfigurations(v) } - if v, ok := configAttributes[names.AttrProperties].(map[string]interface{}); ok { - properties := make(map[string]string) - for k, pv := range v { - properties[k] = pv.(string) - } - config.Properties = aws.StringMap(properties) + if v, ok := tfMap[names.AttrProperties].(map[string]interface{}); ok && len(v) > 0 { + apiObject.Properties = flex.ExpandStringValueMap(v) } - configsOut = append(configsOut, config) + apiObjects = append(apiObjects, apiObject) } - return configsOut + return apiObjects } func resourceInstanceTypeHashConfig(v interface{}) int { @@ -2392,93 +2401,73 @@ func resourceInstanceTypeHashConfig(v interface{}) int { return create.StringHashcode(buf.String()) } -func removeNil(data map[string]interface{}) map[string]interface{} { - withoutNil := make(map[string]interface{}) - - for k, v := range data { - if v == nil { - continue - } - - switch v := v.(type) { - case map[string]interface{}: - withoutNil[k] = removeNil(v) - default: - withoutNil[k] = v - } - } - - return withoutNil -} - -func expandAutoTerminationPolicy(policy []interface{}) *emr.AutoTerminationPolicy { - if len(policy) == 0 || policy[0] == nil { +func expandAutoTerminationPolicy(tfList []interface{}) *awstypes.AutoTerminationPolicy { + if len(tfList) == 0 || tfList[0] == nil { return nil } - m := policy[0].(map[string]interface{}) - app := &emr.AutoTerminationPolicy{} + tfMap := tfList[0].(map[string]interface{}) + apiObject := &awstypes.AutoTerminationPolicy{} - if v, ok := m["idle_timeout"].(int); ok && v > 0 { - app.IdleTimeout = aws.Int64(int64(v)) + if v, ok := tfMap["idle_timeout"].(int); ok && v > 0 { + apiObject.IdleTimeout = aws.Int64(int64(v)) } - return app + return apiObject } -func flattenAutoTerminationPolicy(atp *emr.AutoTerminationPolicy) []map[string]interface{} { - attrs := map[string]interface{}{} - result := make([]map[string]interface{}, 0) +func flattenAutoTerminationPolicy(apiObject *awstypes.AutoTerminationPolicy) []interface{} { + tfList := make([]interface{}, 0) - if atp == nil { - return result + if apiObject == nil { + return tfList } - if atp.IdleTimeout != nil { - attrs["idle_timeout"] = aws.Int64Value(atp.IdleTimeout) + tfMap := map[string]interface{}{} + + if apiObject.IdleTimeout != nil { + tfMap["idle_timeout"] = aws.ToInt64(apiObject.IdleTimeout) } - result = append(result, attrs) + tfList = append(tfList, tfMap) - return result + return tfList } -func expandPlacementGroupConfigs(placementGroupConfigs []interface{}) []*emr.PlacementGroupConfig { - placementGroupConfigsOut := []*emr.PlacementGroupConfig{} +func expandPlacementGroupConfigs(tfList []interface{}) []awstypes.PlacementGroupConfig { + apiObjects := []awstypes.PlacementGroupConfig{} - for _, raw := range placementGroupConfigs { - placementGroupAttributes := raw.(map[string]interface{}) - instanceRole := placementGroupAttributes["instance_role"].(string) - - placementGroupConfig := &emr.PlacementGroupConfig{ - InstanceRole: aws.String(instanceRole), + for _, tfMapRaw := range tfList { + tfMap := tfMapRaw.(map[string]interface{}) + apiObject := awstypes.PlacementGroupConfig{ + InstanceRole: awstypes.InstanceRoleType(tfMap["instance_role"].(string)), } - if v, ok := placementGroupAttributes["placement_strategy"]; ok && v.(string) != "" { - placementGroupConfig.PlacementStrategy = aws.String(v.(string)) + + if v, ok := tfMap["placement_strategy"]; ok && v.(string) != "" { + apiObject.PlacementStrategy = awstypes.PlacementGroupStrategy(v.(string)) } - placementGroupConfigsOut = append(placementGroupConfigsOut, placementGroupConfig) + + apiObjects = append(apiObjects, apiObject) } - return placementGroupConfigsOut + return apiObjects } -func flattenPlacementGroupConfigs(placementGroupSpecifications []*emr.PlacementGroupConfig) []interface{} { - if placementGroupSpecifications == nil { +func flattenPlacementGroupConfigs(apiObjects []awstypes.PlacementGroupConfig) []interface{} { + if apiObjects == nil { return []interface{}{} } - placementGroupConfigs := make([]interface{}, 0) + tfList := make([]interface{}, 0) - for _, pgc := range placementGroupSpecifications { - placementGroupConfig := make(map[string]interface{}) + for _, apiObject := range apiObjects { + tfMap := make(map[string]interface{}) - placementGroupConfig["instance_role"] = aws.StringValue(pgc.InstanceRole) + tfMap["instance_role"] = apiObject.InstanceRole + tfMap["placement_strategy"] = apiObject.PlacementStrategy - if pgc.PlacementStrategy != nil { - placementGroupConfig["placement_strategy"] = aws.StringValue(pgc.PlacementStrategy) - } - placementGroupConfigs = append(placementGroupConfigs, placementGroupConfig) + tfList = append(tfList, tfMap) } - return placementGroupConfigs + return tfList } diff --git a/internal/service/emr/cluster_test.go b/internal/service/emr/cluster_test.go index a9a34eb5350..3dceb0ca602 100644 --- a/internal/service/emr/cluster_test.go +++ b/internal/service/emr/cluster_test.go @@ -9,11 +9,11 @@ import ( "testing" "github.com/YakDriver/regexache" + "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/ec2" ec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types" - "github.com/aws/aws-sdk-go/aws" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" "github.com/aws/aws-sdk-go/aws/endpoints" - "github.com/aws/aws-sdk-go/service/emr" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -27,7 +27,7 @@ import ( func TestAccEMRCluster_basic(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -83,7 +83,7 @@ func TestAccEMRCluster_basic(t *testing.T) { func TestAccEMRCluster_autoTerminationPolicy(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -140,7 +140,7 @@ func TestAccEMRCluster_autoTerminationPolicy(t *testing.T) { func TestAccEMRCluster_additionalInfo(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster expectedJSON := ` { "instanceAwsClientConfiguration": { @@ -183,7 +183,7 @@ func TestAccEMRCluster_additionalInfo(t *testing.T) { func TestAccEMRCluster_disappears(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -208,7 +208,7 @@ func TestAccEMRCluster_disappears(t *testing.T) { func TestAccEMRCluster_sJSON(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -242,7 +242,7 @@ func TestAccEMRCluster_sJSON(t *testing.T) { func TestAccEMRCluster_CoreInstanceGroup_autoScalingPolicy(t *testing.T) { ctx := acctest.Context(t) - var cluster1, cluster2, cluster3 emr.Cluster + var cluster1, cluster2, cluster3 awstypes.Cluster autoscalingPolicy1 := ` { "Constraints": { @@ -360,7 +360,7 @@ func TestAccEMRCluster_CoreInstanceGroup_autoScalingPolicy(t *testing.T) { func TestAccEMRCluster_CoreInstanceGroup_bidPrice(t *testing.T) { ctx := acctest.Context(t) - var cluster1, cluster2 emr.Cluster + var cluster1, cluster2 awstypes.Cluster rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_cluster.test" @@ -403,7 +403,7 @@ func TestAccEMRCluster_CoreInstanceGroup_bidPrice(t *testing.T) { func TestAccEMRCluster_CoreInstanceGroup_instanceCount(t *testing.T) { ctx := acctest.Context(t) - var cluster1, cluster2, cluster3 emr.Cluster + var cluster1, cluster2, cluster3 awstypes.Cluster rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_cluster.test" @@ -455,7 +455,7 @@ func TestAccEMRCluster_CoreInstanceGroup_instanceCount(t *testing.T) { func TestAccEMRCluster_CoreInstanceGroup_instanceType(t *testing.T) { ctx := acctest.Context(t) - var cluster1, cluster2 emr.Cluster + var cluster1, cluster2 awstypes.Cluster rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_cluster.test" @@ -498,7 +498,7 @@ func TestAccEMRCluster_CoreInstanceGroup_instanceType(t *testing.T) { func TestAccEMRCluster_CoreInstanceGroup_name(t *testing.T) { ctx := acctest.Context(t) - var cluster1, cluster2 emr.Cluster + var cluster1, cluster2 awstypes.Cluster rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_cluster.test" @@ -541,7 +541,7 @@ func TestAccEMRCluster_CoreInstanceGroup_name(t *testing.T) { func TestAccEMRCluster_EC2Attributes_defaultManagedSecurityGroups(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster var vpc ec2types.Vpc rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -585,7 +585,7 @@ func TestAccEMRCluster_EC2Attributes_defaultManagedSecurityGroups(t *testing.T) func TestAccEMRCluster_Kerberos_clusterDedicatedKdc(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -622,7 +622,7 @@ func TestAccEMRCluster_Kerberos_clusterDedicatedKdc(t *testing.T) { func TestAccEMRCluster_MasterInstanceGroup_bidPrice(t *testing.T) { ctx := acctest.Context(t) - var cluster1, cluster2 emr.Cluster + var cluster1, cluster2 awstypes.Cluster rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_cluster.test" @@ -665,7 +665,7 @@ func TestAccEMRCluster_MasterInstanceGroup_bidPrice(t *testing.T) { func TestAccEMRCluster_MasterInstanceGroup_instanceCount(t *testing.T) { ctx := acctest.Context(t) - var cluster1, cluster2 emr.Cluster + var cluster1, cluster2 awstypes.Cluster rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_cluster.test" @@ -708,7 +708,7 @@ func TestAccEMRCluster_MasterInstanceGroup_instanceCount(t *testing.T) { func TestAccEMRCluster_MasterInstanceGroup_instanceType(t *testing.T) { ctx := acctest.Context(t) - var cluster1, cluster2 emr.Cluster + var cluster1, cluster2 awstypes.Cluster rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_cluster.test" @@ -751,7 +751,7 @@ func TestAccEMRCluster_MasterInstanceGroup_instanceType(t *testing.T) { func TestAccEMRCluster_MasterInstanceGroup_name(t *testing.T) { ctx := acctest.Context(t) - var cluster1, cluster2 emr.Cluster + var cluster1, cluster2 awstypes.Cluster rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_cluster.test" @@ -794,7 +794,7 @@ func TestAccEMRCluster_MasterInstanceGroup_name(t *testing.T) { func TestAccEMRCluster_security(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -827,7 +827,7 @@ func TestAccEMRCluster_security(t *testing.T) { func TestAccEMRCluster_Step_basic(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -839,7 +839,7 @@ func TestAccEMRCluster_Step_basic(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccClusterConfig_stepSingle(rName), - Check: resource.ComposeTestCheckFunc( + Check: resource.ComposeAggregateTestCheckFunc( testAccCheckClusterExists(ctx, resourceName, &cluster), resource.TestCheckResourceAttr(resourceName, "step.#", acctest.Ct1), resource.TestCheckResourceAttr(resourceName, "step.0.action_on_failure", "TERMINATE_CLUSTER"), @@ -866,7 +866,7 @@ func TestAccEMRCluster_Step_basic(t *testing.T) { func TestAccEMRCluster_Step_mode(t *testing.T) { ctx := acctest.Context(t) - var cluster1, cluster2, cluster3 emr.Cluster + var cluster1, cluster2, cluster3 awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -933,7 +933,7 @@ func TestAccEMRCluster_Step_mode(t *testing.T) { func TestAccEMRCluster_Step_multiple(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -945,7 +945,7 @@ func TestAccEMRCluster_Step_multiple(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccClusterConfig_stepMultiple(rName), - Check: resource.ComposeTestCheckFunc( + Check: resource.ComposeAggregateTestCheckFunc( testAccCheckClusterExists(ctx, resourceName, &cluster), resource.TestCheckResourceAttr(resourceName, "step.#", acctest.Ct2), resource.TestCheckResourceAttr(resourceName, "step.0.action_on_failure", "TERMINATE_CLUSTER"), @@ -976,7 +976,7 @@ func TestAccEMRCluster_Step_multiple(t *testing.T) { func TestAccEMRCluster_Step_multiple_listStates(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -988,7 +988,7 @@ func TestAccEMRCluster_Step_multiple_listStates(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccClusterConfig_stepMultipleListStates(rName), - Check: resource.ComposeTestCheckFunc( + Check: resource.ComposeAggregateTestCheckFunc( testAccCheckClusterExists(ctx, resourceName, &cluster), resource.TestCheckResourceAttr(resourceName, "step.#", acctest.Ct2), resource.TestCheckResourceAttr(resourceName, "step.0.action_on_failure", "TERMINATE_CLUSTER"), @@ -1020,7 +1020,7 @@ func TestAccEMRCluster_Step_multiple_listStates(t *testing.T) { func TestAccEMRCluster_Bootstrap_ordering(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1154,7 +1154,7 @@ func TestAccEMRCluster_Bootstrap_ordering(t *testing.T) { func TestAccEMRCluster_PlacementGroupConfigs(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1198,7 +1198,7 @@ func TestAccEMRCluster_PlacementGroupConfigs(t *testing.T) { func TestAccEMRCluster_terminationProtected(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1256,7 +1256,7 @@ func TestAccEMRCluster_terminationProtected(t *testing.T) { func TestAccEMRCluster_keepJob(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1289,7 +1289,7 @@ func TestAccEMRCluster_keepJob(t *testing.T) { func TestAccEMRCluster_visibleToAllUsers(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1339,7 +1339,7 @@ func TestAccEMRCluster_visibleToAllUsers(t *testing.T) { func TestAccEMRCluster_s3Logging(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1373,7 +1373,7 @@ func TestAccEMRCluster_s3Logging(t *testing.T) { func TestAccEMRCluster_s3LogEncryption(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1408,7 +1408,7 @@ func TestAccEMRCluster_s3LogEncryption(t *testing.T) { func TestAccEMRCluster_tags(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1454,7 +1454,7 @@ func TestAccEMRCluster_tags(t *testing.T) { func TestAccEMRCluster_RootVolume_size(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1494,7 +1494,7 @@ func TestAccEMRCluster_RootVolume_size(t *testing.T) { func TestAccEMRCluster_StepConcurrency_level(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_cluster.test" resource.ParallelTest(t, resource.TestCase{ @@ -1533,7 +1533,7 @@ func TestAccEMRCluster_StepConcurrency_level(t *testing.T) { func TestAccEMRCluster_ebs(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_cluster.test" resource.ParallelTest(t, resource.TestCase{ @@ -1566,7 +1566,7 @@ func TestAccEMRCluster_ebs(t *testing.T) { func TestAccEMRCluster_CustomAMI_id(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1599,7 +1599,7 @@ func TestAccEMRCluster_CustomAMI_id(t *testing.T) { func TestAccEMRCluster_InstanceFleet_basic(t *testing.T) { ctx := acctest.Context(t) - var cluster1, cluster2 emr.Cluster + var cluster1, cluster2 awstypes.Cluster resourceName := "aws_emr_cluster.test" subnetResourceName := "aws_subnet.test" @@ -1671,7 +1671,7 @@ func TestAccEMRCluster_InstanceFleet_basic(t *testing.T) { func TestAccEMRCluster_InstanceFleetMaster_only(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1705,7 +1705,7 @@ func TestAccEMRCluster_InstanceFleetMaster_only(t *testing.T) { func TestAccEMRCluster_unhealthyNodeReplacement(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster + var cluster awstypes.Cluster resourceName := "aws_emr_cluster.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -1755,7 +1755,7 @@ func TestAccEMRCluster_unhealthyNodeReplacement(t *testing.T) { func testAccCheckClusterDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_emr_cluster" { @@ -1779,18 +1779,14 @@ func testAccCheckClusterDestroy(ctx context.Context) resource.TestCheckFunc { } } -func testAccCheckClusterExists(ctx context.Context, n string, v *emr.Cluster) resource.TestCheckFunc { +func testAccCheckClusterExists(ctx context.Context, n string, v *awstypes.Cluster) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { return fmt.Errorf("Not found: %s", n) } - if rs.Primary.ID == "" { - return fmt.Errorf("No EMR Cluster ID is set") - } - - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) output, err := tfemr.FindClusterByID(ctx, conn, rs.Primary.ID) @@ -1804,20 +1800,20 @@ func testAccCheckClusterExists(ctx context.Context, n string, v *emr.Cluster) re } } -func testAccCheckClusterNotRecreated(i, j *emr.Cluster) resource.TestCheckFunc { +func testAccCheckClusterNotRecreated(i, j *awstypes.Cluster) resource.TestCheckFunc { return func(s *terraform.State) error { - if aws.StringValue(i.Id) != aws.StringValue(j.Id) { - return fmt.Errorf("EMR Cluster recreated: %s -> %s", aws.StringValue(i.Id), aws.StringValue(j.Id)) + if aws.ToString(i.Id) != aws.ToString(j.Id) { + return fmt.Errorf("EMR Cluster recreated: %s -> %s", aws.ToString(i.Id), aws.ToString(j.Id)) } return nil } } -func testAccCheckClusterRecreated(i, j *emr.Cluster) resource.TestCheckFunc { +func testAccCheckClusterRecreated(i, j *awstypes.Cluster) resource.TestCheckFunc { return func(s *terraform.State) error { - if aws.StringValue(i.Id) == aws.StringValue(j.Id) { - return fmt.Errorf("EMR Cluster not recreated: %s", aws.StringValue(i.Id)) + if aws.ToString(i.Id) == aws.ToString(j.Id) { + return fmt.Errorf("EMR Cluster not recreated: %s", aws.ToString(i.Id)) } return nil @@ -1832,7 +1828,7 @@ func testAccDeleteManagedSecurityGroups(ctx context.Context, conn *ec2.Client, v } for groupName := range managedSecurityGroups { - securityGroup, err := tfec2.FindSecurityGroupByNameAndVPCIDAndOwnerID(ctx, conn, groupName, aws.StringValue(vpc.VpcId), aws.StringValue(vpc.OwnerId)) + securityGroup, err := tfec2.FindSecurityGroupByNameAndVPCIDAndOwnerID(ctx, conn, groupName, aws.ToString(vpc.VpcId), aws.ToString(vpc.OwnerId)) if err != nil { return fmt.Errorf("error describing EMR Managed Security Group (%s): %w", groupName, err) @@ -2071,7 +2067,6 @@ resource "aws_iam_role_policy_attachment" "emr_service" { role = aws_iam_role.emr_service.id policy_arn = "arn:${data.aws_partition.current.partition}:iam::aws:policy/service-role/AmazonElasticMapReduceRole" } - `, rName) } diff --git a/internal/service/emr/errors.go b/internal/service/emr/errors.go index 1061eaae4ec..ae39f1a6ca2 100644 --- a/internal/service/emr/errors.go +++ b/internal/service/emr/errors.go @@ -4,7 +4,8 @@ package emr const ( - ErrCodeClusterNotFound = "ClusterNotFound" - ErrCodeUnknownOperationException = "UnknownOperationException" - ErrCodeValidationException = "ValidationException" + errCodeAccessDeniedException = "AccessDeniedException" + errCodeClusterNotFound = "ClusterNotFound" + errCodeUnknownOperationException = "UnknownOperationException" + errCodeValidationException = "ValidationException" ) diff --git a/internal/service/emr/exports_test.go b/internal/service/emr/exports_test.go index b5cec93e161..57dd52be2ff 100644 --- a/internal/service/emr/exports_test.go +++ b/internal/service/emr/exports_test.go @@ -14,10 +14,11 @@ var ( ResourceStudio = resourceStudio ResourceStudioSessionMapping = resourceStudioSessionMapping - FetchInstanceGroup = fetchInstanceGroup FindBlockPublicAccessConfiguration = findBlockPublicAccessConfiguration FindClusterByID = findClusterByID FindInstanceFleetByTwoPartKey = findInstanceFleetByTwoPartKey + FindInstanceGroupByTwoPartKey = findInstanceGroupByTwoPartKey + FindManagedScalingPolicyByID = findManagedScalingPolicyByID FindSecurityConfigurationByName = findSecurityConfigurationByName FindStudioByID = findStudioByID FindStudioSessionMappingByIDOrName = findStudioSessionMappingByIDOrName diff --git a/internal/service/emr/generate.go b/internal/service/emr/generate.go index 4e567f657a8..b9322de6df1 100644 --- a/internal/service/emr/generate.go +++ b/internal/service/emr/generate.go @@ -1,7 +1,7 @@ // Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 -//go:generate go run ../../generate/tags/main.go -ListTagsInIDElem=ResourceId -ServiceTagsSlice -TagOp=AddTags -TagInIDElem=ResourceId -UntagOp=RemoveTags -UpdateTags +//go:generate go run ../../generate/tags/main.go -AWSSDKVersion=2 -ServiceTagsSlice -TagInIDElem=ResourceId -TagOp=AddTags -UntagOp=RemoveTags -UpdateTags //go:generate go run ../../generate/servicepackage/main.go // ONLY generate directives and package declaration! Do not add anything else to this file. diff --git a/internal/service/emr/id.go b/internal/service/emr/id.go deleted file mode 100644 index 49a78482b73..00000000000 --- a/internal/service/emr/id.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package emr - -import ( - "fmt" - "strings" - - "github.com/YakDriver/regexache" -) - -const IdentityIdPattern = `([0-9a-f]{10}-|)[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}` - -var IdentityIdPatternRegexp = regexache.MustCompile(IdentityIdPattern) - -func isIdentityId(identityIdOrName string) bool { - return IdentityIdPatternRegexp.MatchString(identityIdOrName) -} - -func readStudioSessionMapping(id string) (studioId, identityType, identityIdOrName string, err error) { - idOrNameParts := strings.Split(id, ":") - if len(idOrNameParts) == 3 { - return idOrNameParts[0], idOrNameParts[1], idOrNameParts[2], nil - } - - if isIdentityId(identityIdOrName) { - err = fmt.Errorf("expected ID in format studio-id:identity-type:identity-id, received: %s", identityIdOrName) - } else { - err = fmt.Errorf("expected ID in format studio-id:identity-type:identity-name, received: %s", identityIdOrName) - } - - return "", "", "", err -} diff --git a/internal/service/emr/instance_fleet.go b/internal/service/emr/instance_fleet.go index 915a95c6831..326cdabad3e 100644 --- a/internal/service/emr/instance_fleet.go +++ b/internal/service/emr/instance_fleet.go @@ -10,15 +10,17 @@ import ( "strings" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/emr" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" + tfslices "github.com/hashicorp/terraform-provider-aws/internal/slices" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -151,10 +153,10 @@ func resourceInstanceFleet() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "allocation_strategy": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validation.StringInSlice(emr.OnDemandProvisioningAllocationStrategy_Values(), false), + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateDiagFunc: enum.Validate[awstypes.OnDemandProvisioningAllocationStrategy](), }, }, }, @@ -167,10 +169,10 @@ func resourceInstanceFleet() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "allocation_strategy": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - ValidateFunc: validation.StringInSlice(emr.SpotProvisioningAllocationStrategy_Values(), false), + Type: schema.TypeString, + ForceNew: true, + Required: true, + ValidateDiagFunc: enum.Validate[awstypes.SpotProvisioningAllocationStrategy](), }, "block_duration_minutes": { Type: schema.TypeInt, @@ -179,10 +181,10 @@ func resourceInstanceFleet() *schema.Resource { Default: 0, }, "timeout_action": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validation.StringInSlice(emr.SpotProvisioningTimeoutAction_Values(), false), + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateDiagFunc: enum.Validate[awstypes.SpotProvisioningTimeoutAction](), }, "timeout_duration_minutes": { Type: schema.TypeInt, @@ -224,9 +226,9 @@ func resourceInstanceFleet() *schema.Resource { func resourceInstanceFleetCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) - taskFleet := map[string]interface{}{ + tfMap := map[string]interface{}{ names.AttrName: d.Get(names.AttrName), "target_on_demand_capacity": d.Get("target_on_demand_capacity"), "target_spot_capacity": d.Get("target_spot_capacity"), @@ -235,23 +237,23 @@ func resourceInstanceFleetCreate(ctx context.Context, d *schema.ResourceData, me } input := &emr.AddInstanceFleetInput{ ClusterId: aws.String(d.Get("cluster_id").(string)), - InstanceFleet: readInstanceFleetConfig(taskFleet, emr.InstanceFleetTypeTask), + InstanceFleet: expandInstanceFleetConfig(tfMap, awstypes.InstanceFleetTypeTask), } - output, err := conn.AddInstanceFleetWithContext(ctx, input) + output, err := conn.AddInstanceFleet(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating EMR Instance Fleet: %s", err) } - d.SetId(aws.StringValue(output.InstanceFleetId)) + d.SetId(aws.ToString(output.InstanceFleetId)) return append(diags, resourceInstanceFleetRead(ctx, d, meta)...) } func resourceInstanceFleetRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) fleet, err := findInstanceFleetByTwoPartKey(ctx, conn, d.Get("cluster_id").(string), d.Id()) @@ -265,10 +267,10 @@ func resourceInstanceFleetRead(ctx context.Context, d *schema.ResourceData, meta return sdkdiag.AppendErrorf(diags, "reading EMR Instance Fleet (%s): %s", d.Id(), err) } - if err := d.Set("instance_type_configs", flatteninstanceTypeConfigs(fleet.InstanceTypeSpecifications)); err != nil { + if err := d.Set("instance_type_configs", flattenInstanceTypeSpecifications(fleet.InstanceTypeSpecifications)); err != nil { return sdkdiag.AppendErrorf(diags, "setting instance_type_configs: %s", err) } - if err := d.Set("launch_specifications", flattenLaunchSpecifications(fleet.LaunchSpecifications)); err != nil { + if err := d.Set("launch_specifications", flattenInstanceFleetProvisioningSpecifications(fleet.LaunchSpecifications)); err != nil { return sdkdiag.AppendErrorf(diags, "setting launch_specifications: %s", err) } d.Set(names.AttrName, fleet.Name) @@ -282,36 +284,28 @@ func resourceInstanceFleetRead(ctx context.Context, d *schema.ResourceData, meta func resourceInstanceFleetUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) - modifyConfig := &emr.InstanceFleetModifyConfig{ - InstanceFleetId: aws.String(d.Id()), - TargetOnDemandCapacity: aws.Int64(int64(d.Get("target_on_demand_capacity").(int))), - TargetSpotCapacity: aws.Int64(int64(d.Get("target_spot_capacity").(int))), - } + clusterID := d.Get("cluster_id").(string) input := &emr.ModifyInstanceFleetInput{ - ClusterId: aws.String(d.Get("cluster_id").(string)), - InstanceFleet: modifyConfig, + ClusterId: aws.String(clusterID), + InstanceFleet: &awstypes.InstanceFleetModifyConfig{ + InstanceFleetId: aws.String(d.Id()), + TargetOnDemandCapacity: aws.Int32(int32(d.Get("target_on_demand_capacity").(int))), + TargetSpotCapacity: aws.Int32(int32(d.Get("target_spot_capacity").(int))), + }, } - _, err := conn.ModifyInstanceFleetWithContext(ctx, input) + _, err := conn.ModifyInstanceFleet(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "updating EMR Instance Fleet (%s): %s", d.Id(), err) } - stateConf := &retry.StateChangeConf{ - Pending: []string{emr.InstanceFleetStateProvisioning, emr.InstanceFleetStateBootstrapping, emr.InstanceFleetStateResizing}, - Target: []string{emr.InstanceFleetStateRunning}, - Refresh: statusInstanceFleet(ctx, conn, d.Get("cluster_id").(string), d.Id()), - Timeout: 75 * time.Minute, - Delay: 10 * time.Second, - MinTimeout: 30 * time.Second, - } - - _, err = stateConf.WaitForStateContext(ctx) - - if err != nil { + const ( + timeout = 75 * time.Minute + ) + if _, err := waitInstanceFleetRunning(ctx, conn, clusterID, d.Id(), timeout); err != nil { return sdkdiag.AppendErrorf(diags, "waiting for EMR Instance Fleet (%s) update: %s", d.Id(), err) } @@ -320,24 +314,24 @@ func resourceInstanceFleetUpdate(ctx context.Context, d *schema.ResourceData, me func resourceInstanceFleetDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) // AWS EMR Instance Fleet does not support DELETE; resizing cluster to zero before removing from state. log.Printf("[DEBUG] Deleting EMR Instance Fleet: %s", d.Id()) - _, err := conn.ModifyInstanceFleetWithContext(ctx, &emr.ModifyInstanceFleetInput{ + _, err := conn.ModifyInstanceFleet(ctx, &emr.ModifyInstanceFleetInput{ ClusterId: aws.String(d.Get("cluster_id").(string)), - InstanceFleet: &emr.InstanceFleetModifyConfig{ + InstanceFleet: &awstypes.InstanceFleetModifyConfig{ InstanceFleetId: aws.String(d.Id()), - TargetOnDemandCapacity: aws.Int64(0), - TargetSpotCapacity: aws.Int64(0), + TargetOnDemandCapacity: aws.Int32(0), + TargetSpotCapacity: aws.Int32(0), }, }) // Ignore certain errors that indicate the fleet is already (being) deleted - if tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "instance fleet may only be modified when the cluster is running or waiting") { + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "instance fleet may only be modified when the cluster is running or waiting") { return diags } - if tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "A job flow that is shutting down, terminated, or finished may not be modified") { + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "A job flow that is shutting down, terminated, or finished may not be modified") { return diags } @@ -348,40 +342,55 @@ func resourceInstanceFleetDelete(ctx context.Context, d *schema.ResourceData, me return diags } -func findInstanceFleetByTwoPartKey(ctx context.Context, conn *emr.EMR, clusterID, fleetID string) (*emr.InstanceFleet, error) { +func findInstanceFleetByTwoPartKey(ctx context.Context, conn *emr.Client, clusterID, fleetID string) (*awstypes.InstanceFleet, error) { input := &emr.ListInstanceFleetsInput{ ClusterId: aws.String(clusterID), } - var fleets []*emr.InstanceFleet - - err := conn.ListInstanceFleetsPagesWithContext(ctx, input, func(page *emr.ListInstanceFleetsOutput, lastPage bool) bool { - if page == nil { - return !lastPage - } - for _, v := range page.InstanceFleets { - if v != nil && v.Status != nil { - fleets = append(fleets, v) - } - } - - return !lastPage + return findInstanceFleet(ctx, conn, input, func(v *awstypes.InstanceFleet) bool { + return aws.ToString(v.Id) == fleetID }) +} + +func findInstanceFleet(ctx context.Context, conn *emr.Client, input *emr.ListInstanceFleetsInput, filter tfslices.Predicate[*awstypes.InstanceFleet]) (*awstypes.InstanceFleet, error) { + output, err := findInstanceFleets(ctx, conn, input, filter) if err != nil { return nil, err } - for _, fleet := range fleets { - if aws.StringValue(fleet.Id) == fleetID { - return fleet, nil + return tfresource.AssertSingleValueResult(output) +} + +func findInstanceFleets(ctx context.Context, conn *emr.Client, input *emr.ListInstanceFleetsInput, filter tfslices.Predicate[*awstypes.InstanceFleet]) ([]awstypes.InstanceFleet, error) { + var output []awstypes.InstanceFleet + + pages := emr.NewListInstanceFleetsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "is not valid") { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, + } + } + + if err != nil { + return nil, err + } + + for _, v := range page.InstanceFleets { + if v.Status != nil && filter(&v) { + output = append(output, v) + } } } - return nil, &retry.NotFoundError{} + return output, nil } -func statusInstanceFleet(ctx context.Context, conn *emr.EMR, clusterID, fleetID string) retry.StateRefreshFunc { +func statusInstanceFleet(ctx context.Context, conn *emr.Client, clusterID, fleetID string) retry.StateRefreshFunc { return func() (interface{}, string, error) { output, err := findInstanceFleetByTwoPartKey(ctx, conn, clusterID, fleetID) @@ -393,6 +402,25 @@ func statusInstanceFleet(ctx context.Context, conn *emr.EMR, clusterID, fleetID return nil, "", err } - return output, aws.StringValue(output.Status.State), nil + return output, string(output.Status.State), nil + } +} + +func waitInstanceFleetRunning(ctx context.Context, conn *emr.Client, clusterID, fleetID string, timeout time.Duration) (*awstypes.InstanceFleet, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.InstanceFleetStateProvisioning, awstypes.InstanceFleetStateBootstrapping, awstypes.InstanceFleetStateResizing), + Target: enum.Slice(awstypes.InstanceFleetStateRunning), + Refresh: statusInstanceFleet(ctx, conn, clusterID, fleetID), + Timeout: timeout, + Delay: 10 * time.Second, + MinTimeout: 30 * time.Second, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + + if output, ok := outputRaw.(*awstypes.InstanceFleet); ok { + return output, err } + + return nil, err } diff --git a/internal/service/emr/instance_fleet_test.go b/internal/service/emr/instance_fleet_test.go index f1600b00477..8af6e735df0 100644 --- a/internal/service/emr/instance_fleet_test.go +++ b/internal/service/emr/instance_fleet_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -20,7 +20,7 @@ import ( func TestAccEMRInstanceFleet_basic(t *testing.T) { ctx := acctest.Context(t) - var fleet emr.InstanceFleet + var fleet awstypes.InstanceFleet rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_instance_fleet.task" @@ -32,7 +32,8 @@ func TestAccEMRInstanceFleet_basic(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccInstanceFleetConfig_basic(rName), - Check: resource.ComposeTestCheckFunc(testAccCheckInstanceFleetExists(ctx, resourceName, &fleet), + Check: resource.ComposeTestCheckFunc( + testAccCheckInstanceFleetExists(ctx, resourceName, &fleet), resource.TestCheckResourceAttr(resourceName, "instance_type_configs.#", acctest.Ct1), resource.TestCheckResourceAttr(resourceName, "target_on_demand_capacity", acctest.Ct1), resource.TestCheckResourceAttr(resourceName, "target_spot_capacity", acctest.Ct0), @@ -50,7 +51,7 @@ func TestAccEMRInstanceFleet_basic(t *testing.T) { func TestAccEMRInstanceFleet_Zero_count(t *testing.T) { ctx := acctest.Context(t) - var fleet emr.InstanceFleet + var fleet awstypes.InstanceFleet rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_instance_fleet.task" @@ -62,7 +63,8 @@ func TestAccEMRInstanceFleet_Zero_count(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccInstanceFleetConfig_basic(rName), - Check: resource.ComposeTestCheckFunc(testAccCheckInstanceFleetExists(ctx, resourceName, &fleet), + Check: resource.ComposeTestCheckFunc( + testAccCheckInstanceFleetExists(ctx, resourceName, &fleet), resource.TestCheckResourceAttr(resourceName, "instance_type_configs.#", acctest.Ct1), resource.TestCheckResourceAttr(resourceName, "target_on_demand_capacity", acctest.Ct1), resource.TestCheckResourceAttr(resourceName, "target_spot_capacity", acctest.Ct0), @@ -70,7 +72,8 @@ func TestAccEMRInstanceFleet_Zero_count(t *testing.T) { }, { Config: testAccInstanceFleetConfig_zeroCount(rName), - Check: resource.ComposeTestCheckFunc(testAccCheckInstanceFleetExists(ctx, resourceName, &fleet), + Check: resource.ComposeTestCheckFunc( + testAccCheckInstanceFleetExists(ctx, resourceName, &fleet), resource.TestCheckResourceAttr(resourceName, "instance_type_configs.#", acctest.Ct1), resource.TestCheckResourceAttr(resourceName, "target_on_demand_capacity", acctest.Ct0), resource.TestCheckResourceAttr(resourceName, "target_spot_capacity", acctest.Ct0), @@ -88,7 +91,7 @@ func TestAccEMRInstanceFleet_Zero_count(t *testing.T) { func TestAccEMRInstanceFleet_ebsBasic(t *testing.T) { ctx := acctest.Context(t) - var fleet emr.InstanceFleet + var fleet awstypes.InstanceFleet rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_instance_fleet.task" @@ -100,7 +103,8 @@ func TestAccEMRInstanceFleet_ebsBasic(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccInstanceFleetConfig_ebsBasic(rName), - Check: resource.ComposeTestCheckFunc(testAccCheckInstanceFleetExists(ctx, resourceName, &fleet), + Check: resource.ComposeTestCheckFunc( + testAccCheckInstanceFleetExists(ctx, resourceName, &fleet), resource.TestCheckResourceAttr(resourceName, "instance_type_configs.#", acctest.Ct1), resource.TestCheckResourceAttr(resourceName, "target_on_demand_capacity", acctest.Ct0), resource.TestCheckResourceAttr(resourceName, "target_spot_capacity", acctest.Ct1), @@ -119,7 +123,7 @@ func TestAccEMRInstanceFleet_ebsBasic(t *testing.T) { func TestAccEMRInstanceFleet_full(t *testing.T) { ctx := acctest.Context(t) - var fleet emr.InstanceFleet + var fleet awstypes.InstanceFleet rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_instance_fleet.task" @@ -131,7 +135,8 @@ func TestAccEMRInstanceFleet_full(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccInstanceFleetConfig_full(rName), - Check: resource.ComposeTestCheckFunc(testAccCheckInstanceFleetExists(ctx, resourceName, &fleet), + Check: resource.ComposeTestCheckFunc( + testAccCheckInstanceFleetExists(ctx, resourceName, &fleet), resource.TestCheckResourceAttr(resourceName, "instance_type_configs.#", acctest.Ct2), resource.TestCheckResourceAttr(resourceName, "target_on_demand_capacity", acctest.Ct2), resource.TestCheckResourceAttr(resourceName, "target_spot_capacity", acctest.Ct2), @@ -148,18 +153,14 @@ func TestAccEMRInstanceFleet_full(t *testing.T) { }) } -func testAccCheckInstanceFleetExists(ctx context.Context, n string, v *emr.InstanceFleet) resource.TestCheckFunc { +func testAccCheckInstanceFleetExists(ctx context.Context, n string, v *awstypes.InstanceFleet) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { return fmt.Errorf("Not found: %s", n) } - if rs.Primary.ID == "" { - return fmt.Errorf("No EMR Instance Fleet ID is set") - } - - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) output, err := tfemr.FindInstanceFleetByTwoPartKey(ctx, conn, rs.Primary.Attributes["cluster_id"], rs.Primary.ID) diff --git a/internal/service/emr/instance_group.go b/internal/service/emr/instance_group.go index da535779c92..36c6b3cc5cb 100644 --- a/internal/service/emr/instance_group.go +++ b/internal/service/emr/instance_group.go @@ -5,32 +5,31 @@ package emr import ( "context" - "encoding/json" "fmt" "log" "strings" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/emr" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" + "github.com/hashicorp/aws-sdk-go-base/v2/tfawserr" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" + tfjson "github.com/hashicorp/terraform-provider-aws/internal/json" + tfslices "github.com/hashicorp/terraform-provider-aws/internal/slices" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) -const ( - instanceGroupCreateTimeout = 30 * time.Minute - instanceGroupUpdateTimeout = 30 * time.Minute -) - // @SDKResource("aws_emr_instance_group", name="Instance Group") func resourceInstanceGroup() *schema.Resource { return &schema.Resource{ @@ -38,6 +37,7 @@ func resourceInstanceGroup() *schema.Resource { ReadWithoutTimeout: resourceInstanceGroupRead, UpdateWithoutTimeout: resourceInstanceGroupUpdate, DeleteWithoutTimeout: resourceInstanceGroupDelete, + Importer: &schema.ResourceImporter{ StateContext: func(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { idParts := strings.Split(d.Id(), "/") @@ -51,12 +51,14 @@ func resourceInstanceGroup() *schema.Resource { return []*schema.ResourceData{d}, nil }, }, + Schema: map[string]*schema.Schema{ "autoscaling_policy": { - Type: schema.TypeString, - Optional: true, - DiffSuppressFunc: verify.SuppressEquivalentJSONDiffs, - ValidateFunc: validation.StringIsJSON, + Type: schema.TypeString, + Optional: true, + ValidateFunc: validation.StringIsJSON, + DiffSuppressFunc: verify.SuppressEquivalentJSONDiffs, + DiffSuppressOnRefresh: true, }, "bid_price": { Type: schema.TypeString, @@ -69,10 +71,11 @@ func resourceInstanceGroup() *schema.Resource { ForceNew: true, }, "configurations_json": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringIsJSON, - DiffSuppressFunc: verify.SuppressEquivalentJSONDiffs, + Type: schema.TypeString, + Optional: true, + ValidateFunc: validation.StringIsJSON, + DiffSuppressFunc: verify.SuppressEquivalentJSONDiffs, + DiffSuppressOnRefresh: true, StateFunc: func(v interface{}) string { json, _ := structure.NormalizeJsonString(v) return json @@ -145,65 +148,67 @@ func resourceInstanceGroup() *schema.Resource { func resourceInstanceGroupCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) - instanceRole := emr.InstanceGroupTypeTask - groupConfig := &emr.InstanceGroupConfig{ + name := d.Get(names.AttrName).(string) + groupConfig := awstypes.InstanceGroupConfig{ EbsConfiguration: readEBSConfig(d), - InstanceRole: aws.String(instanceRole), + InstanceRole: awstypes.InstanceRoleTypeTask, InstanceType: aws.String(d.Get(names.AttrInstanceType).(string)), - Name: aws.String(d.Get(names.AttrName).(string)), + Name: aws.String(name), } if v, ok := d.GetOk("autoscaling_policy"); ok { - var autoScalingPolicy *emr.AutoScalingPolicy + var autoScalingPolicy awstypes.AutoScalingPolicy - if err := json.Unmarshal([]byte(v.(string)), &autoScalingPolicy); err != nil { - return sdkdiag.AppendErrorf(diags, "[DEBUG] error parsing Auto Scaling Policy %s", err) + if err := tfjson.DecodeFromString(v.(string), &autoScalingPolicy); err != nil { + return sdkdiag.AppendFromErr(diags, err) } - groupConfig.AutoScalingPolicy = autoScalingPolicy + + groupConfig.AutoScalingPolicy = &autoScalingPolicy + } + + groupConfig.Market = awstypes.MarketTypeOnDemand + if v, ok := d.GetOk("bid_price"); ok { + groupConfig.BidPrice = aws.String(v.(string)) + groupConfig.Market = awstypes.MarketTypeSpot } if v, ok := d.GetOk("configurations_json"); ok { - info, err := structure.NormalizeJsonString(v) + v, err := structure.NormalizeJsonString(v) if err != nil { - return sdkdiag.AppendErrorf(diags, "configurations_json contains an invalid JSON: %s", err) + return sdkdiag.AppendFromErr(diags, err) } - groupConfig.Configurations, err = expandConfigurationJSON(info) + groupConfig.Configurations, err = expandConfigurationJSON(v) if err != nil { - return sdkdiag.AppendErrorf(diags, "reading EMR configurations_json: %s", err) + return sdkdiag.AppendFromErr(diags, err) } } if v, ok := d.GetOk(names.AttrInstanceCount); ok { - groupConfig.InstanceCount = aws.Int64(int64(v.(int))) + groupConfig.InstanceCount = aws.Int32(int32(v.(int))) } else { - groupConfig.InstanceCount = aws.Int64(1) - } - - groupConfig.Market = aws.String(emr.MarketTypeOnDemand) - if v, ok := d.GetOk("bid_price"); ok { - groupConfig.BidPrice = aws.String(v.(string)) - groupConfig.Market = aws.String(emr.MarketTypeSpot) + groupConfig.InstanceCount = aws.Int32(1) } - params := &emr.AddInstanceGroupsInput{ - InstanceGroups: []*emr.InstanceGroupConfig{groupConfig}, + input := &emr.AddInstanceGroupsInput{ + InstanceGroups: []awstypes.InstanceGroupConfig{groupConfig}, JobFlowId: aws.String(d.Get("cluster_id").(string)), } - resp, err := conn.AddInstanceGroupsWithContext(ctx, params) + output, err := conn.AddInstanceGroups(ctx, input) + if err != nil { - return sdkdiag.AppendErrorf(diags, "creating EMR Instance Group: %s", err) + return sdkdiag.AppendErrorf(diags, "creating EMR Instance Group (%s): %s", name, err) } - if resp == nil || len(resp.InstanceGroupIds) == 0 { - return sdkdiag.AppendErrorf(diags, "creating EMR Instance Group: empty response") - } - d.SetId(aws.StringValue(resp.InstanceGroupIds[0])) + d.SetId(output.InstanceGroupIds[0]) - if err := waitForInstanceGroupStateRunning(ctx, conn, d.Get("cluster_id").(string), d.Id(), instanceGroupCreateTimeout); err != nil { - return sdkdiag.AppendErrorf(diags, "creating EMR Instance Group (%s): waiting for completion: %s", d.Id(), err) + const ( + timeout = 30 * time.Minute + ) + if _, err := waitInstanceGroupRunning(ctx, conn, d.Get("cluster_id").(string), d.Id(), timeout); err != nil { + return sdkdiag.AppendErrorf(diags, "waiting for EMR Instance Group (%s) create: %s", d.Id(), err) } return append(diags, resourceInstanceGroupRead(ctx, d, meta)...) @@ -211,58 +216,36 @@ func resourceInstanceGroupCreate(ctx context.Context, d *schema.ResourceData, me func resourceInstanceGroupRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) - ig, err := fetchInstanceGroup(ctx, conn, d.Get("cluster_id").(string), d.Id()) + ig, err := findInstanceGroupByTwoPartKey(ctx, conn, d.Get("cluster_id").(string), d.Id()) - if tfresource.NotFound(err) { - log.Printf("[DEBUG] EMR Instance Group (%s) not found, removing", d.Id()) + if !d.IsNewResource() && tfresource.NotFound(err) { + log.Printf("[WARN] EMR Instance Group (%s) not found, removing from state", d.Id()) d.SetId("") return diags } if err != nil { - if tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "is not valid") { - log.Printf("[DEBUG] EMR Cluster corresponding to Instance Group (%s) not found, removing", d.Id()) - d.SetId("") - return diags - } return sdkdiag.AppendErrorf(diags, "reading EMR Instance Group (%s): %s", d.Id(), err) } - if ig.Status != nil { - switch aws.StringValue(ig.Status.State) { - case emr.InstanceGroupStateTerminating: - fallthrough - case emr.InstanceGroupStateTerminated: - log.Printf("[DEBUG] EMR Instance Group (%s) terminated, removing", d.Id()) - d.SetId("") - return diags - } + autoscalingPolicyString, err := flattenAutoScalingPolicyDescription(ig.AutoScalingPolicy) + if err != nil { + return sdkdiag.AppendFromErr(diags, err) } - + d.Set("autoscaling_policy", autoscalingPolicyString) + d.Set("bid_price", ig.BidPrice) switch { case len(ig.Configurations) > 0: configOut, err := flattenConfigurationJSON(ig.Configurations) if err != nil { - return sdkdiag.AppendErrorf(diags, "reading EMR instance group configurations: %s", err) - } - if err := d.Set("configurations_json", configOut); err != nil { - return sdkdiag.AppendErrorf(diags, "setting EMR configurations_json for instance group (%s): %s", d.Id(), err) + return sdkdiag.AppendFromErr(diags, err) } + d.Set("configurations_json", configOut) default: d.Set("configurations_json", "") } - - autoscalingPolicyString, err := flattenAutoScalingPolicyDescription(ig.AutoScalingPolicy) - - if err != nil { - return sdkdiag.AppendErrorf(diags, "reading EMR Instance Group (%s): %s", d.Id(), err) - } - - d.Set("autoscaling_policy", autoscalingPolicyString) - - d.Set("bid_price", ig.BidPrice) if err := d.Set("ebs_config", flattenEBSConfig(ig.EbsBlockDevices)); err != nil { return sdkdiag.AppendErrorf(diags, "setting ebs_config: %s", err) } @@ -271,71 +254,74 @@ func resourceInstanceGroupRead(ctx context.Context, d *schema.ResourceData, meta d.Set(names.AttrInstanceType, ig.InstanceType) d.Set(names.AttrName, ig.Name) d.Set("running_instance_count", ig.RunningInstanceCount) - - if ig.Status != nil { - d.Set(names.AttrStatus, ig.Status.State) - } + d.Set(names.AttrStatus, ig.Status.State) return diags } func resourceInstanceGroupUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) - log.Printf("[DEBUG] Modify EMR task group") if d.HasChanges(names.AttrInstanceCount, "configurations_json") { - instanceGroupModifyConfig := emr.InstanceGroupModifyConfig{ + groupConfig := awstypes.InstanceGroupModifyConfig{ InstanceGroupId: aws.String(d.Id()), } if d.HasChange(names.AttrInstanceCount) { - instanceCount := d.Get(names.AttrInstanceCount).(int) - instanceGroupModifyConfig.InstanceCount = aws.Int64(int64(instanceCount)) + groupConfig.InstanceCount = aws.Int32(int32(d.Get(names.AttrInstanceCount).(int))) } + if d.HasChange("configurations_json") { if v, ok := d.GetOk("configurations_json"); ok { - info, err := structure.NormalizeJsonString(v) + v, err := structure.NormalizeJsonString(v) if err != nil { - return sdkdiag.AppendErrorf(diags, "configurations_json contains an invalid JSON: %s", err) + return sdkdiag.AppendFromErr(diags, err) } - instanceGroupModifyConfig.Configurations, err = expandConfigurationJSON(info) + groupConfig.Configurations, err = expandConfigurationJSON(v) if err != nil { - return sdkdiag.AppendErrorf(diags, "reading EMR configurations_json: %s", err) + return sdkdiag.AppendFromErr(diags, err) } } } - params := &emr.ModifyInstanceGroupsInput{ - InstanceGroups: []*emr.InstanceGroupModifyConfig{ - &instanceGroupModifyConfig, + + input := &emr.ModifyInstanceGroupsInput{ + InstanceGroups: []awstypes.InstanceGroupModifyConfig{ + groupConfig, }, } - _, err := conn.ModifyInstanceGroupsWithContext(ctx, params) + _, err := conn.ModifyInstanceGroups(ctx, input) + if err != nil { - return sdkdiag.AppendErrorf(diags, "modifying EMR Instance Group (%s): %s", d.Id(), err) + return sdkdiag.AppendErrorf(diags, "updating EMR Instance Group (%s): %s", d.Id(), err) } - if err := waitForInstanceGroupStateRunning(ctx, conn, d.Get("cluster_id").(string), d.Id(), instanceGroupUpdateTimeout); err != nil { - return sdkdiag.AppendErrorf(diags, "waiting for EMR Instance Group (%s) modification: %s", d.Id(), err) + const ( + timeout = 30 * time.Minute + ) + if _, err := waitInstanceGroupRunning(ctx, conn, d.Get("cluster_id").(string), d.Id(), timeout); err != nil { + return sdkdiag.AppendErrorf(diags, "waiting for EMR Instance Group (%s) update: %s", d.Id(), err) } } if d.HasChange("autoscaling_policy") { - var autoScalingPolicy *emr.AutoScalingPolicy + var autoScalingPolicy awstypes.AutoScalingPolicy - if err := json.Unmarshal([]byte(d.Get("autoscaling_policy").(string)), &autoScalingPolicy); err != nil { - return sdkdiag.AppendErrorf(diags, "parsing EMR Auto Scaling Policy JSON for update: %s", err) + if err := tfjson.DecodeFromString(d.Get("autoscaling_policy").(string), &autoScalingPolicy); err != nil { + return sdkdiag.AppendFromErr(diags, err) } - putAutoScalingPolicy := &emr.PutAutoScalingPolicyInput{ + input := &emr.PutAutoScalingPolicyInput{ + AutoScalingPolicy: &autoScalingPolicy, ClusterId: aws.String(d.Get("cluster_id").(string)), - AutoScalingPolicy: autoScalingPolicy, InstanceGroupId: aws.String(d.Id()), } - if _, err := conn.PutAutoScalingPolicyWithContext(ctx, putAutoScalingPolicy); err != nil { - return sdkdiag.AppendErrorf(diags, "updating autoscaling policy for instance group %q: %s", d.Id(), err) + _, err := conn.PutAutoScalingPolicy(ctx, input) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "updating EMR Instance Group (%s) AutoScalingPolicy: %s", d.Id(), err) } } @@ -344,95 +330,147 @@ func resourceInstanceGroupUpdate(ctx context.Context, d *schema.ResourceData, me func resourceInstanceGroupDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) - log.Printf("[WARN] AWS EMR Instance Group does not support DELETE; resizing cluster to zero before removing from state") - params := &emr.ModifyInstanceGroupsInput{ - InstanceGroups: []*emr.InstanceGroupModifyConfig{ + input := &emr.ModifyInstanceGroupsInput{ + InstanceGroups: []awstypes.InstanceGroupModifyConfig{ { + InstanceCount: aws.Int32(0), InstanceGroupId: aws.String(d.Id()), - InstanceCount: aws.Int64(0), }, }, } - if _, err := conn.ModifyInstanceGroupsWithContext(ctx, params); err != nil { - return sdkdiag.AppendErrorf(diags, "draining EMR Instance Group (%s): %s", d.Id(), err) + _, err := conn.ModifyInstanceGroups(ctx, input) + + if tfawserr.ErrMessageContains(err, errCodeValidationException, "instance group may only be modified when the cluster is running or waiting") { + return diags + } + + if err != nil { + return sdkdiag.AppendErrorf(diags, "deleting EMR Instance Group (%s): %s", d.Id(), err) } + return diags } -func instanceGroupStateRefresh(ctx context.Context, conn *emr.EMR, clusterID, groupID string) retry.StateRefreshFunc { - return func() (interface{}, string, error) { - ig, err := fetchInstanceGroup(ctx, conn, clusterID, groupID) - if err != nil { - return nil, "Not Found", err - } +func findInstanceGroupByTwoPartKey(ctx context.Context, conn *emr.Client, clusterID, groupID string) (*awstypes.InstanceGroup, error) { + input := &emr.ListInstanceGroupsInput{ + ClusterId: aws.String(clusterID), + } + output, err := findInstanceGroup(ctx, conn, input, func(v *awstypes.InstanceGroup) bool { + return aws.ToString(v.Id) == groupID + }) + + if err != nil { + return nil, err + } - if ig.Status == nil || ig.Status.State == nil { - log.Printf("[WARN] ERM Instance Group found, but without state") - return nil, "Undefined", fmt.Errorf("Undefined EMR Cluster Instance Group state") + if state := output.Status.State; state == awstypes.InstanceGroupStateTerminating || state == awstypes.InstanceGroupStateTerminated { + return nil, &retry.NotFoundError{ + Message: string(state), + LastRequest: input, } + } + + return output, nil +} - return ig, *ig.Status.State, nil +func findInstanceGroup(ctx context.Context, conn *emr.Client, input *emr.ListInstanceGroupsInput, filter tfslices.Predicate[*awstypes.InstanceGroup]) (*awstypes.InstanceGroup, error) { + output, err := findInstanceGroups(ctx, conn, input, filter) + + if err != nil { + return nil, err } + + return tfresource.AssertSingleValueResult(output) } -func fetchInstanceGroup(ctx context.Context, conn *emr.EMR, clusterID, groupID string) (*emr.InstanceGroup, error) { - input := &emr.ListInstanceGroupsInput{ClusterId: aws.String(clusterID)} +func findInstanceGroups(ctx context.Context, conn *emr.Client, input *emr.ListInstanceGroupsInput, filter tfslices.Predicate[*awstypes.InstanceGroup]) ([]awstypes.InstanceGroup, error) { + var output []awstypes.InstanceGroup - var groups []*emr.InstanceGroup - err := conn.ListInstanceGroupsPagesWithContext(ctx, input, func(page *emr.ListInstanceGroupsOutput, lastPage bool) bool { - groups = append(groups, page.InstanceGroups...) + pages := emr.NewListInstanceGroupsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) - return !lastPage - }) + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "is not valid") { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, + } + } - if err != nil { - return nil, fmt.Errorf("unable to retrieve EMR Cluster (%q): %s", clusterID, err) - } + if err != nil { + return nil, err + } - if len(groups) == 0 { - return nil, fmt.Errorf("no instance groups found for EMR Cluster (%s)", clusterID) + for _, v := range page.InstanceGroups { + if v.Status != nil && filter(&v) { + output = append(output, v) + } + } } - var ig *emr.InstanceGroup - for _, group := range groups { - if groupID == aws.StringValue(group.Id) { - ig = group - break + return output, nil +} + +func statusInstanceGroup(ctx context.Context, conn *emr.Client, clusterID, groupID string) retry.StateRefreshFunc { + return func() (interface{}, string, error) { + output, err := findInstanceGroupByTwoPartKey(ctx, conn, clusterID, groupID) + + if tfresource.NotFound(err) { + return nil, "", nil + } + + if err != nil { + return nil, "", err } + + return output, string(output.Status.State), nil } +} - if ig == nil { - return nil, &retry.NotFoundError{} +func waitInstanceGroupRunning(ctx context.Context, conn *emr.Client, clusterID, groupID string, timeout time.Duration) (*awstypes.InstanceGroup, error) { //nolint:unparam + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.InstanceGroupStateBootstrapping, awstypes.InstanceGroupStateProvisioning, awstypes.InstanceGroupStateReconfiguring, awstypes.InstanceGroupStateResizing), + Target: enum.Slice(awstypes.InstanceGroupStateRunning), + Refresh: statusInstanceGroup(ctx, conn, clusterID, groupID), + Timeout: timeout, + Delay: 10 * time.Second, + MinTimeout: 3 * time.Second, } - return ig, nil + outputRaw, err := stateConf.WaitForStateContext(ctx) + + if output, ok := outputRaw.(*awstypes.InstanceGroup); ok { + return output, err + } + + return nil, err } // readEBSConfig populates an emr.EbsConfiguration struct -func readEBSConfig(d *schema.ResourceData) *emr.EbsConfiguration { - result := &emr.EbsConfiguration{} +func readEBSConfig(d *schema.ResourceData) *awstypes.EbsConfiguration { + result := &awstypes.EbsConfiguration{} if v, ok := d.GetOk("ebs_optimized"); ok { result.EbsOptimized = aws.Bool(v.(bool)) } - ebsConfigs := make([]*emr.EbsBlockDeviceConfig, 0) + ebsConfigs := make([]awstypes.EbsBlockDeviceConfig, 0) if rawConfig, ok := d.GetOk("ebs_config"); ok { configList := rawConfig.(*schema.Set).List() for _, config := range configList { conf := config.(map[string]interface{}) - ebs := &emr.EbsBlockDeviceConfig{} - volumeSpec := &emr.VolumeSpecification{ - SizeInGB: aws.Int64(int64(conf[names.AttrSize].(int))), + ebs := awstypes.EbsBlockDeviceConfig{} + volumeSpec := &awstypes.VolumeSpecification{ + SizeInGB: aws.Int32(int32(conf[names.AttrSize].(int))), VolumeType: aws.String(conf[names.AttrType].(string)), } if v, ok := conf[names.AttrIOPS].(int); ok && v != 0 { - volumeSpec.Iops = aws.Int64(int64(v)) + volumeSpec.Iops = aws.Int32(int32(v)) } if v, ok := conf["volumes_per_instance"].(int); ok && v != 0 { - ebs.VolumesPerInstance = aws.Int64(int64(v)) + ebs.VolumesPerInstance = aws.Int32(int32(v)) } ebs.VolumeSpecification = volumeSpec ebsConfigs = append(ebsConfigs, ebs) @@ -441,23 +479,3 @@ func readEBSConfig(d *schema.ResourceData) *emr.EbsConfiguration { result.EbsBlockDeviceConfigs = ebsConfigs return result } - -func waitForInstanceGroupStateRunning(ctx context.Context, conn *emr.EMR, clusterID string, instanceGroupID string, timeout time.Duration) error { - stateConf := &retry.StateChangeConf{ - Pending: []string{ - emr.InstanceGroupStateBootstrapping, - emr.InstanceGroupStateProvisioning, - emr.InstanceGroupStateReconfiguring, - emr.InstanceGroupStateResizing, - }, - Target: []string{emr.InstanceGroupStateRunning}, - Refresh: instanceGroupStateRefresh(ctx, conn, clusterID, instanceGroupID), - Timeout: timeout, - Delay: 10 * time.Second, - MinTimeout: 3 * time.Second, - } - - _, err := stateConf.WaitForStateContext(ctx) - - return err -} diff --git a/internal/service/emr/instance_group_test.go b/internal/service/emr/instance_group_test.go index 145f40e2917..2b96b3c2a0e 100644 --- a/internal/service/emr/instance_group_test.go +++ b/internal/service/emr/instance_group_test.go @@ -8,8 +8,8 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/emr" + "github.com/aws/aws-sdk-go-v2/aws" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -21,7 +21,7 @@ import ( func TestAccEMRInstanceGroup_basic(t *testing.T) { ctx := acctest.Context(t) - var v emr.InstanceGroup + var v awstypes.InstanceGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_instance_group.test" @@ -53,7 +53,7 @@ func TestAccEMRInstanceGroup_basic(t *testing.T) { func TestAccEMRInstanceGroup_disappears(t *testing.T) { ctx := acctest.Context(t) - var v emr.InstanceGroup + var v awstypes.InstanceGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_instance_group.test" @@ -79,8 +79,8 @@ func TestAccEMRInstanceGroup_disappears(t *testing.T) { // Regression test for https://github.com/hashicorp/terraform-provider-aws/issues/1355 func TestAccEMRInstanceGroup_Disappears_emrCluster(t *testing.T) { ctx := acctest.Context(t) - var cluster emr.Cluster - var ig emr.InstanceGroup + var cluster awstypes.Cluster + var ig awstypes.InstanceGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_instance_group.test" emrClusterResourceName := "aws_emr_cluster.test" @@ -106,7 +106,7 @@ func TestAccEMRInstanceGroup_Disappears_emrCluster(t *testing.T) { func TestAccEMRInstanceGroup_bidPrice(t *testing.T) { ctx := acctest.Context(t) - var v1, v2 emr.InstanceGroup + var v1, v2 awstypes.InstanceGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_instance_group.test" @@ -159,7 +159,7 @@ func TestAccEMRInstanceGroup_bidPrice(t *testing.T) { func TestAccEMRInstanceGroup_sJSON(t *testing.T) { ctx := acctest.Context(t) - var v emr.InstanceGroup + var v awstypes.InstanceGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_instance_group.test" @@ -177,11 +177,14 @@ func TestAccEMRInstanceGroup_sJSON(t *testing.T) { ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateIdFunc: testAccInstanceGroupResourceImportStateIdFunc(resourceName), - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{names.AttrStatus}, + ResourceName: resourceName, + ImportState: true, + ImportStateIdFunc: testAccInstanceGroupResourceImportStateIdFunc(resourceName), + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "configurations_json", + names.AttrStatus, + }, }, { Config: testAccInstanceGroupConfig_configurationsJSON(rName, "partitionName2"), @@ -191,11 +194,14 @@ func TestAccEMRInstanceGroup_sJSON(t *testing.T) { ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateIdFunc: testAccInstanceGroupResourceImportStateIdFunc(resourceName), - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{names.AttrStatus}, + ResourceName: resourceName, + ImportState: true, + ImportStateIdFunc: testAccInstanceGroupResourceImportStateIdFunc(resourceName), + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "configurations_json", + names.AttrStatus, + }, }, }, }) @@ -203,7 +209,7 @@ func TestAccEMRInstanceGroup_sJSON(t *testing.T) { func TestAccEMRInstanceGroup_autoScalingPolicy(t *testing.T) { ctx := acctest.Context(t) - var v emr.InstanceGroup + var v awstypes.InstanceGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_instance_group.test" @@ -221,11 +227,14 @@ func TestAccEMRInstanceGroup_autoScalingPolicy(t *testing.T) { ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateIdFunc: testAccInstanceGroupResourceImportStateIdFunc(resourceName), - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{names.AttrStatus}, + ResourceName: resourceName, + ImportState: true, + ImportStateIdFunc: testAccInstanceGroupResourceImportStateIdFunc(resourceName), + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + names.AttrInstanceCount, + names.AttrStatus, + }, }, { Config: testAccInstanceGroupConfig_autoScalingPolicy(rName, 2, 3), @@ -235,11 +244,14 @@ func TestAccEMRInstanceGroup_autoScalingPolicy(t *testing.T) { ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateIdFunc: testAccInstanceGroupResourceImportStateIdFunc(resourceName), - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{names.AttrStatus}, + ResourceName: resourceName, + ImportState: true, + ImportStateIdFunc: testAccInstanceGroupResourceImportStateIdFunc(resourceName), + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + names.AttrInstanceCount, + names.AttrStatus, + }, }, }, }) @@ -249,7 +261,7 @@ func TestAccEMRInstanceGroup_autoScalingPolicy(t *testing.T) { // Regression test for https://github.com/hashicorp/terraform-provider-aws/issues/1264 func TestAccEMRInstanceGroup_instanceCount(t *testing.T) { ctx := acctest.Context(t) - var v emr.InstanceGroup + var v awstypes.InstanceGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_instance_group.test" @@ -280,7 +292,7 @@ func TestAccEMRInstanceGroup_instanceCount(t *testing.T) { func TestAccEMRInstanceGroup_EBS_ebsOptimized(t *testing.T) { ctx := acctest.Context(t) - var v emr.InstanceGroup + var v awstypes.InstanceGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_emr_instance_group.test" @@ -299,11 +311,14 @@ func TestAccEMRInstanceGroup_EBS_ebsOptimized(t *testing.T) { ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateIdFunc: testAccInstanceGroupResourceImportStateIdFunc(resourceName), - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{names.AttrStatus}, + ResourceName: resourceName, + ImportState: true, + ImportStateIdFunc: testAccInstanceGroupResourceImportStateIdFunc(resourceName), + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "ebs_config.0.iops", + names.AttrStatus, + }, }, { Config: testAccInstanceGroupConfig_ebs(rName, false), @@ -317,28 +332,22 @@ func TestAccEMRInstanceGroup_EBS_ebsOptimized(t *testing.T) { }) } -func testAccCheckInstanceGroupExists(ctx context.Context, name string, ig *emr.InstanceGroup) resource.TestCheckFunc { +func testAccCheckInstanceGroupExists(ctx context.Context, n string, v *awstypes.InstanceGroup) resource.TestCheckFunc { return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[name] + rs, ok := s.RootModule().Resources[n] if !ok { - return fmt.Errorf("Not found: %s", name) + return fmt.Errorf("Not found: %s", n) } - if rs.Primary.ID == "" { - return fmt.Errorf("No task group id set") - } + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) + + output, err := tfemr.FindInstanceGroupByTwoPartKey(ctx, conn, rs.Primary.Attributes["cluster_id"], rs.Primary.ID) - meta := acctest.Provider.Meta() - conn := meta.(*conns.AWSClient).EMRConn(ctx) - group, err := tfemr.FetchInstanceGroup(ctx, conn, rs.Primary.Attributes["cluster_id"], rs.Primary.ID) if err != nil { - return fmt.Errorf("EMR error: %v", err) + return err } - if group == nil { - return fmt.Errorf("No match found for (%s)", name) - } - *ig = *group + *v = *output return nil } @@ -355,10 +364,10 @@ func testAccInstanceGroupResourceImportStateIdFunc(resourceName string) resource } } -func testAccInstanceGroupRecreated(t *testing.T, before, after *emr.InstanceGroup) resource.TestCheckFunc { +func testAccInstanceGroupRecreated(t *testing.T, before, after *awstypes.InstanceGroup) resource.TestCheckFunc { return func(s *terraform.State) error { - if aws.StringValue(before.Id) == aws.StringValue(after.Id) { - t.Fatalf("Expected change of Instance Group Ids, but both were %v", aws.StringValue(before.Id)) + if aws.ToString(before.Id) == aws.ToString(after.Id) { + t.Fatalf("Expected change of Instance Group Ids, but both were %v", aws.ToString(before.Id)) } return nil diff --git a/internal/service/emr/managed_scaling_policy.go b/internal/service/emr/managed_scaling_policy.go index d0ea90d537a..e7feb7710be 100644 --- a/internal/service/emr/managed_scaling_policy.go +++ b/internal/service/emr/managed_scaling_policy.go @@ -7,14 +7,18 @@ import ( "context" "log" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/emr" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" + "github.com/hashicorp/aws-sdk-go-base/v2/tfawserr" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" ) // @SDKResource("aws_emr_managed_scaling_policy", name="Managed Scaling Policy") @@ -40,17 +44,6 @@ func resourceManagedScalingPolicy() *schema.Resource { ForceNew: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "unit_type": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validation.StringInSlice(emr.ComputeLimitsUnitType_Values(), false), - }, - "minimum_capacity_units": { - Type: schema.TypeInt, - Required: true, - ForceNew: true, - }, "maximum_capacity_units": { Type: schema.TypeInt, Required: true, @@ -66,6 +59,17 @@ func resourceManagedScalingPolicy() *schema.Resource { Optional: true, ForceNew: true, }, + "minimum_capacity_units": { + Type: schema.TypeInt, + Required: true, + ForceNew: true, + }, + "unit_type": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateDiagFunc: enum.Validate[awstypes.ComputeLimitsUnitType](), + }, }, }, }, @@ -75,133 +79,142 @@ func resourceManagedScalingPolicy() *schema.Resource { func resourceManagedScalingPolicyCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) - - if l := d.Get("compute_limits").(*schema.Set).List(); len(l) > 0 && l[0] != nil { - cl := l[0].(map[string]interface{}) - computeLimits := &emr.ComputeLimits{ - UnitType: aws.String(cl["unit_type"].(string)), - MinimumCapacityUnits: aws.Int64(int64(cl["minimum_capacity_units"].(int))), - MaximumCapacityUnits: aws.Int64(int64(cl["maximum_capacity_units"].(int))), + conn := meta.(*conns.AWSClient).EMRClient(ctx) + + clusterID := d.Get("cluster_id").(string) + if v := d.Get("compute_limits").(*schema.Set).List(); len(v) > 0 && v[0] != nil { + tfMap := v[0].(map[string]interface{}) + computeLimits := &awstypes.ComputeLimits{ + UnitType: awstypes.ComputeLimitsUnitType(tfMap["unit_type"].(string)), + MinimumCapacityUnits: aws.Int32(int32(tfMap["minimum_capacity_units"].(int))), + MaximumCapacityUnits: aws.Int32(int32(tfMap["maximum_capacity_units"].(int))), } - if v, ok := cl["maximum_core_capacity_units"].(int); ok && v > 0 { - computeLimits.MaximumCoreCapacityUnits = aws.Int64(int64(v)) + if v, ok := tfMap["maximum_core_capacity_units"].(int); ok && v > 0 { + computeLimits.MaximumCoreCapacityUnits = aws.Int32(int32(v)) - if v, ok := cl["maximum_ondemand_capacity_units"].(int); ok && v > 0 { - computeLimits.MaximumOnDemandCapacityUnits = aws.Int64(int64(v)) + if v, ok := tfMap["maximum_ondemand_capacity_units"].(int); ok && v > 0 { + computeLimits.MaximumOnDemandCapacityUnits = aws.Int32(int32(v)) } - } else if v, ok := cl["maximum_ondemand_capacity_units"].(int); ok && v >= 0 { - computeLimits.MaximumOnDemandCapacityUnits = aws.Int64(int64(v)) + } else if v, ok := tfMap["maximum_ondemand_capacity_units"].(int); ok && v >= 0 { + computeLimits.MaximumOnDemandCapacityUnits = aws.Int32(int32(v)) } - managedScalingPolicy := &emr.ManagedScalingPolicy{ - ComputeLimits: computeLimits, + input := &emr.PutManagedScalingPolicyInput{ + ClusterId: aws.String(clusterID), + ManagedScalingPolicy: &awstypes.ManagedScalingPolicy{ + ComputeLimits: computeLimits, + }, } - _, err := conn.PutManagedScalingPolicyWithContext(ctx, &emr.PutManagedScalingPolicyInput{ - ClusterId: aws.String(d.Get("cluster_id").(string)), - ManagedScalingPolicy: managedScalingPolicy, - }) + _, err := conn.PutManagedScalingPolicy(ctx, input) if err != nil { - log.Printf("[ERROR] EMR.PutManagedScalingPolicy %s", err) return sdkdiag.AppendErrorf(diags, "putting EMR Managed Scaling Policy: %s", err) } } - d.SetId(d.Get("cluster_id").(string)) + d.SetId(clusterID) + return diags } func resourceManagedScalingPolicyRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) - - input := &emr.GetManagedScalingPolicyInput{ - ClusterId: aws.String(d.Id()), - } - - resp, err := conn.GetManagedScalingPolicyWithContext(ctx, input) + conn := meta.(*conns.AWSClient).EMRClient(ctx) - if tfawserr.ErrMessageContains(err, "ValidationException", "A job flow that is shutting down, terminated, or finished may not be modified") { - log.Printf("[WARN] EMR Managed Scaling Policy (%s) not found, removing from state", d.Id()) - d.SetId("") - return diags - } + managedScalingPolicy, err := findManagedScalingPolicyByID(ctx, conn, d.Id()) - if tfawserr.ErrMessageContains(err, "InvalidRequestException", "does not exist") { + if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] EMR Managed Scaling Policy (%s) not found, removing from state", d.Id()) d.SetId("") return diags } if err != nil { - return sdkdiag.AppendErrorf(diags, "getting EMR Managed Scaling Policy (%s): %s", d.Id(), err) - } - - // Previously after RemoveManagedScalingPolicy the API returned an error, but now it - // returns an empty response. We keep the original error handling above though just in case. - if resp == nil || resp.ManagedScalingPolicy == nil { - log.Printf("[WARN] EMR Managed Scaling Policy (%s) not found, removing from state", d.Id()) - d.SetId("") - return diags + return sdkdiag.AppendErrorf(diags, "reading EMR Managed Scaling Policy (%s): %s", d.Id(), err) } d.Set("cluster_id", d.Id()) - d.Set("compute_limits", flattenComputeLimits(resp.ManagedScalingPolicy.ComputeLimits)) + if err := d.Set("compute_limits", flattenComputeLimits(managedScalingPolicy.ComputeLimits)); err != nil { + return sdkdiag.AppendErrorf(diags, "setting compute_limits: %s", err) + } return diags } func resourceManagedScalingPolicyDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) - input := &emr.RemoveManagedScalingPolicyInput{ - ClusterId: aws.String(d.Get("cluster_id").(string)), + log.Printf("[INFO] Deleting EMR Managed Scaling Policy: %s", d.Id()) + _, err := conn.RemoveManagedScalingPolicy(ctx, &emr.RemoveManagedScalingPolicyInput{ + ClusterId: aws.String(d.Id()), + }) + + if tfawserr.ErrMessageContains(err, errCodeValidationException, "A job flow that is shutting down, terminated, or finished may not be modified") || + errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "does not exist") { + return diags } - _, err := conn.RemoveManagedScalingPolicyWithContext(ctx, input) + if err != nil { + return sdkdiag.AppendErrorf(diags, "deleting EMR Managed Scaling Policy (%s): %s", d.Id(), err) + } - if tfawserr.ErrMessageContains(err, "ValidationException", "A job flow that is shutting down, terminated, or finished may not be modified") { - return diags + return diags +} + +func findManagedScalingPolicyByID(ctx context.Context, conn *emr.Client, id string) (*awstypes.ManagedScalingPolicy, error) { + input := &emr.GetManagedScalingPolicyInput{ + ClusterId: aws.String(id), } - if tfawserr.ErrMessageContains(err, "InvalidRequestException", "does not exist") { - return diags + return findManagedScalingPolicy(ctx, conn, input) +} + +func findManagedScalingPolicy(ctx context.Context, conn *emr.Client, input *emr.GetManagedScalingPolicyInput) (*awstypes.ManagedScalingPolicy, error) { + output, err := conn.GetManagedScalingPolicy(ctx, input) + + if tfawserr.ErrMessageContains(err, errCodeValidationException, "A job flow that is shutting down, terminated, or finished may not be modified") || + errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "does not exist") { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, + } } if err != nil { - return sdkdiag.AppendErrorf(diags, "removing EMR Managed Scaling Policy (%s): %s", d.Id(), err) + return nil, err } - return diags + if output == nil || output.ManagedScalingPolicy == nil { + return nil, tfresource.NewEmptyResultError((input)) + } + + return output.ManagedScalingPolicy, nil } -func flattenComputeLimits(apiObject *emr.ComputeLimits) []interface{} { +func flattenComputeLimits(apiObject *awstypes.ComputeLimits) []interface{} { if apiObject == nil { return nil } tfMap := map[string]interface{}{} - if v := apiObject.UnitType; v != nil { - tfMap["unit_type"] = aws.StringValue(v) - } + tfMap["unit_type"] = string(apiObject.UnitType) if v := apiObject.MaximumCapacityUnits; v != nil { - tfMap["maximum_capacity_units"] = aws.Int64Value(v) + tfMap["maximum_capacity_units"] = aws.ToInt32(v) } if v := apiObject.MaximumCoreCapacityUnits; v != nil { - tfMap["maximum_core_capacity_units"] = aws.Int64Value(v) + tfMap["maximum_core_capacity_units"] = aws.ToInt32(v) } if v := apiObject.MaximumOnDemandCapacityUnits; v != nil { - tfMap["maximum_ondemand_capacity_units"] = aws.Int64Value(v) + tfMap["maximum_ondemand_capacity_units"] = aws.ToInt32(v) } if v := apiObject.MinimumCapacityUnits; v != nil { - tfMap["minimum_capacity_units"] = aws.Int64Value(v) + tfMap["minimum_capacity_units"] = aws.ToInt32(v) } return []interface{}{tfMap} diff --git a/internal/service/emr/managed_scaling_policy_test.go b/internal/service/emr/managed_scaling_policy_test.go index c03320e65cf..a5e5cf2e8b6 100644 --- a/internal/service/emr/managed_scaling_policy_test.go +++ b/internal/service/emr/managed_scaling_policy_test.go @@ -8,15 +8,13 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/emr" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/hashicorp/terraform-provider-aws/internal/acctest" "github.com/hashicorp/terraform-provider-aws/internal/conns" tfemr "github.com/hashicorp/terraform-provider-aws/internal/service/emr" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -43,7 +41,6 @@ func TestAccEMRManagedScalingPolicy_basic(t *testing.T) { ErrorCheck: acctest.ErrorCheck(t, names.EMRServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckManagedScalingPolicyDestroy(ctx), - Steps: []resource.TestStep{ { Config: testAccManagedScalingPolicyConfig_basic(rName), @@ -55,6 +52,10 @@ func TestAccEMRManagedScalingPolicy_basic(t *testing.T) { ResourceName: resourceName, ImportState: true, ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "compute_limits.0.maximum_core_capacity_units", + "compute_limits.0.maximum_ondemand_capacity_units", + }, }, }, }) @@ -105,6 +106,9 @@ func TestAccEMRManagedScalingPolicy_ComputeLimits_maximumCoreCapacityUnits(t *te ResourceName: resourceName, ImportState: true, ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "compute_limits.0.maximum_ondemand_capacity_units", + }, }, }, }) @@ -132,6 +136,9 @@ func TestAccEMRManagedScalingPolicy_ComputeLimits_maximumOnDemandCapacityUnits(t ResourceName: resourceName, ImportState: true, ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "compute_limits.0.maximum_core_capacity_units", + }, }, }, }) @@ -159,6 +166,9 @@ func TestAccEMRManagedScalingPolicy_ComputeLimits_maximumOnDemandCapacityUnitsSp ResourceName: resourceName, ImportState: true, ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "compute_limits.0.maximum_core_capacity_units", + }, }, }, }) @@ -171,52 +181,34 @@ func testAccCheckManagedScalingPolicyExists(ctx context.Context, n string) resou return fmt.Errorf("Not found: %s", n) } - if rs.Primary.ID == "" { - return fmt.Errorf("No EMR Managed Scaling Policy ID is set") - } + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) - resp, err := conn.GetManagedScalingPolicyWithContext(ctx, &emr.GetManagedScalingPolicyInput{ - ClusterId: aws.String(rs.Primary.ID), - }) - if err != nil { - return err - } + _, err := tfemr.FindManagedScalingPolicyByID(ctx, conn, rs.Primary.ID) - if resp.ManagedScalingPolicy == nil { - return fmt.Errorf("EMR Managed Scaling Policy is empty which shouldn't happen") - } - return nil + return err } } func testAccCheckManagedScalingPolicyDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) + for _, rs := range s.RootModule().Resources { if rs.Type != "aws_emr_managed_scaling_policy" { continue } - resp, err := conn.GetManagedScalingPolicyWithContext(ctx, &emr.GetManagedScalingPolicyInput{ - ClusterId: aws.String(rs.Primary.ID), - }) + _, err := tfemr.FindManagedScalingPolicyByID(ctx, conn, rs.Primary.ID) - if tfawserr.ErrMessageContains(err, "InvalidRequestException", "does not exist") { - continue - } - - if tfawserr.ErrMessageContains(err, "ValidationException", "A job flow that is shutting down, terminated, or finished may not be modified") { + if tfresource.NotFound(err) { continue } if err != nil { - return fmt.Errorf("error reading EMR Managed Scaling Policy (%s): %w", rs.Primary.ID, err) + return err } - if resp != nil && resp.ManagedScalingPolicy != nil { - return fmt.Errorf("EMR Managed Scaling Policy (%s) still exists", rs.Primary.ID) - } + return fmt.Errorf("EMR Managed Scaling Policy %s still exists", rs.Primary.ID) } return nil diff --git a/internal/service/emr/release_labels_data_source.go b/internal/service/emr/release_labels_data_source.go index 78172f71ecc..8405f591f90 100644 --- a/internal/service/emr/release_labels_data_source.go +++ b/internal/service/emr/release_labels_data_source.go @@ -7,8 +7,9 @@ import ( "context" "strings" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/emr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/internal/conns" @@ -51,7 +52,7 @@ func dataSourceReleaseLabels() *schema.Resource { func dataSourceReleaseLabelsRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) input := &emr.ListReleaseLabelsInput{} @@ -59,14 +60,12 @@ func dataSourceReleaseLabelsRead(ctx context.Context, d *schema.ResourceData, me input.Filters = expandReleaseLabelsFilters(v.([]interface{})) } - output, err := findReleaseLabels(ctx, conn, input) + releaseLabels, err := findReleaseLabels(ctx, conn, input) if err != nil { return sdkdiag.AppendErrorf(diags, "reading EMR Release Labels: %s", err) } - releaseLabels := aws.StringValueSlice(output) - if len(releaseLabels) == 0 { d.SetId(",") } else { @@ -77,13 +76,13 @@ func dataSourceReleaseLabelsRead(ctx context.Context, d *schema.ResourceData, me return diags } -func expandReleaseLabelsFilters(filters []interface{}) *emr.ReleaseLabelFilter { +func expandReleaseLabelsFilters(filters []interface{}) *awstypes.ReleaseLabelFilter { if len(filters) == 0 || filters[0] == nil { return nil } m := filters[0].(map[string]interface{}) - app := &emr.ReleaseLabelFilter{} + app := &awstypes.ReleaseLabelFilter{} if v, ok := m["application"].(string); ok && v != "" { app.Application = aws.String(v) @@ -96,24 +95,19 @@ func expandReleaseLabelsFilters(filters []interface{}) *emr.ReleaseLabelFilter { return app } -func findReleaseLabels(ctx context.Context, conn *emr.EMR, input *emr.ListReleaseLabelsInput) ([]*string, error) { - var output []*string +func findReleaseLabels(ctx context.Context, conn *emr.Client, input *emr.ListReleaseLabelsInput) ([]string, error) { + var output []string - err := conn.ListReleaseLabelsPagesWithContext(ctx, input, func(page *emr.ListReleaseLabelsOutput, lastPage bool) bool { - if page == nil { - return !lastPage - } - for _, v := range page.ReleaseLabels { - if v != nil { - output = append(output, v) - } - } + pages := emr.NewListReleaseLabelsPaginator(conn, input) - return !lastPage - }) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) - if err != nil { - return nil, err + if err != nil { + return nil, err + } + + output = append(output, page.ReleaseLabels...) } return output, nil diff --git a/internal/service/emr/security_configuration.go b/internal/service/emr/security_configuration.go index db9e7b76164..182e6175402 100644 --- a/internal/service/emr/security_configuration.go +++ b/internal/service/emr/security_configuration.go @@ -8,9 +8,9 @@ import ( "log" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/emr" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" @@ -18,6 +18,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" @@ -67,7 +68,7 @@ func resourceSecurityConfiguration() *schema.Resource { func resourceSecurityConfigurationCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) name := create.NewNameGenerator( create.WithConfiguredName(d.Get(names.AttrName).(string)), @@ -79,20 +80,20 @@ func resourceSecurityConfigurationCreate(ctx context.Context, d *schema.Resource SecurityConfiguration: aws.String(d.Get(names.AttrConfiguration).(string)), } - output, err := conn.CreateSecurityConfigurationWithContext(ctx, input) + output, err := conn.CreateSecurityConfiguration(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating EMR Security Configuration (%s): %s", name, err) } - d.SetId(aws.StringValue(output.Name)) + d.SetId(aws.ToString(output.Name)) return append(diags, resourceSecurityConfigurationRead(ctx, d, meta)...) } func resourceSecurityConfigurationRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) output, err := findSecurityConfigurationByName(ctx, conn, d.Id()) @@ -107,23 +108,23 @@ func resourceSecurityConfigurationRead(ctx context.Context, d *schema.ResourceDa } d.Set(names.AttrConfiguration, output.SecurityConfiguration) - d.Set(names.AttrCreationDate, aws.TimeValue(output.CreationDateTime).Format(time.RFC3339)) + d.Set(names.AttrCreationDate, aws.ToTime(output.CreationDateTime).Format(time.RFC3339)) d.Set(names.AttrName, output.Name) - d.Set(names.AttrNamePrefix, create.NamePrefixFromName(aws.StringValue(output.Name))) + d.Set(names.AttrNamePrefix, create.NamePrefixFromName(aws.ToString(output.Name))) return diags } func resourceSecurityConfigurationDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) log.Printf("[INFO] Deleting EMR Security Configuration: %s", d.Id()) - _, err := conn.DeleteSecurityConfigurationWithContext(ctx, &emr.DeleteSecurityConfigurationInput{ + _, err := conn.DeleteSecurityConfiguration(ctx, &emr.DeleteSecurityConfigurationInput{ Name: aws.String(d.Id()), }) - if tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "does not exist") { + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "does not exist") { return diags } @@ -134,14 +135,14 @@ func resourceSecurityConfigurationDelete(ctx context.Context, d *schema.Resource return diags } -func findSecurityConfigurationByName(ctx context.Context, conn *emr.EMR, name string) (*emr.DescribeSecurityConfigurationOutput, error) { +func findSecurityConfigurationByName(ctx context.Context, conn *emr.Client, name string) (*emr.DescribeSecurityConfigurationOutput, error) { input := &emr.DescribeSecurityConfigurationInput{ Name: aws.String(name), } - output, err := conn.DescribeSecurityConfigurationWithContext(ctx, input) + output, err := conn.DescribeSecurityConfiguration(ctx, input) - if tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "does not exist") { + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "does not exist") { return nil, &retry.NotFoundError{ LastError: err, LastRequest: input, diff --git a/internal/service/emr/security_configuration_test.go b/internal/service/emr/security_configuration_test.go index 572a09199ca..8cdbc151779 100644 --- a/internal/service/emr/security_configuration_test.go +++ b/internal/service/emr/security_configuration_test.go @@ -127,7 +127,7 @@ func TestAccEMRSecurityConfiguration_namePrefix(t *testing.T) { func testAccCheckSecurityConfigurationDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_emr_security_configuration" { @@ -158,7 +158,7 @@ func testAccCheckSecurityConfigurationExists(ctx context.Context, n string) reso return fmt.Errorf("Not found: %s", n) } - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) _, err := tfemr.FindSecurityConfigurationByName(ctx, conn, rs.Primary.ID) diff --git a/internal/service/emr/service_endpoint_resolver_gen.go b/internal/service/emr/service_endpoint_resolver_gen.go index 2ab4e13c2d8..33c970d203a 100644 --- a/internal/service/emr/service_endpoint_resolver_gen.go +++ b/internal/service/emr/service_endpoint_resolver_gen.go @@ -6,78 +6,14 @@ import ( "context" "fmt" "net" - "net/url" aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" emr_sdkv2 "github.com/aws/aws-sdk-go-v2/service/emr" - endpoints_sdkv1 "github.com/aws/aws-sdk-go/aws/endpoints" smithyendpoints "github.com/aws/smithy-go/endpoints" "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/hashicorp/terraform-provider-aws/internal/errs" ) -var _ endpoints_sdkv1.Resolver = resolverSDKv1{} - -type resolverSDKv1 struct { - ctx context.Context -} - -func newEndpointResolverSDKv1(ctx context.Context) resolverSDKv1 { - return resolverSDKv1{ - ctx: ctx, - } -} - -func (r resolverSDKv1) EndpointFor(service, region string, opts ...func(*endpoints_sdkv1.Options)) (endpoint endpoints_sdkv1.ResolvedEndpoint, err error) { - ctx := r.ctx - - var opt endpoints_sdkv1.Options - opt.Set(opts...) - - useFIPS := opt.UseFIPSEndpoint == endpoints_sdkv1.FIPSEndpointStateEnabled - - defaultResolver := endpoints_sdkv1.DefaultResolver() - - if useFIPS { - ctx = tflog.SetField(ctx, "tf_aws.use_fips", useFIPS) - - endpoint, err = defaultResolver.EndpointFor(service, region, opts...) - if err != nil { - return endpoint, err - } - - tflog.Debug(ctx, "endpoint resolved", map[string]any{ - "tf_aws.endpoint": endpoint.URL, - }) - - var endpointURL *url.URL - endpointURL, err = url.Parse(endpoint.URL) - if err != nil { - return endpoint, err - } - - hostname := endpointURL.Hostname() - _, err = net.LookupHost(hostname) - if err != nil { - if dnsErr, ok := errs.As[*net.DNSError](err); ok && dnsErr.IsNotFound { - tflog.Debug(ctx, "default endpoint host not found, disabling FIPS", map[string]any{ - "tf_aws.hostname": hostname, - }) - opts = append(opts, func(o *endpoints_sdkv1.Options) { - o.UseFIPSEndpoint = endpoints_sdkv1.FIPSEndpointStateDisabled - }) - } else { - err = fmt.Errorf("looking up accessanalyzer endpoint %q: %s", hostname, err) - return - } - } else { - return endpoint, err - } - } - - return defaultResolver.EndpointFor(service, region, opts...) -} - var _ emr_sdkv2.EndpointResolverV2 = resolverSDKv2{} type resolverSDKv2 struct { diff --git a/internal/service/emr/service_endpoints_gen_test.go b/internal/service/emr/service_endpoints_gen_test.go index db0da56e3d8..e4719e4ceb4 100644 --- a/internal/service/emr/service_endpoints_gen_test.go +++ b/internal/service/emr/service_endpoints_gen_test.go @@ -18,8 +18,6 @@ import ( aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" emr_sdkv2 "github.com/aws/aws-sdk-go-v2/service/emr" - aws_sdkv1 "github.com/aws/aws-sdk-go/aws" - emr_sdkv1 "github.com/aws/aws-sdk-go/service/emr" "github.com/aws/smithy-go/middleware" smithyhttp "github.com/aws/smithy-go/transport/http" "github.com/google/go-cmp/cmp" @@ -236,25 +234,13 @@ func TestEndpointConfiguration(t *testing.T) { //nolint:paralleltest // uses t.S }, } - t.Run("v1", func(t *testing.T) { - for name, testcase := range testcases { //nolint:paralleltest // uses t.Setenv - testcase := testcase + for name, testcase := range testcases { //nolint:paralleltest // uses t.Setenv + testcase := testcase - t.Run(name, func(t *testing.T) { - testEndpointCase(t, providerRegion, testcase, callServiceV1) - }) - } - }) - - t.Run("v2", func(t *testing.T) { - for name, testcase := range testcases { //nolint:paralleltest // uses t.Setenv - testcase := testcase - - t.Run(name, func(t *testing.T) { - testEndpointCase(t, providerRegion, testcase, callServiceV2) - }) - } - }) + t.Run(name, func(t *testing.T) { + testEndpointCase(t, providerRegion, testcase, callService) + }) + } } func defaultEndpoint(region string) (url.URL, error) { @@ -292,7 +278,7 @@ func defaultFIPSEndpoint(region string) (url.URL, error) { return ep.URI, nil } -func callServiceV2(ctx context.Context, t *testing.T, meta *conns.AWSClient) apiCallParams { +func callService(ctx context.Context, t *testing.T, meta *conns.AWSClient) apiCallParams { t.Helper() client := meta.EMRClient(ctx) @@ -317,21 +303,6 @@ func callServiceV2(ctx context.Context, t *testing.T, meta *conns.AWSClient) api return result } -func callServiceV1(ctx context.Context, t *testing.T, meta *conns.AWSClient) apiCallParams { - t.Helper() - - client := meta.EMRConn(ctx) - - req, _ := client.ListClustersRequest(&emr_sdkv1.ListClustersInput{}) - - req.HTTPRequest.URL.Path = "/" - - return apiCallParams{ - endpoint: req.HTTPRequest.URL.String(), - region: aws_sdkv1.StringValue(client.Config.Region), - } -} - func withNoConfig(_ *caseSetup) { // no-op } diff --git a/internal/service/emr/service_package_gen.go b/internal/service/emr/service_package_gen.go index 43ac84ff7ac..51119aaee74 100644 --- a/internal/service/emr/service_package_gen.go +++ b/internal/service/emr/service_package_gen.go @@ -7,10 +7,6 @@ import ( aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" emr_sdkv2 "github.com/aws/aws-sdk-go-v2/service/emr" - aws_sdkv1 "github.com/aws/aws-sdk-go/aws" - session_sdkv1 "github.com/aws/aws-sdk-go/aws/session" - emr_sdkv1 "github.com/aws/aws-sdk-go/service/emr" - "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/hashicorp/terraform-provider-aws/internal/conns" "github.com/hashicorp/terraform-provider-aws/internal/types" "github.com/hashicorp/terraform-provider-aws/names" @@ -96,24 +92,6 @@ func (p *servicePackage) ServicePackageName() string { return names.EMR } -// NewConn returns a new AWS SDK for Go v1 client for this service package's AWS API. -func (p *servicePackage) NewConn(ctx context.Context, config map[string]any) (*emr_sdkv1.EMR, error) { - sess := config[names.AttrSession].(*session_sdkv1.Session) - - cfg := aws_sdkv1.Config{} - - if endpoint := config[names.AttrEndpoint].(string); endpoint != "" { - tflog.Debug(ctx, "setting endpoint", map[string]any{ - "tf_aws.endpoint": endpoint, - }) - cfg.Endpoint = aws_sdkv1.String(endpoint) - } else { - cfg.EndpointResolver = newEndpointResolverSDKv1(ctx) - } - - return emr_sdkv1.New(sess.Copy(&cfg)), nil -} - // NewClient returns a new AWS SDK for Go v2 client for this service package's AWS API. func (p *servicePackage) NewClient(ctx context.Context, config map[string]any) (*emr_sdkv2.Client, error) { cfg := *(config["aws_sdkv2_config"].(*aws_sdkv2.Config)) diff --git a/internal/service/emr/studio.go b/internal/service/emr/studio.go index 13639db44e2..381d3ea9995 100644 --- a/internal/service/emr/studio.go +++ b/internal/service/emr/studio.go @@ -7,14 +7,16 @@ import ( "context" "log" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/emr" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/flex" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" @@ -44,10 +46,10 @@ func resourceStudio() *schema.Resource { Computed: true, }, "auth_mode": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validation.StringInSlice(emr.AuthMode_Values(), false), + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateDiagFunc: enum.Validate[awstypes.AuthMode](), }, "default_s3_location": { Type: schema.TypeString, @@ -119,15 +121,16 @@ func resourceStudio() *schema.Resource { func resourceStudioCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) + name := d.Get(names.AttrName).(string) input := &emr.CreateStudioInput{ - AuthMode: aws.String(d.Get("auth_mode").(string)), + AuthMode: awstypes.AuthMode(d.Get("auth_mode").(string)), DefaultS3Location: aws.String(d.Get("default_s3_location").(string)), EngineSecurityGroupId: aws.String(d.Get("engine_security_group_id").(string)), - Name: aws.String(d.Get(names.AttrName).(string)), + Name: aws.String(name), ServiceRole: aws.String(d.Get(names.AttrServiceRole).(string)), - SubnetIds: flex.ExpandStringSet(d.Get(names.AttrSubnetIDs).(*schema.Set)), + SubnetIds: flex.ExpandStringValueSet(d.Get(names.AttrSubnetIDs).(*schema.Set)), Tags: getTagsIn(ctx), VpcId: aws.String(d.Get(names.AttrVPCID).(string)), WorkspaceSecurityGroupId: aws.String(d.Get("workspace_security_group_id").(string)), @@ -149,71 +152,32 @@ func resourceStudioCreate(ctx context.Context, d *schema.ResourceData, meta inte input.UserRole = aws.String(v.(string)) } - var result *emr.CreateStudioOutput - err := retry.RetryContext(ctx, propagationTimeout, func() *retry.RetryError { - var err error - result, err = conn.CreateStudioWithContext(ctx, input) - if tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "entity does not have permissions to assume role") { - return retry.RetryableError(err) - } - if tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "Service role does not have permission to access") { - return retry.RetryableError(err) - } - if err != nil { - return retry.NonRetryableError(err) - } - return nil - }) - if tfresource.TimedOut(err) { - result, err = conn.CreateStudioWithContext(ctx, input) - } - if err != nil { - return sdkdiag.AppendErrorf(diags, "creating EMR Studio: %s", err) - } - - d.SetId(aws.StringValue(result.StudioId)) - - return append(diags, resourceStudioRead(ctx, d, meta)...) -} - -func resourceStudioUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) - - if d.HasChangesExcept(names.AttrTags, names.AttrTagsAll) { - input := &emr.UpdateStudioInput{ - StudioId: aws.String(d.Id()), - } - - if d.HasChange(names.AttrDescription) { - input.Description = aws.String(d.Get(names.AttrDescription).(string)) - } - - if d.HasChange(names.AttrName) { - input.Name = aws.String(d.Get(names.AttrName).(string)) - } - - if d.HasChange("default_s3_location") { - input.DefaultS3Location = aws.String(d.Get("default_s3_location").(string)) - } - - if d.HasChange(names.AttrSubnetIDs) { - input.SubnetIds = flex.ExpandStringSet(d.Get(names.AttrSubnetIDs).(*schema.Set)) - } + outputRaw, err := tfresource.RetryWhen(ctx, propagationTimeout, + func() (interface{}, error) { + return conn.CreateStudio(ctx, input) + }, + func(err error) (bool, error) { + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "entity does not have permissions to assume role") || + errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "Service role does not have permission to access") { + return true, err + } - _, err := conn.UpdateStudioWithContext(ctx, input) + return false, err + }, + ) - if err != nil { - return sdkdiag.AppendErrorf(diags, "updating EMR Studio: %s", err) - } + if err != nil { + return sdkdiag.AppendErrorf(diags, "creating EMR Studio (%s): %s", name, err) } + d.SetId(aws.ToString(outputRaw.(*emr.CreateStudioOutput).StudioId)) + return append(diags, resourceStudioRead(ctx, d, meta)...) } func resourceStudioRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) studio, err := findStudioByID(ctx, conn, d.Id()) @@ -236,46 +200,80 @@ func resourceStudioRead(ctx context.Context, d *schema.ResourceData, meta interf d.Set("idp_relay_state_parameter_name", studio.IdpRelayStateParameterName) d.Set(names.AttrName, studio.Name) d.Set(names.AttrServiceRole, studio.ServiceRole) + d.Set(names.AttrSubnetIDs, studio.SubnetIds) d.Set(names.AttrURL, studio.Url) d.Set("user_role", studio.UserRole) d.Set(names.AttrVPCID, studio.VpcId) d.Set("workspace_security_group_id", studio.WorkspaceSecurityGroupId) - d.Set(names.AttrSubnetIDs, flex.FlattenStringSet(studio.SubnetIds)) setTagsOut(ctx, studio.Tags) return diags } -func resourceStudioDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { +func resourceStudioUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) - request := &emr.DeleteStudioInput{ - StudioId: aws.String(d.Id()), + if d.HasChangesExcept(names.AttrTags, names.AttrTagsAll) { + input := &emr.UpdateStudioInput{ + StudioId: aws.String(d.Id()), + } + + if d.HasChange("default_s3_location") { + input.DefaultS3Location = aws.String(d.Get("default_s3_location").(string)) + } + + if d.HasChange(names.AttrDescription) { + input.Description = aws.String(d.Get(names.AttrDescription).(string)) + } + + if d.HasChange(names.AttrName) { + input.Name = aws.String(d.Get(names.AttrName).(string)) + } + + if d.HasChange(names.AttrSubnetIDs) { + input.SubnetIds = flex.ExpandStringValueSet(d.Get(names.AttrSubnetIDs).(*schema.Set)) + } + + _, err := conn.UpdateStudio(ctx, input) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "updating EMR Studio: %s", err) + } } + return append(diags, resourceStudioRead(ctx, d, meta)...) +} + +func resourceStudioDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + conn := meta.(*conns.AWSClient).EMRClient(ctx) + log.Printf("[INFO] Deleting EMR Studio: %s", d.Id()) - _, err := conn.DeleteStudioWithContext(ctx, request) + _, err := conn.DeleteStudio(ctx, &emr.DeleteStudioInput{ + StudioId: aws.String(d.Id()), + }) + + if errs.IsA[*awstypes.InternalServerException](err) { + return diags + } if err != nil { - if tfawserr.ErrCodeEquals(err, emr.ErrCodeInternalServerException) { - return diags - } return sdkdiag.AppendErrorf(diags, "deleting EMR Studio (%s): %s", d.Id(), err) } return diags } -func findStudioByID(ctx context.Context, conn *emr.EMR, id string) (*emr.Studio, error) { +func findStudioByID(ctx context.Context, conn *emr.Client, id string) (*awstypes.Studio, error) { input := &emr.DescribeStudioInput{ StudioId: aws.String(id), } - output, err := conn.DescribeStudioWithContext(ctx, input) + output, err := conn.DescribeStudio(ctx, input) - if tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "Studio does not exist") { + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "Studio does not exist") { return nil, &retry.NotFoundError{ LastError: err, LastRequest: input, diff --git a/internal/service/emr/studio_session_mapping.go b/internal/service/emr/studio_session_mapping.go index f4aab2a7c2f..ea122e4bc54 100644 --- a/internal/service/emr/studio_session_mapping.go +++ b/internal/service/emr/studio_session_mapping.go @@ -7,15 +7,18 @@ import ( "context" "fmt" "log" + "strings" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/emr" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/YakDriver/regexache" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/internal/verify" @@ -49,10 +52,10 @@ func resourceStudioSessionMapping() *schema.Resource { ExactlyOneOf: []string{"identity_id", "identity_name"}, }, "identity_type": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validation.StringInSlice(emr.IdentityType_Values(), false), + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateDiagFunc: enum.Validate[awstypes.IdentityType](), }, "session_policy_arn": { Type: schema.TypeString, @@ -70,13 +73,13 @@ func resourceStudioSessionMapping() *schema.Resource { func resourceStudioSessionMappingCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) var idOrName string studioId := d.Get("studio_id").(string) identityType := d.Get("identity_type").(string) input := &emr.CreateStudioSessionMappingInput{ - IdentityType: aws.String(identityType), + IdentityType: awstypes.IdentityType(identityType), SessionPolicyArn: aws.String(d.Get("session_policy_arn").(string)), StudioId: aws.String(studioId), } @@ -91,48 +94,20 @@ func resourceStudioSessionMappingCreate(ctx context.Context, d *schema.ResourceD idOrName = v.(string) } - _, err := conn.CreateStudioSessionMappingWithContext(ctx, input) - if err != nil { - return sdkdiag.AppendErrorf(diags, "creating EMR Studio Session Mapping: %s", err) - } - - d.SetId(fmt.Sprintf("%s:%s:%s", studioId, identityType, idOrName)) - - return append(diags, resourceStudioSessionMappingRead(ctx, d, meta)...) -} - -func resourceStudioSessionMappingUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + _, err := conn.CreateStudioSessionMapping(ctx, input) - studioId, identityType, identityIdOrName, err := readStudioSessionMapping(d.Id()) if err != nil { - return sdkdiag.AppendErrorf(diags, "updating EMR Studio Session Mapping (%s): %s", d.Id(), err) - } - - input := &emr.UpdateStudioSessionMappingInput{ - SessionPolicyArn: aws.String(d.Get("session_policy_arn").(string)), - IdentityType: aws.String(identityType), - StudioId: aws.String(studioId), + return sdkdiag.AppendErrorf(diags, "creating EMR Studio Session Mapping: %s", err) } - if isIdentityId(identityIdOrName) { - input.IdentityId = aws.String(identityIdOrName) - } else { - input.IdentityName = aws.String(identityIdOrName) - } - - _, err = conn.UpdateStudioSessionMappingWithContext(ctx, input) - if err != nil { - return sdkdiag.AppendErrorf(diags, "updating EMR Studio Session Mapping (%s): %s", d.Id(), err) - } + d.SetId(studioSessionMappingCreateResourceID(studioId, identityType, idOrName)) return append(diags, resourceStudioSessionMappingRead(ctx, d, meta)...) } func resourceStudioSessionMappingRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) mapping, err := findStudioSessionMappingByIDOrName(ctx, conn, d.Id()) @@ -146,69 +121,127 @@ func resourceStudioSessionMappingRead(ctx context.Context, d *schema.ResourceDat return sdkdiag.AppendErrorf(diags, "reading EMR Studio Session Mapping (%s): %s", d.Id(), err) } - d.Set("identity_type", mapping.IdentityType) d.Set("identity_id", mapping.IdentityId) d.Set("identity_name", mapping.IdentityName) - d.Set("studio_id", mapping.StudioId) + d.Set("identity_type", mapping.IdentityType) d.Set("session_policy_arn", mapping.SessionPolicyArn) + d.Set("studio_id", mapping.StudioId) return diags } +func resourceStudioSessionMappingUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + conn := meta.(*conns.AWSClient).EMRClient(ctx) + + studioID, identityType, identityIDOrName, err := studioSessionMappingParseResourceID(d.Id()) + if err != nil { + return sdkdiag.AppendFromErr(diags, err) + } + + input := &emr.UpdateStudioSessionMappingInput{ + SessionPolicyArn: aws.String(d.Get("session_policy_arn").(string)), + IdentityType: awstypes.IdentityType(identityType), + StudioId: aws.String(studioID), + } + + if isIdentityID(identityIDOrName) { + input.IdentityId = aws.String(identityIDOrName) + } else { + input.IdentityName = aws.String(identityIDOrName) + } + + _, err = conn.UpdateStudioSessionMapping(ctx, input) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "updating EMR Studio Session Mapping (%s): %s", d.Id(), err) + } + + return append(diags, resourceStudioSessionMappingRead(ctx, d, meta)...) +} + func resourceStudioSessionMappingDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EMRConn(ctx) + conn := meta.(*conns.AWSClient).EMRClient(ctx) - studioId, identityType, identityIdOrName, err := readStudioSessionMapping(d.Id()) + studioID, identityType, identityIDOrName, err := studioSessionMappingParseResourceID(d.Id()) if err != nil { - return sdkdiag.AppendErrorf(diags, "deleting EMR Studio Session Mapping (%s): %s", d.Id(), err) + return sdkdiag.AppendFromErr(diags, err) } input := &emr.DeleteStudioSessionMappingInput{ - IdentityType: aws.String(identityType), - StudioId: aws.String(studioId), + IdentityType: awstypes.IdentityType(identityType), + StudioId: aws.String(studioID), } - if isIdentityId(identityIdOrName) { - input.IdentityId = aws.String(identityIdOrName) + if isIdentityID(identityIDOrName) { + input.IdentityId = aws.String(identityIDOrName) } else { - input.IdentityName = aws.String(identityIdOrName) + input.IdentityName = aws.String(identityIDOrName) } log.Printf("[INFO] Deleting EMR Studio Session Mapping: %s", d.Id()) - _, err = conn.DeleteStudioSessionMappingWithContext(ctx, input) + _, err = conn.DeleteStudioSessionMapping(ctx, input) + + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "Studio session mapping does not exist.") { + return diags + } if err != nil { - if tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "Studio session mapping does not exist.") { - return diags - } return sdkdiag.AppendErrorf(diags, "deleting EMR Studio Session Mapping (%s): %s", d.Id(), err) } return diags } -func findStudioSessionMappingByIDOrName(ctx context.Context, conn *emr.EMR, id string) (*emr.SessionMappingDetail, error) { - studioId, identityType, identityIdOrName, err := readStudioSessionMapping(id) +const identityIDPattern = `([0-9a-f]{10}-|)[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}` + +var identityIDPatternRegexp = regexache.MustCompile(identityIDPattern) + +func isIdentityID(identityIdOrName string) bool { + return identityIDPatternRegexp.MatchString(identityIdOrName) +} + +const studioSessionMappingResourceIDSeparator = ":" + +func studioSessionMappingCreateResourceID(studioID, identityType, identityIDOrName string) string { + parts := []string{studioID, identityType, identityIDOrName} + id := strings.Join(parts, studioSessionMappingResourceIDSeparator) + + return id +} + +func studioSessionMappingParseResourceID(id string) (string, string, string, error) { + parts := strings.Split(id, studioSessionMappingResourceIDSeparator) + + if len(parts) != 3 || parts[0] == "" || parts[1] == "" || parts[2] == "" { + return "", "", "", fmt.Errorf("unexpected format for ID (%[1]s), expected studio-id%[2]sidentity-type%[2]sidentity-id-or-name", id, studioSessionMappingResourceIDSeparator) + } + + return parts[0], parts[1], parts[2], nil +} + +func findStudioSessionMappingByIDOrName(ctx context.Context, conn *emr.Client, id string) (*awstypes.SessionMappingDetail, error) { + studioID, identityType, identityIDOrName, err := studioSessionMappingParseResourceID(id) if err != nil { return nil, err } input := &emr.GetStudioSessionMappingInput{ - StudioId: aws.String(studioId), - IdentityType: aws.String(identityType), + StudioId: aws.String(studioID), + IdentityType: awstypes.IdentityType(identityType), } - if isIdentityId(identityIdOrName) { - input.IdentityId = aws.String(identityIdOrName) + if isIdentityID(identityIDOrName) { + input.IdentityId = aws.String(identityIDOrName) } else { - input.IdentityName = aws.String(identityIdOrName) + input.IdentityName = aws.String(identityIDOrName) } - output, err := conn.GetStudioSessionMappingWithContext(ctx, input) + output, err := conn.GetStudioSessionMapping(ctx, input) - if tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "Studio session mapping does not exist") || - tfawserr.ErrMessageContains(err, emr.ErrCodeInvalidRequestException, "Studio does not exist") { + if errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "Studio session mapping does not exist") || + errs.IsAErrorMessageContains[*awstypes.InvalidRequestException](err, "Studio does not exist") { return nil, &retry.NotFoundError{ LastError: err, LastRequest: input, diff --git a/internal/service/emr/studio_session_mapping_test.go b/internal/service/emr/studio_session_mapping_test.go index 088540e9183..9a9ddaa9b50 100644 --- a/internal/service/emr/studio_session_mapping_test.go +++ b/internal/service/emr/studio_session_mapping_test.go @@ -9,7 +9,7 @@ import ( "os" "testing" - "github.com/aws/aws-sdk-go/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -22,7 +22,7 @@ import ( func TestAccEMRStudioSessionMapping_basic(t *testing.T) { ctx := acctest.Context(t) - var studio emr.SessionMappingDetail + var studio awstypes.SessionMappingDetail resourceName := "aws_emr_studio_session_mapping.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) updatedName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -90,7 +90,7 @@ func TestAccEMRStudioSessionMapping_basic(t *testing.T) { func TestAccEMRStudioSessionMapping_disappears(t *testing.T) { ctx := acctest.Context(t) - var studio emr.SessionMappingDetail + var studio awstypes.SessionMappingDetail resourceName := "aws_emr_studio_session_mapping.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) uName := os.Getenv("AWS_IDENTITY_STORE_USER_ID") @@ -128,25 +128,22 @@ func TestAccEMRStudioSessionMapping_disappears(t *testing.T) { }) } -func testAccCheckStudioSessionMappingExists(ctx context.Context, resourceName string, studio *emr.SessionMappingDetail) resource.TestCheckFunc { +func testAccCheckStudioSessionMappingExists(ctx context.Context, n string, v *awstypes.SessionMappingDetail) resource.TestCheckFunc { return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[resourceName] + rs, ok := s.RootModule().Resources[n] if !ok { - return fmt.Errorf("Not found: %s", resourceName) + return fmt.Errorf("Not found: %s", n) } - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) output, err := tfemr.FindStudioSessionMappingByIDOrName(ctx, conn, rs.Primary.ID) + if err != nil { return err } - if output == nil { - return fmt.Errorf("EMR Studio (%s) not found", rs.Primary.ID) - } - - *studio = *output + *v = *output return nil } @@ -154,7 +151,7 @@ func testAccCheckStudioSessionMappingExists(ctx context.Context, resourceName st func testAccCheckStudioSessionMappingDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_emr_studio_session_mapping" { @@ -162,6 +159,7 @@ func testAccCheckStudioSessionMappingDestroy(ctx context.Context) resource.TestC } _, err := tfemr.FindStudioSessionMappingByIDOrName(ctx, conn, rs.Primary.ID) + if tfresource.NotFound(err) { continue } @@ -170,8 +168,9 @@ func testAccCheckStudioSessionMappingDestroy(ctx context.Context) resource.TestC return err } - return fmt.Errorf("EMR Studio %s still exists", rs.Primary.ID) + return fmt.Errorf("EMR Studio Session Mapping %s still exists", rs.Primary.ID) } + return nil } } diff --git a/internal/service/emr/studio_test.go b/internal/service/emr/studio_test.go index ccd6daa6f4c..ce7ecfb6626 100644 --- a/internal/service/emr/studio_test.go +++ b/internal/service/emr/studio_test.go @@ -9,7 +9,7 @@ import ( "testing" "github.com/YakDriver/regexache" - "github.com/aws/aws-sdk-go/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -22,7 +22,7 @@ import ( func TestAccEMRStudio_sso(t *testing.T) { ctx := acctest.Context(t) - var studio emr.Studio + var studio awstypes.Studio resourceName := "aws_emr_studio.test" rName1 := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) rName2 := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -78,7 +78,7 @@ func TestAccEMRStudio_sso(t *testing.T) { func TestAccEMRStudio_iam(t *testing.T) { ctx := acctest.Context(t) - var studio emr.Studio + var studio awstypes.Studio resourceName := "aws_emr_studio.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -114,7 +114,7 @@ func TestAccEMRStudio_iam(t *testing.T) { func TestAccEMRStudio_disappears(t *testing.T) { ctx := acctest.Context(t) - var studio emr.Studio + var studio awstypes.Studio resourceName := "aws_emr_studio.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -139,7 +139,7 @@ func TestAccEMRStudio_disappears(t *testing.T) { func TestAccEMRStudio_tags(t *testing.T) { ctx := acctest.Context(t) - var studio emr.Studio + var studio awstypes.Studio resourceName := "aws_emr_studio.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -183,25 +183,22 @@ func TestAccEMRStudio_tags(t *testing.T) { }) } -func testAccCheckStudioExists(ctx context.Context, resourceName string, studio *emr.Studio) resource.TestCheckFunc { +func testAccCheckStudioExists(ctx context.Context, n string, v *awstypes.Studio) resource.TestCheckFunc { return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[resourceName] + rs, ok := s.RootModule().Resources[n] if !ok { - return fmt.Errorf("Not found: %s", resourceName) + return fmt.Errorf("Not found: %s", n) } - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) output, err := tfemr.FindStudioByID(ctx, conn, rs.Primary.ID) + if err != nil { return err } - if output == nil { - return fmt.Errorf("EMR Studio (%s) not found", rs.Primary.ID) - } - - *studio = *output + *v = *output return nil } @@ -209,7 +206,7 @@ func testAccCheckStudioExists(ctx context.Context, resourceName string, studio * func testAccCheckStudioDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).EMRConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).EMRClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_emr_studio" { @@ -217,6 +214,7 @@ func testAccCheckStudioDestroy(ctx context.Context) resource.TestCheckFunc { } _, err := tfemr.FindStudioByID(ctx, conn, rs.Primary.ID) + if tfresource.NotFound(err) { continue } @@ -227,6 +225,7 @@ func testAccCheckStudioDestroy(ctx context.Context) resource.TestCheckFunc { return fmt.Errorf("EMR Studio %s still exists", rs.Primary.ID) } + return nil } } diff --git a/internal/service/emr/sweep.go b/internal/service/emr/sweep.go index 9085fd4e8f3..3f18ad064f9 100644 --- a/internal/service/emr/sweep.go +++ b/internal/service/emr/sweep.go @@ -7,12 +7,13 @@ import ( "fmt" "log" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/emr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" "github.com/hashicorp/go-multierror" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-provider-aws/internal/sweep" - "github.com/hashicorp/terraform-provider-aws/internal/sweep/awsv1" + "github.com/hashicorp/terraform-provider-aws/internal/sweep/awsv2" ) func RegisterSweepers() { @@ -33,22 +34,31 @@ func sweepClusters(region string) error { if err != nil { return fmt.Errorf("error getting client: %w", err) } - conn := client.EMRConn(ctx) + conn := client.EMRClient(ctx) input := &emr.ListClustersInput{ - ClusterStates: aws.StringSlice([]string{emr.ClusterStateBootstrapping, emr.ClusterStateRunning, emr.ClusterStateStarting, emr.ClusterStateWaiting}), + ClusterStates: []awstypes.ClusterState{awstypes.ClusterStateBootstrapping, awstypes.ClusterStateRunning, awstypes.ClusterStateStarting, awstypes.ClusterStateWaiting}, } sweepResources := make([]sweep.Sweepable, 0) - err = conn.ListClustersPagesWithContext(ctx, input, func(page *emr.ListClustersOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := emr.NewListClustersPaginator(conn, input) + + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping EMR Clusters sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing EMR Clusters (%s): %w", region, err) } for _, v := range page.Clusters { - id := aws.StringValue(v.Id) + id := aws.ToString(v.Id) - _, err := conn.SetTerminationProtectionWithContext(ctx, &emr.SetTerminationProtectionInput{ - JobFlowIds: aws.StringSlice([]string{id}), + _, err := conn.SetTerminationProtection(ctx, &emr.SetTerminationProtectionInput{ + JobFlowIds: []string{id}, TerminationProtected: aws.Bool(false), }) @@ -62,17 +72,6 @@ func sweepClusters(region string) error { sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Printf("[WARN] Skipping EMR Clusters sweep for %s: %s", region, err) - return nil - } - - if err != nil { - return fmt.Errorf("error listing EMR Clusters (%s): %w", region, err) } err = sweep.SweepOrchestrator(ctx, sweepResources) @@ -92,33 +91,31 @@ func sweepStudios(region string) error { return fmt.Errorf("error getting client: %w", err) } - conn := client.EMRConn(ctx) + conn := client.EMRClient(ctx) sweepResources := make([]sweep.Sweepable, 0) var sweeperErrs *multierror.Error input := &emr.ListStudiosInput{} - err = conn.ListStudiosPagesWithContext(ctx, input, func(page *emr.ListStudiosOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := emr.NewListStudiosPaginator(conn, input) + + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping EMR Studios sweep for %s: %s", region, sweeperErrs) + return nil + } + if err != nil { + sweeperErrs = multierror.Append(sweeperErrs, fmt.Errorf("error listing EMR Studios for %s: %w", region, err)) } for _, studio := range page.Studios { r := resourceStudio() d := r.Data(nil) - d.SetId(aws.StringValue(studio.StudioId)) + d.SetId(aws.ToString(studio.StudioId)) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Printf("[WARN] Skipping EMR Studios sweep for %s: %s", region, sweeperErrs) - return nil - } - if err != nil { - sweeperErrs = multierror.Append(sweeperErrs, fmt.Errorf("error listing EMR Studios for %s: %w", region, err)) } if err = sweep.SweepOrchestrator(ctx, sweepResources); err != nil { diff --git a/internal/service/emr/tags_gen.go b/internal/service/emr/tags_gen.go index 73df2b5d6f4..97e23b3c972 100644 --- a/internal/service/emr/tags_gen.go +++ b/internal/service/emr/tags_gen.go @@ -5,9 +5,9 @@ import ( "context" "fmt" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/emr" - "github.com/aws/aws-sdk-go/service/emr/emriface" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/emr" + awstypes "github.com/aws/aws-sdk-go-v2/service/emr/types" "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/hashicorp/terraform-provider-aws/internal/conns" "github.com/hashicorp/terraform-provider-aws/internal/logging" @@ -19,11 +19,11 @@ import ( // []*SERVICE.Tag handling // Tags returns emr service tags. -func Tags(tags tftags.KeyValueTags) []*emr.Tag { - result := make([]*emr.Tag, 0, len(tags)) +func Tags(tags tftags.KeyValueTags) []awstypes.Tag { + result := make([]awstypes.Tag, 0, len(tags)) for k, v := range tags.Map() { - tag := &emr.Tag{ + tag := awstypes.Tag{ Key: aws.String(k), Value: aws.String(v), } @@ -35,11 +35,11 @@ func Tags(tags tftags.KeyValueTags) []*emr.Tag { } // KeyValueTags creates tftags.KeyValueTags from emr service tags. -func KeyValueTags(ctx context.Context, tags []*emr.Tag) tftags.KeyValueTags { +func KeyValueTags(ctx context.Context, tags []awstypes.Tag) tftags.KeyValueTags { m := make(map[string]*string, len(tags)) for _, tag := range tags { - m[aws.StringValue(tag.Key)] = tag.Value + m[aws.ToString(tag.Key)] = tag.Value } return tftags.New(ctx, m) @@ -47,7 +47,7 @@ func KeyValueTags(ctx context.Context, tags []*emr.Tag) tftags.KeyValueTags { // getTagsIn returns emr service tags from Context. // nil is returned if there are no input tags. -func getTagsIn(ctx context.Context) []*emr.Tag { +func getTagsIn(ctx context.Context) []awstypes.Tag { if inContext, ok := tftags.FromContext(ctx); ok { if tags := Tags(inContext.TagsIn.UnwrapOrDefault()); len(tags) > 0 { return tags @@ -58,7 +58,7 @@ func getTagsIn(ctx context.Context) []*emr.Tag { } // setTagsOut sets emr service tags in Context. -func setTagsOut(ctx context.Context, tags []*emr.Tag) { +func setTagsOut(ctx context.Context, tags []awstypes.Tag) { if inContext, ok := tftags.FromContext(ctx); ok { inContext.TagsOut = option.Some(KeyValueTags(ctx, tags)) } @@ -67,7 +67,7 @@ func setTagsOut(ctx context.Context, tags []*emr.Tag) { // updateTags updates emr service tags. // The identifier is typically the Amazon Resource Name (ARN), although // it may also be a different identifier depending on the service. -func updateTags(ctx context.Context, conn emriface.EMRAPI, identifier string, oldTagsMap, newTagsMap any) error { +func updateTags(ctx context.Context, conn *emr.Client, identifier string, oldTagsMap, newTagsMap any, optFns ...func(*emr.Options)) error { oldTags := tftags.New(ctx, oldTagsMap) newTags := tftags.New(ctx, newTagsMap) @@ -78,10 +78,10 @@ func updateTags(ctx context.Context, conn emriface.EMRAPI, identifier string, ol if len(removedTags) > 0 { input := &emr.RemoveTagsInput{ ResourceId: aws.String(identifier), - TagKeys: aws.StringSlice(removedTags.Keys()), + TagKeys: removedTags.Keys(), } - _, err := conn.RemoveTagsWithContext(ctx, input) + _, err := conn.RemoveTags(ctx, input, optFns...) if err != nil { return fmt.Errorf("untagging resource (%s): %w", identifier, err) @@ -96,7 +96,7 @@ func updateTags(ctx context.Context, conn emriface.EMRAPI, identifier string, ol Tags: Tags(updatedTags), } - _, err := conn.AddTagsWithContext(ctx, input) + _, err := conn.AddTags(ctx, input, optFns...) if err != nil { return fmt.Errorf("tagging resource (%s): %w", identifier, err) @@ -109,5 +109,5 @@ func updateTags(ctx context.Context, conn emriface.EMRAPI, identifier string, ol // UpdateTags updates emr service tags. // It is called from outside this package. func (p *servicePackage) UpdateTags(ctx context.Context, meta any, identifier string, oldTags, newTags any) error { - return updateTags(ctx, meta.(*conns.AWSClient).EMRConn(ctx), identifier, oldTags, newTags) + return updateTags(ctx, meta.(*conns.AWSClient).EMRClient(ctx), identifier, oldTags, newTags) } diff --git a/names/data/names_data.hcl b/names/data/names_data.hcl index e8435853b40..60afe860480 100644 --- a/names/data/names_data.hcl +++ b/names/data/names_data.hcl @@ -3762,7 +3762,7 @@ service "emr" { sdk { id = "EMR" - client_version = [1, 2] + client_version = [2] } names { diff --git a/tools/tfsdk2fw/go.mod b/tools/tfsdk2fw/go.mod index f238722c307..4a27e1947bf 100644 --- a/tools/tfsdk2fw/go.mod +++ b/tools/tfsdk2fw/go.mod @@ -21,27 +21,27 @@ require ( github.com/aws/aws-sdk-go v1.55.5 // indirect github.com/aws/aws-sdk-go-v2 v1.30.4 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 // indirect - github.com/aws/aws-sdk-go-v2/config v1.27.28 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.28 // indirect + github.com/aws/aws-sdk-go-v2/config v1.27.30 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.29 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 // indirect - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.12 // indirect + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.14 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 // indirect - github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.32.4 // indirect + github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.32.5 // indirect github.com/aws/aws-sdk-go-v2/service/account v1.19.4 // indirect - github.com/aws/aws-sdk-go-v2/service/acm v1.28.5 // indirect - github.com/aws/aws-sdk-go-v2/service/acmpca v1.35.1 // indirect + github.com/aws/aws-sdk-go-v2/service/acm v1.28.6 // indirect + github.com/aws/aws-sdk-go-v2/service/acmpca v1.35.2 // indirect github.com/aws/aws-sdk-go-v2/service/amp v1.27.4 // indirect github.com/aws/aws-sdk-go-v2/service/amplify v1.24.1 // indirect - github.com/aws/aws-sdk-go-v2/service/apigateway v1.25.5 // indirect - github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.22.5 // indirect - github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.4 // indirect + github.com/aws/aws-sdk-go-v2/service/apigateway v1.25.6 // indirect + github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.22.6 // indirect + github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.5 // indirect github.com/aws/aws-sdk-go-v2/service/appfabric v1.9.4 // indirect github.com/aws/aws-sdk-go-v2/service/appflow v1.43.4 // indirect github.com/aws/aws-sdk-go-v2/service/appintegrations v1.28.1 // indirect - github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.31.1 // indirect + github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.31.2 // indirect github.com/aws/aws-sdk-go-v2/service/applicationinsights v1.26.4 // indirect github.com/aws/aws-sdk-go-v2/service/applicationsignals v1.3.1 // indirect github.com/aws/aws-sdk-go-v2/service/appmesh v1.27.4 // indirect @@ -50,13 +50,13 @@ require ( github.com/aws/aws-sdk-go-v2/service/appsync v1.35.1 // indirect github.com/aws/aws-sdk-go-v2/service/athena v1.44.5 // indirect github.com/aws/aws-sdk-go-v2/service/auditmanager v1.35.4 // indirect - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.43.4 // indirect + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.43.5 // indirect github.com/aws/aws-sdk-go-v2/service/autoscalingplans v1.22.5 // indirect github.com/aws/aws-sdk-go-v2/service/backup v1.36.4 // indirect - github.com/aws/aws-sdk-go-v2/service/batch v1.44.0 // indirect + github.com/aws/aws-sdk-go-v2/service/batch v1.44.1 // indirect github.com/aws/aws-sdk-go-v2/service/bcmdataexports v1.5.4 // indirect - github.com/aws/aws-sdk-go-v2/service/bedrock v1.14.0 // indirect - github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.16.1 // indirect + github.com/aws/aws-sdk-go-v2/service/bedrock v1.15.0 // indirect + github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.17.0 // indirect github.com/aws/aws-sdk-go-v2/service/budgets v1.25.5 // indirect github.com/aws/aws-sdk-go-v2/service/chatbot v1.4.4 // indirect github.com/aws/aws-sdk-go-v2/service/chime v1.32.4 // indirect @@ -64,20 +64,20 @@ require ( github.com/aws/aws-sdk-go-v2/service/chimesdkvoice v1.17.4 // indirect github.com/aws/aws-sdk-go-v2/service/cleanrooms v1.16.1 // indirect github.com/aws/aws-sdk-go-v2/service/cloud9 v1.26.4 // indirect - github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.20.4 // indirect - github.com/aws/aws-sdk-go-v2/service/cloudformation v1.53.4 // indirect + github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.20.5 // indirect + github.com/aws/aws-sdk-go-v2/service/cloudformation v1.53.5 // indirect github.com/aws/aws-sdk-go-v2/service/cloudfront v1.38.5 // indirect github.com/aws/aws-sdk-go-v2/service/cloudfrontkeyvaluestore v1.6.4 // indirect github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.25.3 // indirect github.com/aws/aws-sdk-go-v2/service/cloudsearch v1.24.4 // indirect - github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.42.4 // indirect - github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.40.4 // indirect - github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.37.4 // indirect + github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.42.5 // indirect + github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.40.5 // indirect + github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.37.5 // indirect github.com/aws/aws-sdk-go-v2/service/codeartifact v1.30.4 // indirect - github.com/aws/aws-sdk-go-v2/service/codebuild v1.42.0 // indirect + github.com/aws/aws-sdk-go-v2/service/codebuild v1.42.1 // indirect github.com/aws/aws-sdk-go-v2/service/codecatalyst v1.15.4 // indirect github.com/aws/aws-sdk-go-v2/service/codecommit v1.25.1 // indirect - github.com/aws/aws-sdk-go-v2/service/codedeploy v1.27.4 // indirect + github.com/aws/aws-sdk-go-v2/service/codedeploy v1.27.5 // indirect github.com/aws/aws-sdk-go-v2/service/codeguruprofiler v1.22.4 // indirect github.com/aws/aws-sdk-go-v2/service/codegurureviewer v1.27.4 // indirect github.com/aws/aws-sdk-go-v2/service/codepipeline v1.31.1 // indirect @@ -87,7 +87,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.43.2 // indirect github.com/aws/aws-sdk-go-v2/service/comprehend v1.33.4 // indirect github.com/aws/aws-sdk-go-v2/service/computeoptimizer v1.37.5 // indirect - github.com/aws/aws-sdk-go-v2/service/configservice v1.48.4 // indirect + github.com/aws/aws-sdk-go-v2/service/configservice v1.48.5 // indirect github.com/aws/aws-sdk-go-v2/service/connect v1.107.1 // indirect github.com/aws/aws-sdk-go-v2/service/connectcases v1.19.4 // indirect github.com/aws/aws-sdk-go-v2/service/controltower v1.16.5 // indirect @@ -95,42 +95,42 @@ require ( github.com/aws/aws-sdk-go-v2/service/costexplorer v1.40.4 // indirect github.com/aws/aws-sdk-go-v2/service/costoptimizationhub v1.8.1 // indirect github.com/aws/aws-sdk-go-v2/service/customerprofiles v1.39.4 // indirect - github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.40.4 // indirect + github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.40.5 // indirect github.com/aws/aws-sdk-go-v2/service/databrew v1.31.4 // indirect github.com/aws/aws-sdk-go-v2/service/dataexchange v1.30.4 // indirect github.com/aws/aws-sdk-go-v2/service/datapipeline v1.23.4 // indirect - github.com/aws/aws-sdk-go-v2/service/datasync v1.40.4 // indirect - github.com/aws/aws-sdk-go-v2/service/datazone v1.17.1 // indirect + github.com/aws/aws-sdk-go-v2/service/datasync v1.40.5 // indirect + github.com/aws/aws-sdk-go-v2/service/datazone v1.17.2 // indirect github.com/aws/aws-sdk-go-v2/service/dax v1.21.5 // indirect github.com/aws/aws-sdk-go-v2/service/detective v1.29.4 // indirect github.com/aws/aws-sdk-go-v2/service/devicefarm v1.25.3 // indirect github.com/aws/aws-sdk-go-v2/service/devopsguru v1.32.4 // indirect - github.com/aws/aws-sdk-go-v2/service/directconnect v1.27.6 // indirect + github.com/aws/aws-sdk-go-v2/service/directconnect v1.27.7 // indirect github.com/aws/aws-sdk-go-v2/service/directoryservice v1.27.4 // indirect - github.com/aws/aws-sdk-go-v2/service/dlm v1.26.4 // indirect - github.com/aws/aws-sdk-go-v2/service/docdb v1.37.0 // indirect + github.com/aws/aws-sdk-go-v2/service/dlm v1.26.5 // indirect + github.com/aws/aws-sdk-go-v2/service/docdb v1.37.1 // indirect github.com/aws/aws-sdk-go-v2/service/docdbelastic v1.11.4 // indirect github.com/aws/aws-sdk-go-v2/service/drs v1.28.4 // indirect - github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.5 // indirect + github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.6 // indirect github.com/aws/aws-sdk-go-v2/service/ec2 v1.176.0 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.32.1 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.32.2 // indirect github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.25.4 // indirect - github.com/aws/aws-sdk-go-v2/service/ecs v1.45.1 // indirect + github.com/aws/aws-sdk-go-v2/service/ecs v1.45.2 // indirect github.com/aws/aws-sdk-go-v2/service/efs v1.31.4 // indirect - github.com/aws/aws-sdk-go-v2/service/eks v1.48.1 // indirect - github.com/aws/aws-sdk-go-v2/service/elasticache v1.40.6 // indirect + github.com/aws/aws-sdk-go-v2/service/eks v1.48.2 // indirect + github.com/aws/aws-sdk-go-v2/service/elasticache v1.40.7 // indirect github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.26.3 // indirect - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.26.4 // indirect - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.34.1 // indirect - github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.30.4 // indirect + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.26.5 // indirect + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.34.2 // indirect + github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.30.5 // indirect github.com/aws/aws-sdk-go-v2/service/elastictranscoder v1.25.4 // indirect - github.com/aws/aws-sdk-go-v2/service/emr v1.42.3 // indirect - github.com/aws/aws-sdk-go-v2/service/emrcontainers v1.30.5 // indirect + github.com/aws/aws-sdk-go-v2/service/emr v1.42.4 // indirect + github.com/aws/aws-sdk-go-v2/service/emrcontainers v1.31.0 // indirect github.com/aws/aws-sdk-go-v2/service/emrserverless v1.23.4 // indirect - github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.4 // indirect + github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.5 // indirect github.com/aws/aws-sdk-go-v2/service/evidently v1.21.4 // indirect github.com/aws/aws-sdk-go-v2/service/finspace v1.26.4 // indirect - github.com/aws/aws-sdk-go-v2/service/firehose v1.32.1 // indirect + github.com/aws/aws-sdk-go-v2/service/firehose v1.32.2 // indirect github.com/aws/aws-sdk-go-v2/service/fis v1.27.1 // indirect github.com/aws/aws-sdk-go-v2/service/fms v1.35.4 // indirect github.com/aws/aws-sdk-go-v2/service/fsx v1.47.3 // indirect @@ -146,13 +146,13 @@ require ( github.com/aws/aws-sdk-go-v2/service/iam v1.35.0 // indirect github.com/aws/aws-sdk-go-v2/service/identitystore v1.25.4 // indirect github.com/aws/aws-sdk-go-v2/service/inspector v1.23.4 // indirect - github.com/aws/aws-sdk-go-v2/service/inspector2 v1.29.0 // indirect + github.com/aws/aws-sdk-go-v2/service/inspector2 v1.30.0 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 // indirect github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.17 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 // indirect - github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.5 // indirect github.com/aws/aws-sdk-go-v2/service/iot v1.55.4 // indirect github.com/aws/aws-sdk-go-v2/service/iotanalytics v1.24.4 // indirect github.com/aws/aws-sdk-go-v2/service/iotevents v1.25.4 // indirect @@ -162,13 +162,13 @@ require ( github.com/aws/aws-sdk-go-v2/service/kafkaconnect v1.19.4 // indirect github.com/aws/aws-sdk-go-v2/service/kendra v1.52.4 // indirect github.com/aws/aws-sdk-go-v2/service/keyspaces v1.12.4 // indirect - github.com/aws/aws-sdk-go-v2/service/kinesis v1.29.4 // indirect + github.com/aws/aws-sdk-go-v2/service/kinesis v1.29.5 // indirect github.com/aws/aws-sdk-go-v2/service/kinesisanalytics v1.23.4 // indirect github.com/aws/aws-sdk-go-v2/service/kinesisanalyticsv2 v1.28.3 // indirect github.com/aws/aws-sdk-go-v2/service/kinesisvideo v1.25.4 // indirect - github.com/aws/aws-sdk-go-v2/service/kms v1.35.4 // indirect + github.com/aws/aws-sdk-go-v2/service/kms v1.35.5 // indirect github.com/aws/aws-sdk-go-v2/service/lakeformation v1.35.4 // indirect - github.com/aws/aws-sdk-go-v2/service/lambda v1.58.0 // indirect + github.com/aws/aws-sdk-go-v2/service/lambda v1.58.1 // indirect github.com/aws/aws-sdk-go-v2/service/launchwizard v1.6.4 // indirect github.com/aws/aws-sdk-go-v2/service/lexmodelbuildingservice v1.26.4 // indirect github.com/aws/aws-sdk-go-v2/service/lexmodelsv2 v1.46.1 // indirect @@ -187,16 +187,16 @@ require ( github.com/aws/aws-sdk-go-v2/service/memorydb v1.21.6 // indirect github.com/aws/aws-sdk-go-v2/service/mq v1.25.4 // indirect github.com/aws/aws-sdk-go-v2/service/mwaa v1.29.5 // indirect - github.com/aws/aws-sdk-go-v2/service/neptune v1.33.4 // indirect + github.com/aws/aws-sdk-go-v2/service/neptune v1.33.5 // indirect github.com/aws/aws-sdk-go-v2/service/neptunegraph v1.11.1 // indirect github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.41.1 // indirect github.com/aws/aws-sdk-go-v2/service/networkmanager v1.29.4 // indirect github.com/aws/aws-sdk-go-v2/service/networkmonitor v1.5.4 // indirect - github.com/aws/aws-sdk-go-v2/service/oam v1.13.5 // indirect - github.com/aws/aws-sdk-go-v2/service/opensearch v1.39.3 // indirect - github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.14.0 // indirect + github.com/aws/aws-sdk-go-v2/service/oam v1.13.6 // indirect + github.com/aws/aws-sdk-go-v2/service/opensearch v1.39.4 // indirect + github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.14.1 // indirect github.com/aws/aws-sdk-go-v2/service/opsworks v1.24.4 // indirect - github.com/aws/aws-sdk-go-v2/service/organizations v1.30.3 // indirect + github.com/aws/aws-sdk-go-v2/service/organizations v1.31.0 // indirect github.com/aws/aws-sdk-go-v2/service/osis v1.12.4 // indirect github.com/aws/aws-sdk-go-v2/service/outposts v1.42.1 // indirect github.com/aws/aws-sdk-go-v2/service/paymentcryptography v1.12.4 // indirect @@ -205,49 +205,49 @@ require ( github.com/aws/aws-sdk-go-v2/service/pipes v1.14.4 // indirect github.com/aws/aws-sdk-go-v2/service/polly v1.42.4 // indirect github.com/aws/aws-sdk-go-v2/service/pricing v1.30.4 // indirect - github.com/aws/aws-sdk-go-v2/service/qbusiness v1.10.3 // indirect + github.com/aws/aws-sdk-go-v2/service/qbusiness v1.11.0 // indirect github.com/aws/aws-sdk-go-v2/service/qldb v1.23.4 // indirect - github.com/aws/aws-sdk-go-v2/service/ram v1.27.4 // indirect - github.com/aws/aws-sdk-go-v2/service/rbin v1.18.4 // indirect - github.com/aws/aws-sdk-go-v2/service/rds v1.82.1 // indirect - github.com/aws/aws-sdk-go-v2/service/redshift v1.46.5 // indirect + github.com/aws/aws-sdk-go-v2/service/ram v1.27.5 // indirect + github.com/aws/aws-sdk-go-v2/service/rbin v1.18.5 // indirect + github.com/aws/aws-sdk-go-v2/service/rds v1.82.2 // indirect + github.com/aws/aws-sdk-go-v2/service/redshift v1.46.6 // indirect github.com/aws/aws-sdk-go-v2/service/redshiftdata v1.27.4 // indirect github.com/aws/aws-sdk-go-v2/service/redshiftserverless v1.21.1 // indirect github.com/aws/aws-sdk-go-v2/service/rekognition v1.43.3 // indirect github.com/aws/aws-sdk-go-v2/service/resiliencehub v1.24.1 // indirect github.com/aws/aws-sdk-go-v2/service/resourceexplorer2 v1.12.4 // indirect - github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.24.4 // indirect - github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.4 // indirect + github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.24.5 // indirect + github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.5 // indirect github.com/aws/aws-sdk-go-v2/service/rolesanywhere v1.14.1 // indirect - github.com/aws/aws-sdk-go-v2/service/route53 v1.42.4 // indirect + github.com/aws/aws-sdk-go-v2/service/route53 v1.43.0 // indirect github.com/aws/aws-sdk-go-v2/service/route53domains v1.25.4 // indirect github.com/aws/aws-sdk-go-v2/service/route53profiles v1.2.4 // indirect github.com/aws/aws-sdk-go-v2/service/route53recoverycontrolconfig v1.23.4 // indirect github.com/aws/aws-sdk-go-v2/service/route53recoveryreadiness v1.19.4 // indirect - github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.4 // indirect + github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.5 // indirect github.com/aws/aws-sdk-go-v2/service/rum v1.19.4 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0 // indirect - github.com/aws/aws-sdk-go-v2/service/s3control v1.46.4 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1 // indirect + github.com/aws/aws-sdk-go-v2/service/s3control v1.46.5 // indirect github.com/aws/aws-sdk-go-v2/service/s3outposts v1.26.4 // indirect github.com/aws/aws-sdk-go-v2/service/sagemaker v1.154.0 // indirect github.com/aws/aws-sdk-go-v2/service/scheduler v1.10.4 // indirect github.com/aws/aws-sdk-go-v2/service/schemas v1.26.4 // indirect - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.5 // indirect + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.6 // indirect github.com/aws/aws-sdk-go-v2/service/securityhub v1.52.0 // indirect github.com/aws/aws-sdk-go-v2/service/securitylake v1.16.4 // indirect github.com/aws/aws-sdk-go-v2/service/serverlessapplicationrepository v1.22.4 // indirect github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.30.4 // indirect github.com/aws/aws-sdk-go-v2/service/servicecatalogappregistry v1.28.4 // indirect - github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.4 // indirect - github.com/aws/aws-sdk-go-v2/service/servicequotas v1.23.4 // indirect + github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.5 // indirect + github.com/aws/aws-sdk-go-v2/service/servicequotas v1.23.5 // indirect github.com/aws/aws-sdk-go-v2/service/ses v1.26.0 // indirect github.com/aws/aws-sdk-go-v2/service/sesv2 v1.33.0 // indirect - github.com/aws/aws-sdk-go-v2/service/sfn v1.30.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sfn v1.30.2 // indirect github.com/aws/aws-sdk-go-v2/service/shield v1.27.4 // indirect github.com/aws/aws-sdk-go-v2/service/signer v1.24.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sns v1.31.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sqs v1.34.4 // indirect - github.com/aws/aws-sdk-go-v2/service/ssm v1.52.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sns v1.31.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sqs v1.34.5 // indirect + github.com/aws/aws-sdk-go-v2/service/ssm v1.52.6 // indirect github.com/aws/aws-sdk-go-v2/service/ssmcontacts v1.24.4 // indirect github.com/aws/aws-sdk-go-v2/service/ssmincidents v1.32.4 // indirect github.com/aws/aws-sdk-go-v2/service/ssmsap v1.16.0 // indirect @@ -255,9 +255,9 @@ require ( github.com/aws/aws-sdk-go-v2/service/ssoadmin v1.27.5 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 // indirect github.com/aws/aws-sdk-go-v2/service/storagegateway v1.31.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.30.4 // indirect - github.com/aws/aws-sdk-go-v2/service/swf v1.25.4 // indirect - github.com/aws/aws-sdk-go-v2/service/synthetics v1.26.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 // indirect + github.com/aws/aws-sdk-go-v2/service/swf v1.25.5 // indirect + github.com/aws/aws-sdk-go-v2/service/synthetics v1.26.5 // indirect github.com/aws/aws-sdk-go-v2/service/timestreaminfluxdb v1.2.4 // indirect github.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.27.4 // indirect github.com/aws/aws-sdk-go-v2/service/transcribe v1.39.4 // indirect @@ -271,7 +271,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/worklink v1.22.4 // indirect github.com/aws/aws-sdk-go-v2/service/workspaces v1.45.1 // indirect github.com/aws/aws-sdk-go-v2/service/workspacesweb v1.21.4 // indirect - github.com/aws/aws-sdk-go-v2/service/xray v1.27.4 // indirect + github.com/aws/aws-sdk-go-v2/service/xray v1.27.5 // indirect github.com/aws/smithy-go v1.20.4 // indirect github.com/beevik/etree v1.4.1 // indirect github.com/bgentry/speakeasy v0.1.0 // indirect diff --git a/tools/tfsdk2fw/go.sum b/tools/tfsdk2fw/go.sum index 449bda2567a..85d2922523f 100644 --- a/tools/tfsdk2fw/go.sum +++ b/tools/tfsdk2fw/go.sum @@ -28,14 +28,14 @@ github.com/aws/aws-sdk-go-v2 v1.30.4 h1:frhcagrVNrzmT95RJImMHgabt99vkXGslubDaDag github.com/aws/aws-sdk-go-v2 v1.30.4/go.mod h1:CT+ZPWXbYrci8chcARI3OmI/qgd+f6WtuLOoaIA8PR0= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 h1:70PVAiL15/aBMh5LThwgXdSQorVr91L127ttckI9QQU= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4/go.mod h1:/MQxMqci8tlqDH+pjmoLu1i0tbWCUP1hhyMRuFxpQCw= -github.com/aws/aws-sdk-go-v2/config v1.27.28 h1:OTxWGW/91C61QlneCtnD62NLb4W616/NM1jA8LhJqbg= -github.com/aws/aws-sdk-go-v2/config v1.27.28/go.mod h1:uzVRVtJSU5EFv6Fu82AoVFKozJi2ZCY6WRCXj06rbvs= -github.com/aws/aws-sdk-go-v2/credentials v1.17.28 h1:m8+AHY/ND8CMHJnPoH7PJIRakWGa4gbfbxuY9TGTUXM= -github.com/aws/aws-sdk-go-v2/credentials v1.17.28/go.mod h1:6TF7dSc78ehD1SL6KpRIPKMA1GyyWflIkjqg+qmf4+c= +github.com/aws/aws-sdk-go-v2/config v1.27.30 h1:AQF3/+rOgeJBQP3iI4vojlPib5X6eeOYoa/af7OxAYg= +github.com/aws/aws-sdk-go-v2/config v1.27.30/go.mod h1:yxqvuubha9Vw8stEgNiStO+yZpP68Wm9hLmcm+R/Qk4= +github.com/aws/aws-sdk-go-v2/credentials v1.17.29 h1:CwGsupsXIlAFYuDVHv1nnK0wnxO0wZ/g1L8DSK/xiIw= +github.com/aws/aws-sdk-go-v2/credentials v1.17.29/go.mod h1:BPJ/yXV92ZVq6G8uYvbU0gSl8q94UB63nMT5ctNO38g= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 h1:yjwoSyDZF8Jth+mUk5lSPJCkMC0lMy6FaCD51jm6ayE= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12/go.mod h1:fuR57fAgMk7ot3WcNQfb6rSEn+SUffl7ri+aa8uKysI= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.12 h1:i7cJ1izNlox4ka6cvbHPTztYGtbpW4Je/jyQIKOIU4A= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.12/go.mod h1:lHnam/4CTEVHaANZD54IrpE80VLK+lUU84WEeJ1FJ8M= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.14 h1:dQa4KkoEVgk3oLL9IeoW9qrXijyQ6lWa+DX6Vn32Lhw= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.14/go.mod h1:aRKW0B+zH8J6cz3FFiQ9JbUQc7UroLx6lwfvNqIsPOs= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 h1:TNyt/+X43KJ9IJJMjKfa3bNTiZbUP7DeCxfbTROESwY= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16/go.mod h1:2DwJF39FlNAUiX5pAc0UNeiz16lK2t7IaFcm0LFHEgc= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 h1:jYfy8UPmd+6kJW5YhY0L1/KftReOGxI/4NtVSTh9O/I= @@ -44,32 +44,32 @@ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvK github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 h1:mimdLQkIX1zr8GIPY1ZtALdBQGxcASiBd2MOp8m/dMc= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16/go.mod h1:YHk6owoSwrIsok+cAH9PENCOGoH5PU2EllX4vLtSrsY= -github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.32.4 h1:8hsGX13lDLAOuW0RCz1vf5Ke6SoGmo8cRIuLxGqE6rs= -github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.32.4/go.mod h1:j7QmbsuRrU17hdKR7UoiSXjKbzx65NGApP2/AKSIZws= +github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.32.5 h1:8ikF/8ccgxv/JGWd7On8vdytpf4Pj1vOwVpUImOy9t4= +github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.32.5/go.mod h1:j7QmbsuRrU17hdKR7UoiSXjKbzx65NGApP2/AKSIZws= github.com/aws/aws-sdk-go-v2/service/account v1.19.4 h1:v/rx7sJ6N9y3XObIyfJOLQnu0G6V/eBVkC5X79N/32Y= github.com/aws/aws-sdk-go-v2/service/account v1.19.4/go.mod h1:uBBYm9idEyHenbZGnKp7RsFDeatpU3j1eYGpctlHS4A= -github.com/aws/aws-sdk-go-v2/service/acm v1.28.5 h1:yJriRQs3d0ZI59mAyCdCyM/l/oJ9wnWbDhADZlbfoYs= -github.com/aws/aws-sdk-go-v2/service/acm v1.28.5/go.mod h1:AI/FWryd1egUbYqCtEexDQqp9KTU9wr6uMYMhI5k/C0= -github.com/aws/aws-sdk-go-v2/service/acmpca v1.35.1 h1:voL/pOr0BaN/aalNDqu03FU9WLfLlUWKU5vN4zZrzxw= -github.com/aws/aws-sdk-go-v2/service/acmpca v1.35.1/go.mod h1:V5sr9xWq2ezIJp9Z9K42deo13xgg1IUTQK38QKPsF4I= +github.com/aws/aws-sdk-go-v2/service/acm v1.28.6 h1:w22G2UDq7BYmBIR8yZOhokh/1/rU1YeJDK3lPIzTj34= +github.com/aws/aws-sdk-go-v2/service/acm v1.28.6/go.mod h1:AI/FWryd1egUbYqCtEexDQqp9KTU9wr6uMYMhI5k/C0= +github.com/aws/aws-sdk-go-v2/service/acmpca v1.35.2 h1:NbMNbjzLw5TQwUjyy03Je/O+Vn+HKXm2UeFVL0zFsG4= +github.com/aws/aws-sdk-go-v2/service/acmpca v1.35.2/go.mod h1:V5sr9xWq2ezIJp9Z9K42deo13xgg1IUTQK38QKPsF4I= github.com/aws/aws-sdk-go-v2/service/amp v1.27.4 h1:7vtS6+3ElVte1xD/TV5DbZQHj+R0QoohQyak5YIK1uE= github.com/aws/aws-sdk-go-v2/service/amp v1.27.4/go.mod h1:po55t8XjbRLbJ8XL9iGqKfgmfEn3aerSnvrD/q5hmEg= github.com/aws/aws-sdk-go-v2/service/amplify v1.24.1 h1:8d99lOaDOOQCx1Fzz/YqgKRFh7iQIgkgMlvfq1c5UWY= github.com/aws/aws-sdk-go-v2/service/amplify v1.24.1/go.mod h1:8qM0LbEOwR45GAsJvqWyGwFYEgeAEsvfvk6q75sFa50= -github.com/aws/aws-sdk-go-v2/service/apigateway v1.25.5 h1:KJHQTTo7aCyXhUYlKYAtPSjcl3KZvc+4FFgSPUWcs9k= -github.com/aws/aws-sdk-go-v2/service/apigateway v1.25.5/go.mod h1:3BsphqjgE9YOqWavNw60htOWr+17v+0hDvOTZAvQ5fY= -github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.22.5 h1:7iFofM7WlbHFYZmg54ft21VOhlr17I9x+/hiMnY0cow= -github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.22.5/go.mod h1:uwB4CO7XADP7or8jFWv8E5hNrwYFY4Zgn/FImfohZKM= -github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.4 h1:DC/O773ZvFjBtH0LJ7+580jDvM1vmOKOTYva/ifm7DQ= -github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.4/go.mod h1:yL19FXX7gb5GiHdTjCP8MNL5DW96IgiYi/H56JhEuZ4= +github.com/aws/aws-sdk-go-v2/service/apigateway v1.25.6 h1:DvM0CUbocoXYCC0zoACiTUbkFZaz9cTTqyMx9Zkq2cU= +github.com/aws/aws-sdk-go-v2/service/apigateway v1.25.6/go.mod h1:3BsphqjgE9YOqWavNw60htOWr+17v+0hDvOTZAvQ5fY= +github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.22.6 h1:AnY44gk5ViKyp34u1FQmRSP7LNTrjheDNyNSiccSvtw= +github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.22.6/go.mod h1:uwB4CO7XADP7or8jFWv8E5hNrwYFY4Zgn/FImfohZKM= +github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.5 h1:OvQHr5+LWYKyt4Iv8p+escwX1jmljo4f5EuFlvwUJKA= +github.com/aws/aws-sdk-go-v2/service/appconfig v1.31.5/go.mod h1:yL19FXX7gb5GiHdTjCP8MNL5DW96IgiYi/H56JhEuZ4= github.com/aws/aws-sdk-go-v2/service/appfabric v1.9.4 h1:e18VUICqDRo37EauaSl/FIs2iMeWs0vdb54r0XlqdrU= github.com/aws/aws-sdk-go-v2/service/appfabric v1.9.4/go.mod h1:fyAiNyCDDzrPfGgWEYkJtobC6qiziWUlwng1Ix7g8/0= github.com/aws/aws-sdk-go-v2/service/appflow v1.43.4 h1:FJ6zJkBym0FV+H8kbAKpokfbZL04XpA44t6uWA4w++0= github.com/aws/aws-sdk-go-v2/service/appflow v1.43.4/go.mod h1:eBIZ0IHJHWYl6Idy5wy+gHdB6B76vSQiSi/oCeB9jD0= github.com/aws/aws-sdk-go-v2/service/appintegrations v1.28.1 h1:MheouQNjqxyI02C1fWh3QzshYojGgqhY1ja7rqeEyYI= github.com/aws/aws-sdk-go-v2/service/appintegrations v1.28.1/go.mod h1:1DNDu5ras8iIvXx/AuhRkCNtSe0NB4HjdEY+7XyC+aw= -github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.31.1 h1:k9Naq87QuDek6vxzZBAElQxVD6r+Zw1EuHUn5OnId6Q= -github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.31.1/go.mod h1:YzuGTQ6UfGKCrzpSDF62R0OzvcXBy8zTK7R9ILU44Iw= +github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.31.2 h1:gb53L77aofDMWkfonMfKElh36C32saGh9FdMF4ce2iQ= +github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.31.2/go.mod h1:YzuGTQ6UfGKCrzpSDF62R0OzvcXBy8zTK7R9ILU44Iw= github.com/aws/aws-sdk-go-v2/service/applicationinsights v1.26.4 h1:8SQK5aPMXymZoX3CiJ1x4jeQvhOg6aKkmic9k9o2LYo= github.com/aws/aws-sdk-go-v2/service/applicationinsights v1.26.4/go.mod h1:F+iBvMxDaWhQgPF4bVvwCJ4+1esJXIa+HAGWu37AmaI= github.com/aws/aws-sdk-go-v2/service/applicationsignals v1.3.1 h1:DWuMp2+NdUD2BE55Cc8Bs2rjWM3svAzkiQZUu1+2fTw= @@ -86,20 +86,20 @@ github.com/aws/aws-sdk-go-v2/service/athena v1.44.5 h1:l6fpIrGjYc8zfeBo3QHWxQf3d github.com/aws/aws-sdk-go-v2/service/athena v1.44.5/go.mod h1:JKpavcrQ83Uy6ntM2pIt0vfVpHR9kvI3dkUeAKQstpc= github.com/aws/aws-sdk-go-v2/service/auditmanager v1.35.4 h1:z02SFD4Wgilovt63pniG1z9OaEIOxhVC2v+9WKTBfkw= github.com/aws/aws-sdk-go-v2/service/auditmanager v1.35.4/go.mod h1:ye1nOkHA8x7xKS3P4km6hwg5GmA7WByJJrm6Np3aJ9s= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.43.4 h1:OFz6UAgJfc4VzUAgGeOfU1udTKFl1fZFcwaecIRcSXs= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.43.4/go.mod h1:dDC/8RWLlLrUEoVJB04yka2iIWkFdtAAliefSH+FUlo= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.43.5 h1:b9wq1tEV06De56Vzpif7MFtMmErKWh+WureDxMwItnE= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.43.5/go.mod h1:dDC/8RWLlLrUEoVJB04yka2iIWkFdtAAliefSH+FUlo= github.com/aws/aws-sdk-go-v2/service/autoscalingplans v1.22.5 h1:e5HALi+7vcUroTJloJutq2EV+iihasJvFit5Bz8kTWs= github.com/aws/aws-sdk-go-v2/service/autoscalingplans v1.22.5/go.mod h1:ByOl4k37YS9BZQSVoewiOGVmOsocotE5vr9s+pzwkJ4= github.com/aws/aws-sdk-go-v2/service/backup v1.36.4 h1:q6Kwfy9DhTYPq/JDl5O3dnfdf2Hga3Wc/fu5m2LVspc= github.com/aws/aws-sdk-go-v2/service/backup v1.36.4/go.mod h1:WGwrjhzgh1bf0GChiwnw6TYok6tEIPFat79ExdcN6Zw= -github.com/aws/aws-sdk-go-v2/service/batch v1.44.0 h1:r76873R9Ep7XW9KUkCexjTqnEtmfimjq1FbHc5dKshk= -github.com/aws/aws-sdk-go-v2/service/batch v1.44.0/go.mod h1:ELBM9CH29I8N+OxY5/M5bBs3YQ1rd+S6mmSJKiCiJv0= +github.com/aws/aws-sdk-go-v2/service/batch v1.44.1 h1:078c62Zp/bQx7C9OJ0xS7ISitV046XrwSylWIXt0Nno= +github.com/aws/aws-sdk-go-v2/service/batch v1.44.1/go.mod h1:ELBM9CH29I8N+OxY5/M5bBs3YQ1rd+S6mmSJKiCiJv0= github.com/aws/aws-sdk-go-v2/service/bcmdataexports v1.5.4 h1:g4gzS4y9JrFsiJVtcsdVL53My97meTn7kfWYgyAFJ8Y= github.com/aws/aws-sdk-go-v2/service/bcmdataexports v1.5.4/go.mod h1:0MFqrGyNIuwMR0jlSd5r/rCA3S3IwGtHlN2EiTtavis= -github.com/aws/aws-sdk-go-v2/service/bedrock v1.14.0 h1:LHrV++0CqSnqSuZ6pqfrh4Z0IjL6ehT/bVOZ98hTY6o= -github.com/aws/aws-sdk-go-v2/service/bedrock v1.14.0/go.mod h1:tvSbdpG0KqXiLRahXAL6y/6vXIW7b8M6O+nVNI7epAA= -github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.16.1 h1:VP4FtZKHzf/xegbubhPgNovObPVRIOtch7eelgwROx0= -github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.16.1/go.mod h1:0jVvis8nv1ql8guJStqvyOgBUwhXCfDwZigqjBTIjXs= +github.com/aws/aws-sdk-go-v2/service/bedrock v1.15.0 h1:fvijh5V7fNF0s3eEztyErR7Hc8IQ+rHWrr9YsXTK0rE= +github.com/aws/aws-sdk-go-v2/service/bedrock v1.15.0/go.mod h1:tvSbdpG0KqXiLRahXAL6y/6vXIW7b8M6O+nVNI7epAA= +github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.17.0 h1:LvJj7NhCFbFciRShUDsBaTE1qjMi6A/fgLcoXARRx/Y= +github.com/aws/aws-sdk-go-v2/service/bedrockagent v1.17.0/go.mod h1:0jVvis8nv1ql8guJStqvyOgBUwhXCfDwZigqjBTIjXs= github.com/aws/aws-sdk-go-v2/service/budgets v1.25.5 h1:tAyHFeb78bW+DmRo0nDYR7Id4ham5dvWwuhbcYLXFSE= github.com/aws/aws-sdk-go-v2/service/budgets v1.25.5/go.mod h1:suM5EabsWzXJCpawQ/fFxQxGSjSOQ8Rp9kMBZM82XQU= github.com/aws/aws-sdk-go-v2/service/chatbot v1.4.4 h1:sSfmh6DFJJEG0bfkJiImcZ3AUeatn3Jwo0yIb2VKRik= @@ -114,10 +114,10 @@ github.com/aws/aws-sdk-go-v2/service/cleanrooms v1.16.1 h1:TRDv5Ft6/qISkosTm3WKF github.com/aws/aws-sdk-go-v2/service/cleanrooms v1.16.1/go.mod h1:BIE36Xry2pkOoixRGPwlFn/L14MaCMIHpC+tB2BoTAA= github.com/aws/aws-sdk-go-v2/service/cloud9 v1.26.4 h1:P4UazpjbIwre5+GGo85WikWTk3idUnJD8sL8JysOEFg= github.com/aws/aws-sdk-go-v2/service/cloud9 v1.26.4/go.mod h1:ZdpNeT3X3x8iU4wdqaeYm8DYn0IZ3d/Krk8gXvbM2ko= -github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.20.4 h1:DXrXltI9XfD8ND/MZSfKJQ3et4f/4FBKn6Hv5frCeJ4= -github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.20.4/go.mod h1:r6W6g2+YsfTBfuvxRLvCf6xxlQRSoNTdRDGFX7noKu0= -github.com/aws/aws-sdk-go-v2/service/cloudformation v1.53.4 h1:QbMAN9s6cmAxQMTAbLmHj0a5mhwoZTL0eo91UaYLG4E= -github.com/aws/aws-sdk-go-v2/service/cloudformation v1.53.4/go.mod h1:y45SdA9v+dLlweaqwAQMoFeXqdRvgwevafa2X8iTqZQ= +github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.20.5 h1:Kl55Z27pxKA6XGjnnKwPK6Um+DRZK32ocIYm1g7IOUM= +github.com/aws/aws-sdk-go-v2/service/cloudcontrol v1.20.5/go.mod h1:r6W6g2+YsfTBfuvxRLvCf6xxlQRSoNTdRDGFX7noKu0= +github.com/aws/aws-sdk-go-v2/service/cloudformation v1.53.5 h1:YeTVIy7cJLeahs7K0jQGDGAd1YYND/to/z8N3kqZBhY= +github.com/aws/aws-sdk-go-v2/service/cloudformation v1.53.5/go.mod h1:y45SdA9v+dLlweaqwAQMoFeXqdRvgwevafa2X8iTqZQ= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.38.5 h1:t7ZIhyAbD9zDH7rzEuUIagnPz6dJRB8HesgygHUbpsc= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.38.5/go.mod h1:Jnkkf+olxCcacqhQIjY8BlG4JL2/ZsPLsiBh6xnNsu4= github.com/aws/aws-sdk-go-v2/service/cloudfrontkeyvaluestore v1.6.4 h1:Mj+ad+2ZCY70qK0Sy9AzV6eFq4N9S7/71kIL8rGVEmg= @@ -126,22 +126,22 @@ github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.25.3 h1:s8IUd1V3jEMun7mhrdLfo github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.25.3/go.mod h1:D4b92wbLiBEVPhUi/LctCv3eqcOucG4xSUc13rawcQs= github.com/aws/aws-sdk-go-v2/service/cloudsearch v1.24.4 h1:9u2EwGQVQuIqhnDoVeu6jDLWXU0yHc5HptB1ktqHTNo= github.com/aws/aws-sdk-go-v2/service/cloudsearch v1.24.4/go.mod h1:Ha79RvZ2XSlVL6RcC6dT6AtlseEiY1UnB0aGvJdmXIU= -github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.42.4 h1:6mVIkasY2pGtFQkX0Bjh0RMua0H1Px8p5vHLzGYpyMc= -github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.42.4/go.mod h1:/+sRHIT00VCsc4kPTtSFoQab044bx72J3Nbp9rH9orA= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.40.4 h1:dl+oQSMPrYCu7sdH/aZRvOplO49dI5KB9FzT+aVebKY= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.40.4/go.mod h1:maEDlnDRdhsc0xrUljh3dUJbej11AHz+VTQJsNw1QmE= -github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.37.4 h1:sVI7RVQ7ryIav3SwVBvdBzUz31hcQVRMiXFp/D/UTOk= -github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.37.4/go.mod h1:K27H8p8ZmsntKSSC8det8LuT5WahXoJ4vZqlWwKTRaM= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.42.5 h1:M173nCC5U4dTsUTxNbxNiyFq20LB33dtXkVbo8G2BP8= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.42.5/go.mod h1:/+sRHIT00VCsc4kPTtSFoQab044bx72J3Nbp9rH9orA= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.40.5 h1:/YvqO1j75i4leoV+Z3a5s/dAlEszf2wTKBW8jc3Gd4s= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.40.5/go.mod h1:maEDlnDRdhsc0xrUljh3dUJbej11AHz+VTQJsNw1QmE= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.37.5 h1:cQpWa19MrnwPcHQfDjLy6GJLo6lpgbMNix4pt5zLuK0= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.37.5/go.mod h1:K27H8p8ZmsntKSSC8det8LuT5WahXoJ4vZqlWwKTRaM= github.com/aws/aws-sdk-go-v2/service/codeartifact v1.30.4 h1:zqbJalPHJqn9NBns+i9eHUpt5OERttgDrzAoAsQqE04= github.com/aws/aws-sdk-go-v2/service/codeartifact v1.30.4/go.mod h1:oYja70TBh+q04+TN5OB8yj7Y9/k65xa3VxliP4ag3e4= -github.com/aws/aws-sdk-go-v2/service/codebuild v1.42.0 h1:zPqVjrBU2oZiGGyo/ouGqGE7jko7JoPfNBLsmixmi2E= -github.com/aws/aws-sdk-go-v2/service/codebuild v1.42.0/go.mod h1:M5AlmELOl+c+QvNOtcjYAy6pLoCAWk9AWAJoijf50N4= +github.com/aws/aws-sdk-go-v2/service/codebuild v1.42.1 h1:D727sWkETfr5hJafxhPB9+T8h8ka/ax9gVB3gTaiZz8= +github.com/aws/aws-sdk-go-v2/service/codebuild v1.42.1/go.mod h1:M5AlmELOl+c+QvNOtcjYAy6pLoCAWk9AWAJoijf50N4= github.com/aws/aws-sdk-go-v2/service/codecatalyst v1.15.4 h1:MPfnaWtfyb6puC5qribrdzmEzIAmlXn4BzcA1Gs7bLg= github.com/aws/aws-sdk-go-v2/service/codecatalyst v1.15.4/go.mod h1:3FL8cUHMp2BRCb7tXAhAViSYMMfMymFqEoflzpolgXU= github.com/aws/aws-sdk-go-v2/service/codecommit v1.25.1 h1:mOOALIM4JzhYkq3voCBbmZqmyEVEhHsfasMTbVxLkNs= github.com/aws/aws-sdk-go-v2/service/codecommit v1.25.1/go.mod h1:6zf5j3mIUXKM0s2iz5ttR2Qwq+o47D0jotpAyaKgZRA= -github.com/aws/aws-sdk-go-v2/service/codedeploy v1.27.4 h1:MVX41GBkdLFuq+oMfVQhLhriP57TFI09VAuSJkwTAcs= -github.com/aws/aws-sdk-go-v2/service/codedeploy v1.27.4/go.mod h1:BaUzjsBCB2ZbLQvH2x5ixq748bz288dedHYgG1Qwac8= +github.com/aws/aws-sdk-go-v2/service/codedeploy v1.27.5 h1:x1fvCk5PckPxL5fC1MJr3kRXK/2Xuq2oyZJl0zjrtLY= +github.com/aws/aws-sdk-go-v2/service/codedeploy v1.27.5/go.mod h1:BaUzjsBCB2ZbLQvH2x5ixq748bz288dedHYgG1Qwac8= github.com/aws/aws-sdk-go-v2/service/codeguruprofiler v1.22.4 h1:OGN+raxbAM+DAoUbjBSw1wWAzlw6Te6u57xVBBBuYUk= github.com/aws/aws-sdk-go-v2/service/codeguruprofiler v1.22.4/go.mod h1:FvrBwe9Y9jMEYK0i3uc/KIYUIb6PPEcJP8E6aibp70A= github.com/aws/aws-sdk-go-v2/service/codegurureviewer v1.27.4 h1:IL4odDPoYEDrDEz7UgDEt0nX8jfygsSIq2LOCldbN00= @@ -160,8 +160,8 @@ github.com/aws/aws-sdk-go-v2/service/comprehend v1.33.4 h1:XN5oTdsinlP0pm7+1UJDZ github.com/aws/aws-sdk-go-v2/service/comprehend v1.33.4/go.mod h1:w6DEUruPElD9u/sNIo8E+mdsi+ptoX0B5rMBl5QYu6o= github.com/aws/aws-sdk-go-v2/service/computeoptimizer v1.37.5 h1:0Ch7C38oQN+Jwd6VkxUjmJDfJPsRr3qiEW0UqOYhGiY= github.com/aws/aws-sdk-go-v2/service/computeoptimizer v1.37.5/go.mod h1:+X0pZ4zLSCZNlIYyFeg0d+SKhWFvISEPMgGJzFL6K3I= -github.com/aws/aws-sdk-go-v2/service/configservice v1.48.4 h1:SFNBg0ijUqerKuU17/YP6SQJWGLWRdHPnfs+O+9xoB8= -github.com/aws/aws-sdk-go-v2/service/configservice v1.48.4/go.mod h1:TmIgrBzx07j8zIlyVm4G1ynCQ0EAHbIB3sV+wHF4n30= +github.com/aws/aws-sdk-go-v2/service/configservice v1.48.5 h1:I2+CJ/0oYDHbNE/KR74E4ovre9P7Iy7pEz7zt9OIoKM= +github.com/aws/aws-sdk-go-v2/service/configservice v1.48.5/go.mod h1:TmIgrBzx07j8zIlyVm4G1ynCQ0EAHbIB3sV+wHF4n30= github.com/aws/aws-sdk-go-v2/service/connect v1.107.1 h1:rN8zmpLByJYKabn2r3qK0PMqOn3wxcKUdvHuvuqArdU= github.com/aws/aws-sdk-go-v2/service/connect v1.107.1/go.mod h1:BhQ5ItE0siEuYTP1gtaeQR2RClHE7IflOutRElug85E= github.com/aws/aws-sdk-go-v2/service/connectcases v1.19.4 h1:Qsn7LWzCFpwzjQ+YbHTnzV0zT03eEk1qAWgzrJ1kzDM= @@ -176,18 +176,18 @@ github.com/aws/aws-sdk-go-v2/service/costoptimizationhub v1.8.1 h1:Tn0hZIhVsVzMR github.com/aws/aws-sdk-go-v2/service/costoptimizationhub v1.8.1/go.mod h1:mSktTnKmJrNlAOxo9XMTuyZZgNtsRHiZFlCDtr0Cjug= github.com/aws/aws-sdk-go-v2/service/customerprofiles v1.39.4 h1:9EjSqpadafgsOJ+9IKeJfGHRJmXwtig1vrmDn7OGYl0= github.com/aws/aws-sdk-go-v2/service/customerprofiles v1.39.4/go.mod h1:8Pk+xY6CaUw3WKfykOFbBshmwWB5AYb1rXy54AExBzE= -github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.40.4 h1:9HagIn3jN6vhEz45xhnoCk75W+/6e4kxPi9S3tlYX3c= -github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.40.4/go.mod h1:qAh0WHqAis6yrT4nbIfSXeK1+i9+q0quWZFM7u2zcJ4= +github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.40.5 h1:ipl/oeBAF3TVauTx48yYMjU3cvaKZtfaBZfMSV/hEPQ= +github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.40.5/go.mod h1:qAh0WHqAis6yrT4nbIfSXeK1+i9+q0quWZFM7u2zcJ4= github.com/aws/aws-sdk-go-v2/service/databrew v1.31.4 h1:46F63DU425j0LtKALaYPvJGwUXCbXLGL3OwC82+ftP4= github.com/aws/aws-sdk-go-v2/service/databrew v1.31.4/go.mod h1:LcvdT10LOR5jsGhA+V3XelQOaJTbdiIT2AHKZzKG4/Q= github.com/aws/aws-sdk-go-v2/service/dataexchange v1.30.4 h1:lxty/0cqjBNTyXgMYBmqTzHcEXFrwYs6p6P+sTv2TUo= github.com/aws/aws-sdk-go-v2/service/dataexchange v1.30.4/go.mod h1:LDiUccKENw8Dqp6pRAnTff4VL5NOJKUWxK8XdgDeV6E= github.com/aws/aws-sdk-go-v2/service/datapipeline v1.23.4 h1:s7mM86bIZ5M7Pbvaah+ULpf8sXfhTo6tVTEXQXlHJR8= github.com/aws/aws-sdk-go-v2/service/datapipeline v1.23.4/go.mod h1:pHvGsW093b+jkdSoAbT+gA9nt6q1pNy8Ru2vsfaN1wk= -github.com/aws/aws-sdk-go-v2/service/datasync v1.40.4 h1:zqXdKVbWOp/gt9/P/45OLqQm4F1YUWRf1gSh12JBIBQ= -github.com/aws/aws-sdk-go-v2/service/datasync v1.40.4/go.mod h1:h0i3yaI4wcw8Oh2L2b1wtObPsebxt2EeMdP6XbIZtJU= -github.com/aws/aws-sdk-go-v2/service/datazone v1.17.1 h1:N7O3bi1PtoWHwl24P+Jzp08D4//nTAJOhD3tvdRdxys= -github.com/aws/aws-sdk-go-v2/service/datazone v1.17.1/go.mod h1:gLG/qM5isGCDBaAqYdBKjezrjDVT6v086DFbjNnNUus= +github.com/aws/aws-sdk-go-v2/service/datasync v1.40.5 h1:SrFqfu1mxbxu7ghEeTbGeeFYGf4Q+R8JdfMklFscTRg= +github.com/aws/aws-sdk-go-v2/service/datasync v1.40.5/go.mod h1:h0i3yaI4wcw8Oh2L2b1wtObPsebxt2EeMdP6XbIZtJU= +github.com/aws/aws-sdk-go-v2/service/datazone v1.17.2 h1:nrSYP5Wyk0FYjYlGUJZhoZJX4Foe00sB0csDYZ8+yYM= +github.com/aws/aws-sdk-go-v2/service/datazone v1.17.2/go.mod h1:gLG/qM5isGCDBaAqYdBKjezrjDVT6v086DFbjNnNUus= github.com/aws/aws-sdk-go-v2/service/dax v1.21.5 h1:DplHNGO6Em5GoFhu6kZsYbPOjcGhAGKWVBxRnv2WGi0= github.com/aws/aws-sdk-go-v2/service/dax v1.21.5/go.mod h1:SEzUZ4N5NEF9868UCBD5FCnaUDrLoEnMciJljIQmb8I= github.com/aws/aws-sdk-go-v2/service/detective v1.29.4 h1:LJb8MCom/LDZoDVIZ+uTkViXXFE7I893q/TgI3+FnII= @@ -196,58 +196,58 @@ github.com/aws/aws-sdk-go-v2/service/devicefarm v1.25.3 h1:32bbsAHr1rdar47uJdIzl github.com/aws/aws-sdk-go-v2/service/devicefarm v1.25.3/go.mod h1:26/n41x24OUdF+VLuwMxhPl31vD9RojMeLdMNZyed3o= github.com/aws/aws-sdk-go-v2/service/devopsguru v1.32.4 h1:o9afQQoma39xoywQVujTpcjrwe2+RDnv3JxJan2nwao= github.com/aws/aws-sdk-go-v2/service/devopsguru v1.32.4/go.mod h1:4Bmv1oe9qPHS1ZQ2JWEcnwnXWcKhFoCbGm/8s8vMzJ8= -github.com/aws/aws-sdk-go-v2/service/directconnect v1.27.6 h1:X4aC2lLOYhrlL+I3Gm8wD1ssljfU23K9S2TxGg+74OI= -github.com/aws/aws-sdk-go-v2/service/directconnect v1.27.6/go.mod h1:b2qLEkaXQgQkC9UWlhfCBPTaPDvnjv/TY5JWDyUCtps= +github.com/aws/aws-sdk-go-v2/service/directconnect v1.27.7 h1:e2gXkVtS/k7P4Z1RNQ9DhJpJn2bmzx6QMf/LuMNRKgE= +github.com/aws/aws-sdk-go-v2/service/directconnect v1.27.7/go.mod h1:b2qLEkaXQgQkC9UWlhfCBPTaPDvnjv/TY5JWDyUCtps= github.com/aws/aws-sdk-go-v2/service/directoryservice v1.27.4 h1:ox2+AKqwzfaB9lvaO5qse9fiEvIVBJvcCcvTKS7c3KU= github.com/aws/aws-sdk-go-v2/service/directoryservice v1.27.4/go.mod h1:N8l9k6ElY3Y948ET7gsGYfqSYhcAOfolzYmQdSg8THk= -github.com/aws/aws-sdk-go-v2/service/dlm v1.26.4 h1:yy7Y5+j+trB1T8uQxM+1g/jEoXPMCyOqxIVAUAbHKH0= -github.com/aws/aws-sdk-go-v2/service/dlm v1.26.4/go.mod h1:9RM2RVlqmhlGWOvabXaTqKEYxWYMaapsm2kRUJqju2I= -github.com/aws/aws-sdk-go-v2/service/docdb v1.37.0 h1:PDNOlWFXwsQGJYIdxp5Em5tOayA0IjwyAAL1MLaZer0= -github.com/aws/aws-sdk-go-v2/service/docdb v1.37.0/go.mod h1:bDONknhcJ0wREMHzTw/kaE+lVaCBQSuH248NVHjvmZg= +github.com/aws/aws-sdk-go-v2/service/dlm v1.26.5 h1:F+p3UASv4RTNWc7cBhdKJ3bhxGD9er5FT3/PdYz1kCA= +github.com/aws/aws-sdk-go-v2/service/dlm v1.26.5/go.mod h1:9RM2RVlqmhlGWOvabXaTqKEYxWYMaapsm2kRUJqju2I= +github.com/aws/aws-sdk-go-v2/service/docdb v1.37.1 h1:cVaY+WUpp2R/bTZffQjfsw66ymmWty29b3LKPLmBqXE= +github.com/aws/aws-sdk-go-v2/service/docdb v1.37.1/go.mod h1:bDONknhcJ0wREMHzTw/kaE+lVaCBQSuH248NVHjvmZg= github.com/aws/aws-sdk-go-v2/service/docdbelastic v1.11.4 h1:NrPkWTcgk6nKOUBMNryJeI8AENZmWXeJVb8g9A3Enm4= github.com/aws/aws-sdk-go-v2/service/docdbelastic v1.11.4/go.mod h1:f4jPGrPClbLTF4rwjGZ2Lfx+ETG6gU2j8m4zGNRGArA= github.com/aws/aws-sdk-go-v2/service/drs v1.28.4 h1:81aZMHBglrjRRcXiF/PNa5zQrHwAQXNU2qDaKDsPexA= github.com/aws/aws-sdk-go-v2/service/drs v1.28.4/go.mod h1:0jA7cK0TQBureDXRvNrNYHOImf+WOK9X1rBtDK5znxQ= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.5 h1:Cm77yt+/CV7A6DglkENsWA3H1hq8+4ItJnFKrhxHkvg= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.5/go.mod h1:s2fYaueBuCnwv1XQn6T8TfShxJWusv5tWPMcL+GY6+g= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.6 h1:LKZuRTlh8RszjuWcUwEDvCGwjx5olHPp6ZOepyZV5p8= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.6/go.mod h1:s2fYaueBuCnwv1XQn6T8TfShxJWusv5tWPMcL+GY6+g= github.com/aws/aws-sdk-go-v2/service/ec2 v1.176.0 h1:fWhkSvaQqa5eWiRwBw10FUnk1YatAQ9We4GdGxKiCtg= github.com/aws/aws-sdk-go-v2/service/ec2 v1.176.0/go.mod h1:ISODge3zgdwOEa4Ou6WM9PKbxJWJ15DYKnr2bfmCAIA= -github.com/aws/aws-sdk-go-v2/service/ecr v1.32.1 h1:PxM8EHsv1sd9eWGamMQCvqBEjxytK5kAwjrxlfG3tac= -github.com/aws/aws-sdk-go-v2/service/ecr v1.32.1/go.mod h1:kdk+WJbHcGVbIlRQfSrKyuKkbWDdD8I9NScyS5vZ8eQ= +github.com/aws/aws-sdk-go-v2/service/ecr v1.32.2 h1:2RjzMZp/8PXJUMqiKkDSp7RVj6inF5DpVel35THjV+I= +github.com/aws/aws-sdk-go-v2/service/ecr v1.32.2/go.mod h1:kdk+WJbHcGVbIlRQfSrKyuKkbWDdD8I9NScyS5vZ8eQ= github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.25.4 h1:VjvjAxO4Hu/vRz7aNoMtnxi+WBRdyZPDAjBZjrIwQVo= github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.25.4/go.mod h1:MaIyM8Niqa55SxzMACfiHVhC7xOr0wa9+pRcUWkGKV0= -github.com/aws/aws-sdk-go-v2/service/ecs v1.45.1 h1:3ZgHR32WOV1SWQVBDwsuOm4e69AKL1XMGuc1LyJjJ50= -github.com/aws/aws-sdk-go-v2/service/ecs v1.45.1/go.mod h1:er8WHbgZAl17Dmu41ifKmUrV7JPpiQnRc+XSrnu4qR8= +github.com/aws/aws-sdk-go-v2/service/ecs v1.45.2 h1:DSFxt4HBQjlgKNMyYdME9cbB11FFi7umpTGbqJaS9nw= +github.com/aws/aws-sdk-go-v2/service/ecs v1.45.2/go.mod h1:er8WHbgZAl17Dmu41ifKmUrV7JPpiQnRc+XSrnu4qR8= github.com/aws/aws-sdk-go-v2/service/efs v1.31.4 h1:uBcw1R0PusM+j1fYCaLeIFhqrDntEE1HcR/muOIUC00= github.com/aws/aws-sdk-go-v2/service/efs v1.31.4/go.mod h1:4scihofKQuQubaxzkeoX4t7YJ9AW2pnt4QKBwEtsMTI= -github.com/aws/aws-sdk-go-v2/service/eks v1.48.1 h1:KZ1GkevaklMvPxcqivG4UDwar3lqMSpbK9RpZowjMec= -github.com/aws/aws-sdk-go-v2/service/eks v1.48.1/go.mod h1:fff5mmwLCVxyXCojYjPY34sUGvWtXCD325yRL5qHAVs= -github.com/aws/aws-sdk-go-v2/service/elasticache v1.40.6 h1:P1ogcWCB8yIB0k6+2CYYL+8ml1tSvYQWUeZXVqBrkR0= -github.com/aws/aws-sdk-go-v2/service/elasticache v1.40.6/go.mod h1:8Fz2FIrfqAq4KAhs20vraNyG4wzPheq8EFCBb9Lpkqs= +github.com/aws/aws-sdk-go-v2/service/eks v1.48.2 h1:EFjJfHrl7/2qh/ZawUXtl9juOPAUUOTFDLOmov5KSgM= +github.com/aws/aws-sdk-go-v2/service/eks v1.48.2/go.mod h1:fff5mmwLCVxyXCojYjPY34sUGvWtXCD325yRL5qHAVs= +github.com/aws/aws-sdk-go-v2/service/elasticache v1.40.7 h1:Ea1/qjiNAz8mxw1IGDNBj3SvPI9DQcofPGQCDhcx1l8= +github.com/aws/aws-sdk-go-v2/service/elasticache v1.40.7/go.mod h1:8Fz2FIrfqAq4KAhs20vraNyG4wzPheq8EFCBb9Lpkqs= github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.26.3 h1:EpsrOsTMEL3dxOujbZEHrZh9OCK52jU2fambAqBcYBA= github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.26.3/go.mod h1:zfn0j3G+U6N+HZBFgIrtMZhFRy1T4d0NoutDzH8EsHI= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.26.4 h1:m+rMj7WOFCfc/v+N2X2/LBngi9+I9vhatWPnPTOmwo8= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.26.4/go.mod h1:LmgiPApGNIhqMYvqutZx8OZp/ia8Dzp89BaqH8TaQQ8= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.34.1 h1:kGMwyO/8QEbcE5s9hnprQg82Bo0U5iHkcqFtQm5FODg= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.34.1/go.mod h1:rdgCuor2mAOU7LhpD7tO3TPl7BACCY4PzM9N0jnnHyo= -github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.30.4 h1:f1HBTmA4yFu1yYd2TtgEXNKLN7D1xGrrEyE6JL5HzHc= -github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.30.4/go.mod h1:YqwsImPCrZ8Ay4V/YIqASX80JIfpaRp8zye3e8JU8UU= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.26.5 h1:DjOizZWhTjae9Qc4Dln6yle4Bb+CtVWQVS9cpAyE1sg= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.26.5/go.mod h1:LmgiPApGNIhqMYvqutZx8OZp/ia8Dzp89BaqH8TaQQ8= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.34.2 h1:pWaVzH7OFh4MmHTjIGBNRTbFauJDVpIaRTtGF1BEq2o= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.34.2/go.mod h1:rdgCuor2mAOU7LhpD7tO3TPl7BACCY4PzM9N0jnnHyo= +github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.30.5 h1:doJDRX17qdP/W93+FmW5zPj2vB9yWIojvqtOcK5CNnE= +github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.30.5/go.mod h1:YqwsImPCrZ8Ay4V/YIqASX80JIfpaRp8zye3e8JU8UU= github.com/aws/aws-sdk-go-v2/service/elastictranscoder v1.25.4 h1:oqcQPG5DC3KSHYtvU9IAGcx8m0bv/E1/N+axNTU8XBQ= github.com/aws/aws-sdk-go-v2/service/elastictranscoder v1.25.4/go.mod h1:vrCOclUVPrk9dUIy1jPS4EE3oTIMy41essKbVgDIOJc= -github.com/aws/aws-sdk-go-v2/service/emr v1.42.3 h1:ndpZbpeHezH1PvwyZPMfsQFwNsdOm1smePijmDHEYiQ= -github.com/aws/aws-sdk-go-v2/service/emr v1.42.3/go.mod h1:b5rw8jAiS1iQh/11s3kA/750pC0mnEfoOMRbrt3YwdM= -github.com/aws/aws-sdk-go-v2/service/emrcontainers v1.30.5 h1:cMTOHHfhnKH3vw2ktFHkl3wMHXkIuGKrmXq5kRl84aA= -github.com/aws/aws-sdk-go-v2/service/emrcontainers v1.30.5/go.mod h1:sdoSckikg3XGzZpkNn7/XFRJDj1qhzr0JRqE9t7GrVI= +github.com/aws/aws-sdk-go-v2/service/emr v1.42.4 h1:7CIO7fap0PFapVnvF3d3nJeWeFhi0aEj1M5m33uA8hk= +github.com/aws/aws-sdk-go-v2/service/emr v1.42.4/go.mod h1:b5rw8jAiS1iQh/11s3kA/750pC0mnEfoOMRbrt3YwdM= +github.com/aws/aws-sdk-go-v2/service/emrcontainers v1.31.0 h1:6RG0Vrxuq87tTgxzc0henW1jGX04QvNACHCTE13M18o= +github.com/aws/aws-sdk-go-v2/service/emrcontainers v1.31.0/go.mod h1:sdoSckikg3XGzZpkNn7/XFRJDj1qhzr0JRqE9t7GrVI= github.com/aws/aws-sdk-go-v2/service/emrserverless v1.23.4 h1:r3xbYSC/IVAC54eJNz9NSNItQYAEfE1fpyAd3xY+3oo= github.com/aws/aws-sdk-go-v2/service/emrserverless v1.23.4/go.mod h1:XudX9De0ob5VFmaVsph0WXw7omnOid6q8hW6YjT+xmE= -github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.4 h1:GWRTbj0tiFfk6lIwUcHv7F9bPdty0TGwr3ruK0jyBUc= -github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.4/go.mod h1:AudiowtxywCESLsT3fvGcAEEcN4l7nusiW2nZMaCo+g= +github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.5 h1:wL8V4pdudr0mHbZ/tj9YacfRak5klKz9omV0uXBt5Sk= +github.com/aws/aws-sdk-go-v2/service/eventbridge v1.33.5/go.mod h1:AudiowtxywCESLsT3fvGcAEEcN4l7nusiW2nZMaCo+g= github.com/aws/aws-sdk-go-v2/service/evidently v1.21.4 h1:feriNEUt2RPlVuVZwneOyIHvgHDXfb5aEe0BPvOhhjA= github.com/aws/aws-sdk-go-v2/service/evidently v1.21.4/go.mod h1:ihvSwcvyE0jUmVfeDxo4TMBsvZQSpuQmSi8WNFwgewU= github.com/aws/aws-sdk-go-v2/service/finspace v1.26.4 h1:+B3+oYV6P5XyE/r/n7as3DIEYFI2UgJpnvtemz5tNVI= github.com/aws/aws-sdk-go-v2/service/finspace v1.26.4/go.mod h1:MBYQlgoadm+2MlHRSEboBikXNZwc112vVh2vyKRei9A= -github.com/aws/aws-sdk-go-v2/service/firehose v1.32.1 h1:HNMNn+tfDWgZml26DIRJ2IZmBoa3Pf9Y1JRiuXiGUG8= -github.com/aws/aws-sdk-go-v2/service/firehose v1.32.1/go.mod h1:aEIXb5VUx5COGtVbhP8pe/Ulm0bQzxPbPmsVH5+Jog8= +github.com/aws/aws-sdk-go-v2/service/firehose v1.32.2 h1:BaLB1YvppB82w++nMzw0+CESCCW2vAPaLxRt0Zi06l8= +github.com/aws/aws-sdk-go-v2/service/firehose v1.32.2/go.mod h1:aEIXb5VUx5COGtVbhP8pe/Ulm0bQzxPbPmsVH5+Jog8= github.com/aws/aws-sdk-go-v2/service/fis v1.27.1 h1:bTpcI1WZYf82fqM+xTkZ3BL7Hqgg3v7h3KJhuPphWTc= github.com/aws/aws-sdk-go-v2/service/fis v1.27.1/go.mod h1:o7798u9XT3IvMK+42ZPTIjSAfnBfI+KSGkKScjqND+8= github.com/aws/aws-sdk-go-v2/service/fms v1.35.4 h1:UcpnExUV1/3dkWeCeRWEeayxJZaw/3igh+vq6NiCBi8= @@ -278,8 +278,8 @@ github.com/aws/aws-sdk-go-v2/service/identitystore v1.25.4 h1:icyZwij1BqzyW5yZGc github.com/aws/aws-sdk-go-v2/service/identitystore v1.25.4/go.mod h1:NPEyhoIDtRHby3oWpLFUdGrfbMwM8f/4u57VdtRdH8g= github.com/aws/aws-sdk-go-v2/service/inspector v1.23.4 h1:LMurtFmS0KLuSDNYiWZVmyaTmkbu5HJeJvySzoJ33XA= github.com/aws/aws-sdk-go-v2/service/inspector v1.23.4/go.mod h1:8sD0U1cNqtXjezRZoX35pR7ek1f2gvU+5YMawA+nP6o= -github.com/aws/aws-sdk-go-v2/service/inspector2 v1.29.0 h1:n9VLtNnW+zoL/nbCc4eg/ERa7A7b3ZUqfn9gAFYfd04= -github.com/aws/aws-sdk-go-v2/service/inspector2 v1.29.0/go.mod h1:4PRDAODr5QhbNtlhu0qaSiqAYnawLE7AxFkbUJ5VmQA= +github.com/aws/aws-sdk-go-v2/service/inspector2 v1.30.0 h1:fzthyIOA/ls15PJTvNuSStLYQh9yUB8Wln2IzKsH2ws= +github.com/aws/aws-sdk-go-v2/service/inspector2 v1.30.0/go.mod h1:4PRDAODr5QhbNtlhu0qaSiqAYnawLE7AxFkbUJ5VmQA= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4/go.mod h1:Vz1JQXliGcQktFTN/LN6uGppAIRoLBR2bMvIMP0gOjc= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 h1:GckUnpm4EJOAio1c8o25a+b3lVfwVzC9gnSBqiiNmZM= @@ -290,8 +290,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 h1:tJ5RnkHC github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18/go.mod h1:++NHzT+nAF7ZPrHPsA+ENvsXkOO8wEu+C6RXltAG4/c= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 h1:jg16PhLPUiHIj8zYIW6bqzeQSuHVEiWnGA0Brz5Xv2I= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16/go.mod h1:Uyk1zE1VVdsHSU7096h/rwnXDzOzYQVl+FNPhPw7ShY= -github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.4 h1:uEKMRTKNdS2ELDN3Kttfz7IFXanX0+T1sVE13mm/+Vk= -github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.4/go.mod h1:TfxNP+f4gWfHqxnXjHQx3ltEOjE+WBxC/K0cfyaP6K4= +github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.5 h1:PHRvcbXTWLtoZvsTxQ3PuoTJMz3s4hzmM4wuoN1AyVQ= +github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.5/go.mod h1:TfxNP+f4gWfHqxnXjHQx3ltEOjE+WBxC/K0cfyaP6K4= github.com/aws/aws-sdk-go-v2/service/iot v1.55.4 h1:kSWUXF8Bmqt7WA0TkQ/+rrGyNooDmQNno7EMwbRFbIs= github.com/aws/aws-sdk-go-v2/service/iot v1.55.4/go.mod h1:yutfNjkxEV9lNXKElY0h0C58gIBsEanE/w3Ommjx92w= github.com/aws/aws-sdk-go-v2/service/iotanalytics v1.24.4 h1:W7L9VJE5IyBewnGhqSF+kiK3RgL7cAXBbVIcO+bR/fI= @@ -310,20 +310,20 @@ github.com/aws/aws-sdk-go-v2/service/kendra v1.52.4 h1:9kH+n1+/qYj0CobsPKhkUkxXy github.com/aws/aws-sdk-go-v2/service/kendra v1.52.4/go.mod h1:AUVjCq/VBzeRwZ1Im+7vZUhzbp62+6c8CgoKIM4/52I= github.com/aws/aws-sdk-go-v2/service/keyspaces v1.12.4 h1:U6bdkrhFJgIAGAob4hUxca1z0tY7fHXMhGuTWzjckDM= github.com/aws/aws-sdk-go-v2/service/keyspaces v1.12.4/go.mod h1:PGidrVmU9AHcjWznXWXvFiqbe0UXm76/ZM7zK6IpzsI= -github.com/aws/aws-sdk-go-v2/service/kinesis v1.29.4 h1:Tu/EuXZH2pJD4Fcz1UmkLXcquc5xTvVLjhCQeBhTnQ4= -github.com/aws/aws-sdk-go-v2/service/kinesis v1.29.4/go.mod h1:pKTvEQz1PcNd+gKArVyeHpVM63AWnFqYyg07WAQQANQ= +github.com/aws/aws-sdk-go-v2/service/kinesis v1.29.5 h1:iirGMva2IXw4kcqsvuF+uc8ARweuVqoQJjzRZGaiV1E= +github.com/aws/aws-sdk-go-v2/service/kinesis v1.29.5/go.mod h1:pKTvEQz1PcNd+gKArVyeHpVM63AWnFqYyg07WAQQANQ= github.com/aws/aws-sdk-go-v2/service/kinesisanalytics v1.23.4 h1:yxySILn3hm1s8Ct+t9qMVaq2hSN+xiRNlZsofXhMw/o= github.com/aws/aws-sdk-go-v2/service/kinesisanalytics v1.23.4/go.mod h1:OgvIq7m7gzY2sBH++CIV1V7krAZBgJRRJ7MTW1FU0NQ= github.com/aws/aws-sdk-go-v2/service/kinesisanalyticsv2 v1.28.3 h1:w5xqARAaghK7j4r9JEUaprZP3PMZ6ugpX/BM0O6AWYo= github.com/aws/aws-sdk-go-v2/service/kinesisanalyticsv2 v1.28.3/go.mod h1:+Cs3ak0F/Dwib8XDDw1eFeLpSArW+qrGjXg/AFjgW20= github.com/aws/aws-sdk-go-v2/service/kinesisvideo v1.25.4 h1:tjkbOT23BfsZTHn96JOYMxxT/9sf5BtNfvIcWsVuk7M= github.com/aws/aws-sdk-go-v2/service/kinesisvideo v1.25.4/go.mod h1:cfZaiL9W37cK78XUMWmZB/Gaq54fRC9bqYsadOyY0VY= -github.com/aws/aws-sdk-go-v2/service/kms v1.35.4 h1:mG1MH6yPwT5gNEeBrhig3FHc4mK0QaZOXsmQUbphP6Y= -github.com/aws/aws-sdk-go-v2/service/kms v1.35.4/go.mod h1:A5CS0VRmxxj2YKYLCY08l/Zzbd01m6JZn0WzxgT1OCA= +github.com/aws/aws-sdk-go-v2/service/kms v1.35.5 h1:XUomV7SiclZl1QuXORdGcfFqHxEHET7rmNGtxTfNB+M= +github.com/aws/aws-sdk-go-v2/service/kms v1.35.5/go.mod h1:A5CS0VRmxxj2YKYLCY08l/Zzbd01m6JZn0WzxgT1OCA= github.com/aws/aws-sdk-go-v2/service/lakeformation v1.35.4 h1:KIYVcbLdEVB8L8NYG3xvSOqSnCRCORiYDMrI0cHj/T0= github.com/aws/aws-sdk-go-v2/service/lakeformation v1.35.4/go.mod h1:rc53HT3ic2CMOoxHrew0RLSTlGG69MbGTlhDV/zEvtc= -github.com/aws/aws-sdk-go-v2/service/lambda v1.58.0 h1:wOEkZI80JvZg4ir8Jlq/YyzEbLzb2SDkMItBUy6FD10= -github.com/aws/aws-sdk-go-v2/service/lambda v1.58.0/go.mod h1:19OJBUjzuycsyPiTi8Gxx17XJjsF9Ck/cQeDGvsiics= +github.com/aws/aws-sdk-go-v2/service/lambda v1.58.1 h1:AfTND9lcZ0i4QV0LwgiwonDbWm8YPr4iYJ28n/x+FAo= +github.com/aws/aws-sdk-go-v2/service/lambda v1.58.1/go.mod h1:19OJBUjzuycsyPiTi8Gxx17XJjsF9Ck/cQeDGvsiics= github.com/aws/aws-sdk-go-v2/service/launchwizard v1.6.4 h1:fsrhaoid0qqlvv6LCOMQfmxvk1Jc4uTyYu44PBNR6/8= github.com/aws/aws-sdk-go-v2/service/launchwizard v1.6.4/go.mod h1:QDUizvXGb8lXdbkNk6xsoDFjsPZomf5GU+TZlN45AVY= github.com/aws/aws-sdk-go-v2/service/lexmodelbuildingservice v1.26.4 h1:FzyfF9/Mpyz1MA0PeGM+vfc6gA7O8rGZ/kjByXYIazw= @@ -360,8 +360,8 @@ github.com/aws/aws-sdk-go-v2/service/mq v1.25.4 h1:UgMMxrhKx5jIEveuUZhmrkPYSGE0/ github.com/aws/aws-sdk-go-v2/service/mq v1.25.4/go.mod h1:Ybs/4mXgvtirfngZ4zpwLg2b3kjEN6D0MqLNoz5Q8V0= github.com/aws/aws-sdk-go-v2/service/mwaa v1.29.5 h1:RYt3Km7QVxs7b51FErHix4qhjI2RP7xjoG2BoxVTXaI= github.com/aws/aws-sdk-go-v2/service/mwaa v1.29.5/go.mod h1:RXA2l8NSnvZ6I4mP2gZxkMJuGDqE/fOTDQP0an3zFGU= -github.com/aws/aws-sdk-go-v2/service/neptune v1.33.4 h1:JmNfRNHnneLWLwKte6rBhV/WHvc5KPr52zGjefOBsHQ= -github.com/aws/aws-sdk-go-v2/service/neptune v1.33.4/go.mod h1:80/Yg9ovhmMth488NHpnPIp4l6Rw4+9+CoHrjuPxlyE= +github.com/aws/aws-sdk-go-v2/service/neptune v1.33.5 h1:lY0ZKbLG11a/vT8mgP+CDvGWFmsqC99o5u8fGY6DEV4= +github.com/aws/aws-sdk-go-v2/service/neptune v1.33.5/go.mod h1:80/Yg9ovhmMth488NHpnPIp4l6Rw4+9+CoHrjuPxlyE= github.com/aws/aws-sdk-go-v2/service/neptunegraph v1.11.1 h1:Gk7iJhJQEwqldrKpMBhBCaWnxji78/GKeBjCJ9E0ve0= github.com/aws/aws-sdk-go-v2/service/neptunegraph v1.11.1/go.mod h1:hnsmCvIWzyUk2RdWVSWnoHLwoKOQZToC9NoYsMagT3U= github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.41.1 h1:e1HnAPUIGkM1Eu4A5o83VQOp0MqWcW1BQXljHf8jCww= @@ -370,16 +370,16 @@ github.com/aws/aws-sdk-go-v2/service/networkmanager v1.29.4 h1:5LMCceliYKB9m3n2y github.com/aws/aws-sdk-go-v2/service/networkmanager v1.29.4/go.mod h1:cgdt9gLLpMm3ft6/MNTDmZ0pKPJa/sOPFkuWkyRQ9VY= github.com/aws/aws-sdk-go-v2/service/networkmonitor v1.5.4 h1:u/vDkh3lVqFHavOO2ujv5tJ3pdAwa88eJL6zxu0uR8Q= github.com/aws/aws-sdk-go-v2/service/networkmonitor v1.5.4/go.mod h1:kLZ+wCSQ04+zCjbymFTlNmlB78Mxi7dORmfbeChB7CY= -github.com/aws/aws-sdk-go-v2/service/oam v1.13.5 h1:51VYR5C0+/QEUrFURnwIGvT1eyiaKwnfQCoXVMRKtmg= -github.com/aws/aws-sdk-go-v2/service/oam v1.13.5/go.mod h1:dwn0suVbD6cdXDZQsEr5iYf4dhxDVr5wEAKSiCLSSQ8= -github.com/aws/aws-sdk-go-v2/service/opensearch v1.39.3 h1:EoXdh45m+CNUmP1tRFz+SD78qvsR4i5u7bFnMljgRV0= -github.com/aws/aws-sdk-go-v2/service/opensearch v1.39.3/go.mod h1:dt1En8oUmuPUz5AZjWi+fBeekG3O8WejKi1wgoafwNk= -github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.14.0 h1:gtYLTC9+xSRX0TKEEz1rYGx16P8f0LInx4O7j178WNo= -github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.14.0/go.mod h1:pQOhum5PBwXCSspA6bT4EZLhpawWF2aHTToUu/5vIBg= +github.com/aws/aws-sdk-go-v2/service/oam v1.13.6 h1:rY54ZNwelycmiSQ25kfJhJ+bH3EHFIkF0zGY370vya8= +github.com/aws/aws-sdk-go-v2/service/oam v1.13.6/go.mod h1:dwn0suVbD6cdXDZQsEr5iYf4dhxDVr5wEAKSiCLSSQ8= +github.com/aws/aws-sdk-go-v2/service/opensearch v1.39.4 h1:vjysXeUltnIdluOK7/zPxxM4FKM0/SA1bUwHuGAEZU8= +github.com/aws/aws-sdk-go-v2/service/opensearch v1.39.4/go.mod h1:dt1En8oUmuPUz5AZjWi+fBeekG3O8WejKi1wgoafwNk= +github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.14.1 h1:a7iXf42viBFboPZD+/Kz/318yu/kWXNMwHC9j9pjis0= +github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.14.1/go.mod h1:pQOhum5PBwXCSspA6bT4EZLhpawWF2aHTToUu/5vIBg= github.com/aws/aws-sdk-go-v2/service/opsworks v1.24.4 h1:2bzNoZZWJ8+lRIBfY/FSOdcRIfMYAae9DFwcYxIwD5w= github.com/aws/aws-sdk-go-v2/service/opsworks v1.24.4/go.mod h1:yjoW6GYtJ1dRtOth68jEL3gYgSXVJicc2Ljcjxt3s/4= -github.com/aws/aws-sdk-go-v2/service/organizations v1.30.3 h1:gYS53GRIaSesL04BlZA9MEBzDlENidWR/JDBXhZonFs= -github.com/aws/aws-sdk-go-v2/service/organizations v1.30.3/go.mod h1:qdJX3WZbuAan5dXCoinnJjuY1QERCpv3glXeI3+wbeA= +github.com/aws/aws-sdk-go-v2/service/organizations v1.31.0 h1:D+q5pWmlcuqISBcLIeeYFukvl33JgQr/1lfbQnrIvVk= +github.com/aws/aws-sdk-go-v2/service/organizations v1.31.0/go.mod h1:qdJX3WZbuAan5dXCoinnJjuY1QERCpv3glXeI3+wbeA= github.com/aws/aws-sdk-go-v2/service/osis v1.12.4 h1:D1+hSpaeBVydbHUc86o1Yv3EhOcM0CRazxOokfpC33g= github.com/aws/aws-sdk-go-v2/service/osis v1.12.4/go.mod h1:0MthgSZ1NbnrgPnmzoaW3gcEsrDIHwlM+sTD40C+2eQ= github.com/aws/aws-sdk-go-v2/service/outposts v1.42.1 h1:T6kre1roWWt69vi4zH/YHHBeNxyVKi7DRcvsAFqRcv4= @@ -396,18 +396,18 @@ github.com/aws/aws-sdk-go-v2/service/polly v1.42.4 h1:aFD49SdTdSj5Mqijyw9g3pkX8B github.com/aws/aws-sdk-go-v2/service/polly v1.42.4/go.mod h1:EBQG16GyTvSu5WRp7XF86TgUGZMxEemXRodXxoKwzhU= github.com/aws/aws-sdk-go-v2/service/pricing v1.30.4 h1:FTLZaannrPDlvD4/ZxL2fwUWh3uGSgVosJ58cCQ07fE= github.com/aws/aws-sdk-go-v2/service/pricing v1.30.4/go.mod h1:jpELsHJrG2Gy/Pc0FHd1s4PDQ7DdsyVLJXpjZz9F8y4= -github.com/aws/aws-sdk-go-v2/service/qbusiness v1.10.3 h1:W+ncQSLUP1MocKi2GMSbsdLT5HWkmC/P/2wuehcmIqY= -github.com/aws/aws-sdk-go-v2/service/qbusiness v1.10.3/go.mod h1:Pv7rG+8I3W5+tH3J9sUSTr1YSyppDfp6xpW4n39eUxM= +github.com/aws/aws-sdk-go-v2/service/qbusiness v1.11.0 h1:/7Rx0N5FBoj8hd4R8DsaPvSWFQMWYo0JYkzfLvXcm3c= +github.com/aws/aws-sdk-go-v2/service/qbusiness v1.11.0/go.mod h1:Pv7rG+8I3W5+tH3J9sUSTr1YSyppDfp6xpW4n39eUxM= github.com/aws/aws-sdk-go-v2/service/qldb v1.23.4 h1:71m+NvWv63AnrzLpLnLwKs6OlpeJ0g/y+IYInc/V3QI= github.com/aws/aws-sdk-go-v2/service/qldb v1.23.4/go.mod h1:E6pzF6rAtAfRz2IE1hRho83lQx17IUQGLCrfgS2+s6U= -github.com/aws/aws-sdk-go-v2/service/ram v1.27.4 h1:/Dq1qVV1GzFvjs5Lz9kE1d03XeiEI+JFzqHtwmnSAx8= -github.com/aws/aws-sdk-go-v2/service/ram v1.27.4/go.mod h1:TWkXQo8ew7pyPtytLlHIL8meywY2lOJk6QdC8zmBD/8= -github.com/aws/aws-sdk-go-v2/service/rbin v1.18.4 h1:oUAgSPugpGNhLsVruLMq7FBHq5DgQzokIh1xfgGB3Ro= -github.com/aws/aws-sdk-go-v2/service/rbin v1.18.4/go.mod h1:4FFWPDJJuUu9HeE5zO2DtmITnOnXScImuhEaQlpPWEY= -github.com/aws/aws-sdk-go-v2/service/rds v1.82.1 h1:4s+9AtQQGB5n0xMm0xRbIQOFoi6rrggMlFt8WwHcDvs= -github.com/aws/aws-sdk-go-v2/service/rds v1.82.1/go.mod h1:hfUZhydujCniydsJdzZ9bwzX6nUvbfnhhYQeFNREC2I= -github.com/aws/aws-sdk-go-v2/service/redshift v1.46.5 h1:2+q5D3ETSf+iikyY3y9wAcgeBl7OhwMr6sGNsFPSuiw= -github.com/aws/aws-sdk-go-v2/service/redshift v1.46.5/go.mod h1:ewgM3ybBFAedvhnzP5MqVUUopusCWk0BpacCQKZNge4= +github.com/aws/aws-sdk-go-v2/service/ram v1.27.5 h1:AEH+gEiuFOA4nOh+oWf9xmuddaHWQdGoeuYojaULOYQ= +github.com/aws/aws-sdk-go-v2/service/ram v1.27.5/go.mod h1:TWkXQo8ew7pyPtytLlHIL8meywY2lOJk6QdC8zmBD/8= +github.com/aws/aws-sdk-go-v2/service/rbin v1.18.5 h1:wnHzxJFWkNS+AjCcXlN4pFItrAS+tiNxuHJlIRdgJmk= +github.com/aws/aws-sdk-go-v2/service/rbin v1.18.5/go.mod h1:4FFWPDJJuUu9HeE5zO2DtmITnOnXScImuhEaQlpPWEY= +github.com/aws/aws-sdk-go-v2/service/rds v1.82.2 h1:kO/fQcueYZvuL5kPzTPQ503cKZj8jyBNg1MlnIqpFPg= +github.com/aws/aws-sdk-go-v2/service/rds v1.82.2/go.mod h1:hfUZhydujCniydsJdzZ9bwzX6nUvbfnhhYQeFNREC2I= +github.com/aws/aws-sdk-go-v2/service/redshift v1.46.6 h1:Fgq3jMHNYudXTvvqsGlmVDIl4CBYhkE8QvFEwqQXO9k= +github.com/aws/aws-sdk-go-v2/service/redshift v1.46.6/go.mod h1:ewgM3ybBFAedvhnzP5MqVUUopusCWk0BpacCQKZNge4= github.com/aws/aws-sdk-go-v2/service/redshiftdata v1.27.4 h1:3xIX2dSZqT4jw56itaL+pE/Byf7XNN27zMAWN1wN6QU= github.com/aws/aws-sdk-go-v2/service/redshiftdata v1.27.4/go.mod h1:C4qf7cVMEVAzocVdhne+xnrSNHCqBlqiDSqb95MEkls= github.com/aws/aws-sdk-go-v2/service/redshiftserverless v1.21.1 h1:LWLva+4Mvp8DfrcsbZs5OIi3eGKSKVeFCFF/7Fy/Yjk= @@ -418,14 +418,14 @@ github.com/aws/aws-sdk-go-v2/service/resiliencehub v1.24.1 h1:WqPlt/aLrtiy1pBiOx github.com/aws/aws-sdk-go-v2/service/resiliencehub v1.24.1/go.mod h1:zwLavE1e9LVWL7ipQnKkEwiMdoy7RsDIpKDxKrcXcZc= github.com/aws/aws-sdk-go-v2/service/resourceexplorer2 v1.12.4 h1:4WriI54AJNcwZ5/1Pv9FW/RA7ZSSiDyuKcB5Uhjv5w8= github.com/aws/aws-sdk-go-v2/service/resourceexplorer2 v1.12.4/go.mod h1:gTYtb5NQB1odCQC+4tJKsdqEIE8YK0UxIqeDGkGr1l8= -github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.24.4 h1:Y5HXLHlU6hAnXzvm9mdr3pxYKG5srAcJiJ5Xs9xv2VQ= -github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.24.4/go.mod h1:D9l849Ai7JGtu9/Bo2AG4PnNGrsUbUbCkL+DnS1xY+k= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.4 h1:ZNrtr5E45PPgq+sjGpX3FtzIFmhmeo0qzl+rtBECTgE= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.4/go.mod h1:XDlN4IONFWl3b9HSVfxYdFtUcZ7lofcrxU8mpJNGqJw= +github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.24.5 h1:H4JOfS7eP3HZdwlAbPih2/qPzCutHFf/zPiKYhuC7zU= +github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.24.5/go.mod h1:D9l849Ai7JGtu9/Bo2AG4PnNGrsUbUbCkL+DnS1xY+k= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.5 h1:b5Brlxqsj9tti4jEdgOZWKB4anmuu25XG/r1PkxoQt0= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.5/go.mod h1:XDlN4IONFWl3b9HSVfxYdFtUcZ7lofcrxU8mpJNGqJw= github.com/aws/aws-sdk-go-v2/service/rolesanywhere v1.14.1 h1:MbpIIxlZLEvaVBCs5Hz1S9WRrMLflJvs7weXfHb2j24= github.com/aws/aws-sdk-go-v2/service/rolesanywhere v1.14.1/go.mod h1:kRM2fTpo6FW8i7nbrp3naDtNdAhynDHGjE2ZVkUVnqg= -github.com/aws/aws-sdk-go-v2/service/route53 v1.42.4 h1:GXV/Yuwu/hizxIXr3EAqDJdRdjya1i0kINoUdBBHdbQ= -github.com/aws/aws-sdk-go-v2/service/route53 v1.42.4/go.mod h1:QN7tFo/W8QjLCR6aPZqMZKaVQJiAp95r/g78x1LWtkA= +github.com/aws/aws-sdk-go-v2/service/route53 v1.43.0 h1:xtp7jye7KhWu4ptBs5yh1Vep0vLAGSNGmArOUp997DU= +github.com/aws/aws-sdk-go-v2/service/route53 v1.43.0/go.mod h1:QN7tFo/W8QjLCR6aPZqMZKaVQJiAp95r/g78x1LWtkA= github.com/aws/aws-sdk-go-v2/service/route53domains v1.25.4 h1:YCHWMRbaIyNUzhsFXSxW2aJ00WV6FUGzt2OtyE7RMyw= github.com/aws/aws-sdk-go-v2/service/route53domains v1.25.4/go.mod h1:WUxTIZlbeHcwisUsauu2ra7O2+s11PM8xRLffHzc1q4= github.com/aws/aws-sdk-go-v2/service/route53profiles v1.2.4 h1:pUDTeq2jOs5+oAIzvCIQH/fz8OM8JBxhUDckji5y590= @@ -434,14 +434,14 @@ github.com/aws/aws-sdk-go-v2/service/route53recoverycontrolconfig v1.23.4 h1:Sq4 github.com/aws/aws-sdk-go-v2/service/route53recoverycontrolconfig v1.23.4/go.mod h1:1Kde+Ct5pBapu9i7xzb8p4ktqOeB0wwVlmqgs+ifTAE= github.com/aws/aws-sdk-go-v2/service/route53recoveryreadiness v1.19.4 h1:25V/wRbTT5E0EPAclAM9qcwTrn8l687qqdeeCmee5eE= github.com/aws/aws-sdk-go-v2/service/route53recoveryreadiness v1.19.4/go.mod h1:f6aal+/ZIeGgPS96j0kkxLQvDPTvDGUCM2weyXvc44A= -github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.4 h1:YuGLHnF+el3VbFDDMGjtEblJSx03uG9VelRShPXWu28= -github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.4/go.mod h1:nYjNCxhMB3EnfqEZFTqFJ/SmT28TrobM4kx50RuI/ng= +github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.5 h1:nZG8Cwj/jTpZn/e+t4iHVfML8LTKyP6jp2/aGAq0WNk= +github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.5/go.mod h1:nYjNCxhMB3EnfqEZFTqFJ/SmT28TrobM4kx50RuI/ng= github.com/aws/aws-sdk-go-v2/service/rum v1.19.4 h1:FOIxk29IdEuDQ/OExisyB/j2Gs27+rErI7F2cWQOLv8= github.com/aws/aws-sdk-go-v2/service/rum v1.19.4/go.mod h1:bdprjbQtxZ1HgvXeDfVzw17CerK0+YCRlDiKGLXIsgU= -github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0 h1:2QXGJvG19QwqXUvgcdoCOZPyLuvZf8LiXPCN4P53TdI= -github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI= -github.com/aws/aws-sdk-go-v2/service/s3control v1.46.4 h1:w8i47heyQSv0gNy34TuW2/RJgizvFWUBi2tD6d/m5Ik= -github.com/aws/aws-sdk-go-v2/service/s3control v1.46.4/go.mod h1:X0UNddpS5rWWrPKEMGGnVPqeFiaHZWs276CrCLiCTQA= +github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1 h1:mx2ucgtv+MWzJesJY9Ig/8AFHgoE5FwLXwUVgW/FGdI= +github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI= +github.com/aws/aws-sdk-go-v2/service/s3control v1.46.5 h1:qVyCc8Fx/+BsNNkTOGqwD5Z74bLOXwqhium8RWu5P5g= +github.com/aws/aws-sdk-go-v2/service/s3control v1.46.5/go.mod h1:X0UNddpS5rWWrPKEMGGnVPqeFiaHZWs276CrCLiCTQA= github.com/aws/aws-sdk-go-v2/service/s3outposts v1.26.4 h1:hBa2bDiI88EpC+TzuUvEIZhFkkL2v/zHGBicA4yolVE= github.com/aws/aws-sdk-go-v2/service/s3outposts v1.26.4/go.mod h1:VrGFzeizVWk1GfmZVNj3Dctn1dxkyFIRQxQ3lnnFsG4= github.com/aws/aws-sdk-go-v2/service/sagemaker v1.154.0 h1:NDEbY45I7YFiSAW055YdE6fFoxmudl+jK/8qe//Bduk= @@ -450,8 +450,8 @@ github.com/aws/aws-sdk-go-v2/service/scheduler v1.10.4 h1:vh2sqeiHm0L9aatuSTSbo/ github.com/aws/aws-sdk-go-v2/service/scheduler v1.10.4/go.mod h1:m014BftQaUEsNk/6VMkqSj16cmUwAvgXHejhGDC46Jc= github.com/aws/aws-sdk-go-v2/service/schemas v1.26.4 h1:QwtdnU+lr5vvHqnbJ/qGXvAPwdLwYGL9mn2kbDOr+4E= github.com/aws/aws-sdk-go-v2/service/schemas v1.26.4/go.mod h1:f6adT2VvyhA+haZ1jJXGYaZyHIx55jrYcN7oRV6myRg= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.5 h1:UDXu9dqpCZYonj7poM4kFISjzTdWI0v3WUusM+w+Gfc= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.5/go.mod h1:5NPkI3RsTOhwz1CuG7VVSgJCm3CINKkoIaUbUZWQ67w= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.6 h1:3TZlWvCC813uhS1Z4fVTmBhg41OYUrgSlvXqIDDkurw= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.6/go.mod h1:5NPkI3RsTOhwz1CuG7VVSgJCm3CINKkoIaUbUZWQ67w= github.com/aws/aws-sdk-go-v2/service/securityhub v1.52.0 h1:FzO8SVzUET6wNc74bt/x8WkJXZoTrrdMyNcq2xXOhVM= github.com/aws/aws-sdk-go-v2/service/securityhub v1.52.0/go.mod h1:DSn4Os/A8w+uGnJI0LxL0+HFXKUsBKZNZLvtsE271H8= github.com/aws/aws-sdk-go-v2/service/securitylake v1.16.4 h1:8sFt3y2akVCYqKmOdElGFYT6fNHTMYWf8j/orE/T1PQ= @@ -462,26 +462,26 @@ github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.30.4 h1:i0J7/4cRSW1/tQsp9 github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.30.4/go.mod h1:PRd4P8yzjyCUfWIMmgiLS4/DgPfmjq76XoXOPGk/Cug= github.com/aws/aws-sdk-go-v2/service/servicecatalogappregistry v1.28.4 h1:BkZVxMM1eMCH/K+oilj/5DiYDKzcyUgPCbOsENflPlg= github.com/aws/aws-sdk-go-v2/service/servicecatalogappregistry v1.28.4/go.mod h1:h3aaCEFaMrY1+zUS2YCphaW2UZGTyZuWNNr7S4QEVno= -github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.4 h1:YEY+Y4Lf3TuFrw8keb8NZ5nsbo/YplxEgZWbqnDlq+Y= -github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.4/go.mod h1:5autx6GwAtQVv8S/qTwBKfxzAAwe8hOlzVuTtLdliVw= -github.com/aws/aws-sdk-go-v2/service/servicequotas v1.23.4 h1:d2hcQdhIWKhLfifd/FvgSs6gQvFke885SotzqvUf0Bw= -github.com/aws/aws-sdk-go-v2/service/servicequotas v1.23.4/go.mod h1:tMgth4UXYC4ExLwX/9STbRJCiP0vz3Ih3ei8iUHh76w= +github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.5 h1:z7nPig/pFU+TAAKouI51pCVQPEeQHZC2mZXSK+g0Av8= +github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.5/go.mod h1:5autx6GwAtQVv8S/qTwBKfxzAAwe8hOlzVuTtLdliVw= +github.com/aws/aws-sdk-go-v2/service/servicequotas v1.23.5 h1:8WnSXSla6Ot01IdiT2liXpWa7oWQniZx5zpNIljp8MY= +github.com/aws/aws-sdk-go-v2/service/servicequotas v1.23.5/go.mod h1:tMgth4UXYC4ExLwX/9STbRJCiP0vz3Ih3ei8iUHh76w= github.com/aws/aws-sdk-go-v2/service/ses v1.26.0 h1:k42jq8i0DbnPxr+URD58oZw/Esb93kzoSczfEYrPlw4= github.com/aws/aws-sdk-go-v2/service/ses v1.26.0/go.mod h1:6Ul/Ir8oOCsI3dFN0prULK9fvpxP+WTYmlHDkFzaAVA= github.com/aws/aws-sdk-go-v2/service/sesv2 v1.33.0 h1:xgp46CIfHVv0vj2+/NXZ5l5rNyuOt40JX/uOTo3f748= github.com/aws/aws-sdk-go-v2/service/sesv2 v1.33.0/go.mod h1:qVIFAGMTTDMumfHxKW8QoQJXvlY3hkfaxPONLHT3asY= -github.com/aws/aws-sdk-go-v2/service/sfn v1.30.1 h1:9nvLjqQWTrehdzgfdDuBMAbOcAwlolbhYE9htVVTPvM= -github.com/aws/aws-sdk-go-v2/service/sfn v1.30.1/go.mod h1:jIKXvGI0iFk5QXBW8FntPO/tqdmfC3OS0Z38twH9a08= +github.com/aws/aws-sdk-go-v2/service/sfn v1.30.2 h1:FO9wG1mXg1tb8iizrN5+t5NR2Tu5Mo+KJ7u2TlhWxPI= +github.com/aws/aws-sdk-go-v2/service/sfn v1.30.2/go.mod h1:jIKXvGI0iFk5QXBW8FntPO/tqdmfC3OS0Z38twH9a08= github.com/aws/aws-sdk-go-v2/service/shield v1.27.4 h1:zIe0kKPu8+AaY61HaNbj/wQd8vqUk+9rgcRjBcYOv6M= github.com/aws/aws-sdk-go-v2/service/shield v1.27.4/go.mod h1:FNcYLPvoSlKrkSMkF1lLHCtm57w/144AkbL7Bk39u9o= github.com/aws/aws-sdk-go-v2/service/signer v1.24.4 h1:M45uI6Xs717kXTlX34aYi4izTtT0P+WFxgUF0drYJvI= github.com/aws/aws-sdk-go-v2/service/signer v1.24.4/go.mod h1:e2eA2NfmOL2k7BDY4d+qOideIxsR0mwMx/4uMAD/Or0= -github.com/aws/aws-sdk-go-v2/service/sns v1.31.4 h1:Bwb1nTBy6jrLJgSlI+jLt27rjyS1Kg030X5yWPnTecI= -github.com/aws/aws-sdk-go-v2/service/sns v1.31.4/go.mod h1:wDacBq+NshhM8KhdysbM4wRFxVyghyj7AAI+l8+o9f0= -github.com/aws/aws-sdk-go-v2/service/sqs v1.34.4 h1:FXPO72iKC5YmYNEANltl763bUj8A6qT20wx8Jwvxlsw= -github.com/aws/aws-sdk-go-v2/service/sqs v1.34.4/go.mod h1:7idt3XszF6sE9WPS1GqZRiDJOxw4oPtlRBXodWnCGjU= -github.com/aws/aws-sdk-go-v2/service/ssm v1.52.5 h1:eY1n+pyBbgqRBRnpVUg0QguAGMWVLQp2n+SfjjOJuQI= -github.com/aws/aws-sdk-go-v2/service/ssm v1.52.5/go.mod h1:Bw2YSeqq/I4VyVs9JSfdT9ArqyAbQkJEwj13AVm0heg= +github.com/aws/aws-sdk-go-v2/service/sns v1.31.5 h1:q8R1hxwOHE4e6TInafToa8AHTLQpJrxWXYk7GINJoyw= +github.com/aws/aws-sdk-go-v2/service/sns v1.31.5/go.mod h1:wDacBq+NshhM8KhdysbM4wRFxVyghyj7AAI+l8+o9f0= +github.com/aws/aws-sdk-go-v2/service/sqs v1.34.5 h1:HYyVDOC2/PIg+3oBX1q0wtDU5kONki6lrgIG0afrBkY= +github.com/aws/aws-sdk-go-v2/service/sqs v1.34.5/go.mod h1:7idt3XszF6sE9WPS1GqZRiDJOxw4oPtlRBXodWnCGjU= +github.com/aws/aws-sdk-go-v2/service/ssm v1.52.6 h1:uvd3OF/3jt2csfs2xZ64NIOukDY/YJYZiHqT9vP3Mhg= +github.com/aws/aws-sdk-go-v2/service/ssm v1.52.6/go.mod h1:Bw2YSeqq/I4VyVs9JSfdT9ArqyAbQkJEwj13AVm0heg= github.com/aws/aws-sdk-go-v2/service/ssmcontacts v1.24.4 h1:VJC0D1rgwZEA7sI6B4e41TBdjKmAb/IiLKB5LsiHVw8= github.com/aws/aws-sdk-go-v2/service/ssmcontacts v1.24.4/go.mod h1:3gYJPqrnwX7Tp5dz1J/ggR6iPrAVlC27mXQ8DLXsu3E= github.com/aws/aws-sdk-go-v2/service/ssmincidents v1.32.4 h1:9F1Hm3ZDFiLdVHztKWmmrb8LOaXn0HtY9YyUuPmoCmU= @@ -496,12 +496,12 @@ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 h1:SKvPgvdvmiTWoi0GAJ7AsJfO github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5/go.mod h1:20sz31hv/WsPa3HhU3hfrIet2kxM4Pe0r20eBZ20Tac= github.com/aws/aws-sdk-go-v2/service/storagegateway v1.31.4 h1:1jVRBgclr7cpeLiIs348kKXobvVjdlbHfVYM40Y/Bv0= github.com/aws/aws-sdk-go-v2/service/storagegateway v1.31.4/go.mod h1:WmqcvGd10eSVYIjcQYmBmk/tcIoCaxGtUHA1J1hSZvQ= -github.com/aws/aws-sdk-go-v2/service/sts v1.30.4 h1:iAckBT2OeEK/kBDyN/jDtpEExhjeeA/Im2q4X0rJZT8= -github.com/aws/aws-sdk-go-v2/service/sts v1.30.4/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0= -github.com/aws/aws-sdk-go-v2/service/swf v1.25.4 h1:TZ8i30MwDZybhMTTtSR6MfDRmq6IC1g0Yd+uYIu+U+M= -github.com/aws/aws-sdk-go-v2/service/swf v1.25.4/go.mod h1:friMlcMGTLFKOYtghIFILFGt/qXHugU3LVyb+ZZoUto= -github.com/aws/aws-sdk-go-v2/service/synthetics v1.26.4 h1:fLZX6D2oTLqHqtq8D7d2zXhTB47c62Vb3BpFD+bdX8I= -github.com/aws/aws-sdk-go-v2/service/synthetics v1.26.4/go.mod h1:7e8prP5gp4ppMRhWyxI6IS6HcdSYKUeCMSP0lCvc2Mc= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 h1:OMsEmCyz2i89XwRwPouAJvhj81wINh+4UK+k/0Yo/q8= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.5/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0= +github.com/aws/aws-sdk-go-v2/service/swf v1.25.5 h1:9CG8ZuU+9uGsQwlQ4z+R2VbWzahAVGr3aXMAg5EkMS0= +github.com/aws/aws-sdk-go-v2/service/swf v1.25.5/go.mod h1:friMlcMGTLFKOYtghIFILFGt/qXHugU3LVyb+ZZoUto= +github.com/aws/aws-sdk-go-v2/service/synthetics v1.26.5 h1:sQTnsqwZHFz+6Q1lNj30/xXIJg1OhgPLRRNVYY4w3NU= +github.com/aws/aws-sdk-go-v2/service/synthetics v1.26.5/go.mod h1:7e8prP5gp4ppMRhWyxI6IS6HcdSYKUeCMSP0lCvc2Mc= github.com/aws/aws-sdk-go-v2/service/timestreaminfluxdb v1.2.4 h1:fOMpu3sHr6ogDeIGA9RtyUJYhk8zftvRA5caPwSUy2c= github.com/aws/aws-sdk-go-v2/service/timestreaminfluxdb v1.2.4/go.mod h1:B90eVR/hml+ZWjDbFT6CuGWhDgDSDMUxdZXAhj7EdZM= github.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.27.4 h1:glNNLfVzW88jz83oPZ4gXndJL7VDDANHowCoJU673OU= @@ -528,8 +528,8 @@ github.com/aws/aws-sdk-go-v2/service/workspaces v1.45.1 h1:O2IZDp8Y+6ywBfIyBGMDl github.com/aws/aws-sdk-go-v2/service/workspaces v1.45.1/go.mod h1:NpECdAtx0GNmx6ANGHmgDxqV6LQq59cxs7lY7vUiLUY= github.com/aws/aws-sdk-go-v2/service/workspacesweb v1.21.4 h1:jzF1yA5OeQuHzuPgdNiQ7no4wWGJ7hnYlPelVloFrXg= github.com/aws/aws-sdk-go-v2/service/workspacesweb v1.21.4/go.mod h1:pS1ioSPDOAQ3c6BmkVxpVOaloLm6NbJ9Yvz5S3R+gP4= -github.com/aws/aws-sdk-go-v2/service/xray v1.27.4 h1:ybfrkoywYgvJj4RYUsQWdBlIXwa/ecmtybnEnYPgph8= -github.com/aws/aws-sdk-go-v2/service/xray v1.27.4/go.mod h1:dYbiZw60hQKk9dErFQ7t+OF+6qq6Vk9oazdnZxZhZSc= +github.com/aws/aws-sdk-go-v2/service/xray v1.27.5 h1:TYTsfyO/gub8V76TbPFURGuQP5FN5qNrVs9SNMuAPQM= +github.com/aws/aws-sdk-go-v2/service/xray v1.27.5/go.mod h1:dYbiZw60hQKk9dErFQ7t+OF+6qq6Vk9oazdnZxZhZSc= github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4= github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/beevik/etree v1.4.1 h1:PmQJDDYahBGNKDcpdX8uPy1xRCwoCGVUiW669MEirVI=