diff --git a/openshift-tests/ccm-aws-tests/e2e/aws/helper.go b/openshift-tests/ccm-aws-tests/e2e/aws/helper.go index cbb84fb74..7c5d87571 100644 --- a/openshift-tests/ccm-aws-tests/e2e/aws/helper.go +++ b/openshift-tests/ccm-aws-tests/e2e/aws/helper.go @@ -61,7 +61,7 @@ func createAWSClientLoadBalancer(ctx context.Context) (*elbv2.Client, error) { o.Retryer = customRetryer // Use regional public endpoints to prevent malformed or unreachable // (from test binary, which usually runs outside cluster's VPC) endpoints. - o.BaseEndpoint = aws.String(fmt.Sprintf("https://elasticloadbalancing.%s.amazonaws.com", cfg.Region)) + o.BaseEndpoint = aws.String(fmt.Sprintf("https://elasticloadbalancing.%s.%s", cfg.Region, dnsSuffixForRegion(cfg.Region))) }), nil } @@ -139,7 +139,7 @@ func createAWSClientEC2(ctx context.Context) (*ec2.Client, error) { return ec2.NewFromConfig(cfg, func(o *ec2.Options) { // Use regional public endpoints to prevent malformed or unreachable // (from test binary, which usually runs outside cluster's VPC) endpoints. - o.BaseEndpoint = aws.String(fmt.Sprintf("https://ec2.%s.amazonaws.com", cfg.Region)) + o.BaseEndpoint = aws.String(fmt.Sprintf("https://ec2.%s.%s", cfg.Region, dnsSuffixForRegion(cfg.Region))) }), nil } @@ -197,6 +197,29 @@ func securityGroupExists(ctx context.Context, ec2Client *ec2.Client, sgID string return true, nil } +// dnsSuffixForRegion returns the DNS suffix for the AWS partition that the given region resides in. +// This is needed when constructing explicit public regional endpoints so that non-standard partitions +// like EUSC (.amazonaws.eu) are handled correctly instead of assuming suffix .amazonaws.com. +// Reference: https://github.com/aws/aws-sdk-go-v2/blob/main/internal/endpoints/awsrulesfn/partitions.go +func dnsSuffixForRegion(region string) string { + switch { + case strings.HasPrefix(region, "cn-"): + return "amazonaws.com.cn" + case strings.HasPrefix(region, "eusc-"): + return "amazonaws.eu" + case strings.HasPrefix(region, "us-iso-"): + return "c2s.ic.gov" + case strings.HasPrefix(region, "us-isob-"): + return "sc2s.sgov.gov" + case strings.HasPrefix(region, "eu-isoe-"): + return "cloud.adc-e.uk" + case strings.HasPrefix(region, "us-isof-"): + return "csp.hci.ic.gov" + default: + return "amazonaws.com" + } +} + // ec2IsNotFoundError checks if an error is an EC2 "not found" error. func ec2IsNotFoundError(err error) bool { if err == nil {