diff --git a/go.mod b/go.mod index 9e434946..bcf26ef6 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,8 @@ go 1.22.5 require ( github.com/aws/amazon-vpc-cni-k8s v1.18.3 github.com/aws/aws-sdk-go v1.55.5 + github.com/aws/aws-sdk-go-v2/config v1.29.2 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.0 github.com/go-logr/logr v1.4.2 github.com/go-logr/zapr v1.3.0 github.com/golang/mock v1.6.0 @@ -26,6 +28,18 @@ require ( ) require ( + github.com/aws/aws-sdk-go-v2 v1.34.0 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.55 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.25 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.10 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.24.12 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.11 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.10 // indirect + github.com/aws/smithy-go v1.22.2 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect diff --git a/go.sum b/go.sum index db26085d..b88c4fc6 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,34 @@ github.com/aws/amazon-vpc-cni-k8s v1.18.3 h1:qdkbo5yffFXg7FK/pmCHlxzXmEAFn+vDzzi github.com/aws/amazon-vpc-cni-k8s v1.18.3/go.mod h1:Xy7pF9qmE5mdiEkfgzr2HJNJmH3ARxKuOTWoxC1VO64= github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go-v2 v1.34.0 h1:9iyL+cjifckRGEVpRKZP3eIxVlL06Qk1Tk13vreaVQU= +github.com/aws/aws-sdk-go-v2 v1.34.0/go.mod h1:JgstGg0JjWU1KpVJjD5H0y0yyAIpSdKEq556EI6yOOM= +github.com/aws/aws-sdk-go-v2/config v1.29.2 h1:JuIxOEPcSKpMB0J+khMjznG9LIhIBdmqNiEcPclnwqc= +github.com/aws/aws-sdk-go-v2/config v1.29.2/go.mod h1:HktTHregOZwNSM/e7WTfVSu9RCX+3eOv+6ij27PtaYs= +github.com/aws/aws-sdk-go-v2/credentials v1.17.55 h1:CDhKnDEaGkLA5ZszV/qw5uwN5M8rbv9Cl0JRN+PRsaM= +github.com/aws/aws-sdk-go-v2/credentials v1.17.55/go.mod h1:kPD/vj+RB5MREDUky376+zdnjZpR+WgdBBvwrmnlmKE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.25 h1:kU7tmXNaJ07LsyN3BUgGqAmVmQtq0w6duVIHAKfp0/w= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.25/go.mod h1:OiC8+OiqrURb1wrwmr/UbOVLFSWEGxjinj5C299VQdo= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29 h1:Ej0Rf3GMv50Qh4G4852j2djtoDb7AzQ7MuQeFHa3D70= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29/go.mod h1:oeNTC7PwJNoM5AznVr23wxhLnuJv0ZDe5v7w0wqIs9M= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29 h1:6e8a71X+9GfghragVevC5bZqvATtc3mAMgxpSNbgzF0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29/go.mod h1:c4jkZiQ+BWpNqq7VtrxjwISrLrt/VvPq3XiopkUIolI= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 h1:Pg9URiobXy85kgFev3og2CuOZ8JZUBENF+dcgWBaYNk= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.0 h1:/kB9Uf7fgpYNLvwhAW0YiDSg7xQyxB6MbEYoC0yXtjs= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.0/go.mod h1:cRD0Fhzj0YD+uAh16NChQAv9/BB0S9x3YK9hLx1jb/k= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 h1:D4oz8/CzT9bAEYtVhSBmFj2dNOtaHOtMKc2vHBwYizA= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2/go.mod h1:Za3IHqTQ+yNcRHxu1OFucBh0ACZT4j4VQFF0BqpZcLY= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.10 h1:hN4yJBGswmFTOVYqmbz1GBs9ZMtQe8SrYxPwrkrlRv8= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.10/go.mod h1:TsxON4fEZXyrKY+D+3d2gSTyJkGORexIYab9PTf56DA= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.12 h1:kznaW4f81mNMlREkU9w3jUuJvU5g/KsqDV43ab7Rp6s= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.12/go.mod h1:bZy9r8e0/s0P7BSDHgMLXK2KvdyRRBIQ2blKlvLt0IU= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.11 h1:mUwIpAvILeKFnRx4h1dEgGEFGuV8KJ3pEScZWVFYuZA= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.11/go.mod h1:JDJtD+b8HNVv71axz8+S5492KM8wTzHRFpMKQbPlYxw= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.10 h1:g9d+TOsu3ac7SgmY2dUf1qMgu/uJVTlQ4VCbH6hRxSw= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.10/go.mod h1:WZfNmntu92HO44MVZAubQaz3qCuIdeOdog2sADfU6hU= +github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ= +github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= diff --git a/mocks/amazon-vcp-resource-controller-k8s/pkg/aws/ec2/api/mock_ec2_wrapper.go b/mocks/amazon-vcp-resource-controller-k8s/pkg/aws/ec2/api/mock_ec2_wrapper.go index f40d94c6..d0d20a6f 100644 --- a/mocks/amazon-vcp-resource-controller-k8s/pkg/aws/ec2/api/mock_ec2_wrapper.go +++ b/mocks/amazon-vcp-resource-controller-k8s/pkg/aws/ec2/api/mock_ec2_wrapper.go @@ -20,7 +20,8 @@ package mock_api import ( reflect "reflect" - ec2 "github.com/aws/aws-sdk-go/service/ec2" + ec2 "github.com/aws/aws-sdk-go-v2/service/ec2" + ec20 "github.com/aws/aws-sdk-go/service/ec2" gomock "github.com/golang/mock/gomock" ) @@ -48,10 +49,10 @@ func (m *MockEC2Wrapper) EXPECT() *MockEC2WrapperMockRecorder { } // AssignPrivateIPAddresses mocks base method. -func (m *MockEC2Wrapper) AssignPrivateIPAddresses(arg0 *ec2.AssignPrivateIpAddressesInput) (*ec2.AssignPrivateIpAddressesOutput, error) { +func (m *MockEC2Wrapper) AssignPrivateIPAddresses(arg0 *ec20.AssignPrivateIpAddressesInput) (*ec20.AssignPrivateIpAddressesOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AssignPrivateIPAddresses", arg0) - ret0, _ := ret[0].(*ec2.AssignPrivateIpAddressesOutput) + ret0, _ := ret[0].(*ec20.AssignPrivateIpAddressesOutput) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -63,10 +64,10 @@ func (mr *MockEC2WrapperMockRecorder) AssignPrivateIPAddresses(arg0 interface{}) } // AssociateTrunkInterface mocks base method. -func (m *MockEC2Wrapper) AssociateTrunkInterface(arg0 *ec2.AssociateTrunkInterfaceInput) (*ec2.AssociateTrunkInterfaceOutput, error) { +func (m *MockEC2Wrapper) AssociateTrunkInterface(arg0 *ec20.AssociateTrunkInterfaceInput) (*ec20.AssociateTrunkInterfaceOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AssociateTrunkInterface", arg0) - ret0, _ := ret[0].(*ec2.AssociateTrunkInterfaceOutput) + ret0, _ := ret[0].(*ec20.AssociateTrunkInterfaceOutput) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -78,10 +79,10 @@ func (mr *MockEC2WrapperMockRecorder) AssociateTrunkInterface(arg0 interface{}) } // AttachNetworkInterface mocks base method. -func (m *MockEC2Wrapper) AttachNetworkInterface(arg0 *ec2.AttachNetworkInterfaceInput) (*ec2.AttachNetworkInterfaceOutput, error) { +func (m *MockEC2Wrapper) AttachNetworkInterface(arg0 *ec20.AttachNetworkInterfaceInput) (*ec20.AttachNetworkInterfaceOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AttachNetworkInterface", arg0) - ret0, _ := ret[0].(*ec2.AttachNetworkInterfaceOutput) + ret0, _ := ret[0].(*ec20.AttachNetworkInterfaceOutput) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -93,10 +94,10 @@ func (mr *MockEC2WrapperMockRecorder) AttachNetworkInterface(arg0 interface{}) * } // CreateNetworkInterface mocks base method. -func (m *MockEC2Wrapper) CreateNetworkInterface(arg0 *ec2.CreateNetworkInterfaceInput) (*ec2.CreateNetworkInterfaceOutput, error) { +func (m *MockEC2Wrapper) CreateNetworkInterface(arg0 *ec20.CreateNetworkInterfaceInput) (*ec20.CreateNetworkInterfaceOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CreateNetworkInterface", arg0) - ret0, _ := ret[0].(*ec2.CreateNetworkInterfaceOutput) + ret0, _ := ret[0].(*ec20.CreateNetworkInterfaceOutput) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -108,10 +109,10 @@ func (mr *MockEC2WrapperMockRecorder) CreateNetworkInterface(arg0 interface{}) * } // CreateNetworkInterfacePermission mocks base method. -func (m *MockEC2Wrapper) CreateNetworkInterfacePermission(arg0 *ec2.CreateNetworkInterfacePermissionInput) (*ec2.CreateNetworkInterfacePermissionOutput, error) { +func (m *MockEC2Wrapper) CreateNetworkInterfacePermission(arg0 *ec20.CreateNetworkInterfacePermissionInput) (*ec20.CreateNetworkInterfacePermissionOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CreateNetworkInterfacePermission", arg0) - ret0, _ := ret[0].(*ec2.CreateNetworkInterfacePermissionOutput) + ret0, _ := ret[0].(*ec20.CreateNetworkInterfacePermissionOutput) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -123,10 +124,10 @@ func (mr *MockEC2WrapperMockRecorder) CreateNetworkInterfacePermission(arg0 inte } // CreateTags mocks base method. -func (m *MockEC2Wrapper) CreateTags(arg0 *ec2.CreateTagsInput) (*ec2.CreateTagsOutput, error) { +func (m *MockEC2Wrapper) CreateTags(arg0 *ec20.CreateTagsInput) (*ec20.CreateTagsOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "CreateTags", arg0) - ret0, _ := ret[0].(*ec2.CreateTagsOutput) + ret0, _ := ret[0].(*ec20.CreateTagsOutput) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -138,10 +139,10 @@ func (mr *MockEC2WrapperMockRecorder) CreateTags(arg0 interface{}) *gomock.Call } // DeleteNetworkInterface mocks base method. -func (m *MockEC2Wrapper) DeleteNetworkInterface(arg0 *ec2.DeleteNetworkInterfaceInput) (*ec2.DeleteNetworkInterfaceOutput, error) { +func (m *MockEC2Wrapper) DeleteNetworkInterface(arg0 *ec20.DeleteNetworkInterfaceInput) (*ec20.DeleteNetworkInterfaceOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DeleteNetworkInterface", arg0) - ret0, _ := ret[0].(*ec2.DeleteNetworkInterfaceOutput) + ret0, _ := ret[0].(*ec20.DeleteNetworkInterfaceOutput) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -168,10 +169,10 @@ func (mr *MockEC2WrapperMockRecorder) DescribeInstances(arg0 interface{}) *gomoc } // DescribeNetworkInterfaces mocks base method. -func (m *MockEC2Wrapper) DescribeNetworkInterfaces(arg0 *ec2.DescribeNetworkInterfacesInput) (*ec2.DescribeNetworkInterfacesOutput, error) { +func (m *MockEC2Wrapper) DescribeNetworkInterfaces(arg0 *ec20.DescribeNetworkInterfacesInput) (*ec20.DescribeNetworkInterfacesOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DescribeNetworkInterfaces", arg0) - ret0, _ := ret[0].(*ec2.DescribeNetworkInterfacesOutput) + ret0, _ := ret[0].(*ec20.DescribeNetworkInterfacesOutput) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -183,10 +184,10 @@ func (mr *MockEC2WrapperMockRecorder) DescribeNetworkInterfaces(arg0 interface{} } // DescribeSubnets mocks base method. -func (m *MockEC2Wrapper) DescribeSubnets(arg0 *ec2.DescribeSubnetsInput) (*ec2.DescribeSubnetsOutput, error) { +func (m *MockEC2Wrapper) DescribeSubnets(arg0 *ec20.DescribeSubnetsInput) (*ec20.DescribeSubnetsOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DescribeSubnets", arg0) - ret0, _ := ret[0].(*ec2.DescribeSubnetsOutput) + ret0, _ := ret[0].(*ec20.DescribeSubnetsOutput) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -198,10 +199,10 @@ func (mr *MockEC2WrapperMockRecorder) DescribeSubnets(arg0 interface{}) *gomock. } // DescribeTrunkInterfaceAssociations mocks base method. -func (m *MockEC2Wrapper) DescribeTrunkInterfaceAssociations(arg0 *ec2.DescribeTrunkInterfaceAssociationsInput) (*ec2.DescribeTrunkInterfaceAssociationsOutput, error) { +func (m *MockEC2Wrapper) DescribeTrunkInterfaceAssociations(arg0 *ec20.DescribeTrunkInterfaceAssociationsInput) (*ec20.DescribeTrunkInterfaceAssociationsOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DescribeTrunkInterfaceAssociations", arg0) - ret0, _ := ret[0].(*ec2.DescribeTrunkInterfaceAssociationsOutput) + ret0, _ := ret[0].(*ec20.DescribeTrunkInterfaceAssociationsOutput) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -213,10 +214,10 @@ func (mr *MockEC2WrapperMockRecorder) DescribeTrunkInterfaceAssociations(arg0 in } // DetachNetworkInterface mocks base method. -func (m *MockEC2Wrapper) DetachNetworkInterface(arg0 *ec2.DetachNetworkInterfaceInput) (*ec2.DetachNetworkInterfaceOutput, error) { +func (m *MockEC2Wrapper) DetachNetworkInterface(arg0 *ec20.DetachNetworkInterfaceInput) (*ec20.DetachNetworkInterfaceOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "DetachNetworkInterface", arg0) - ret0, _ := ret[0].(*ec2.DetachNetworkInterfaceOutput) + ret0, _ := ret[0].(*ec20.DetachNetworkInterfaceOutput) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -228,10 +229,10 @@ func (mr *MockEC2WrapperMockRecorder) DetachNetworkInterface(arg0 interface{}) * } // ModifyNetworkInterfaceAttribute mocks base method. -func (m *MockEC2Wrapper) ModifyNetworkInterfaceAttribute(arg0 *ec2.ModifyNetworkInterfaceAttributeInput) (*ec2.ModifyNetworkInterfaceAttributeOutput, error) { +func (m *MockEC2Wrapper) ModifyNetworkInterfaceAttribute(arg0 *ec20.ModifyNetworkInterfaceAttributeInput) (*ec20.ModifyNetworkInterfaceAttributeOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ModifyNetworkInterfaceAttribute", arg0) - ret0, _ := ret[0].(*ec2.ModifyNetworkInterfaceAttributeOutput) + ret0, _ := ret[0].(*ec20.ModifyNetworkInterfaceAttributeOutput) ret1, _ := ret[1].(error) return ret0, ret1 } @@ -243,10 +244,10 @@ func (mr *MockEC2WrapperMockRecorder) ModifyNetworkInterfaceAttribute(arg0 inter } // UnassignPrivateIPAddresses mocks base method. -func (m *MockEC2Wrapper) UnassignPrivateIPAddresses(arg0 *ec2.UnassignPrivateIpAddressesInput) (*ec2.UnassignPrivateIpAddressesOutput, error) { +func (m *MockEC2Wrapper) UnassignPrivateIPAddresses(arg0 *ec20.UnassignPrivateIpAddressesInput) (*ec20.UnassignPrivateIpAddressesOutput, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "UnassignPrivateIPAddresses", arg0) - ret0, _ := ret[0].(*ec2.UnassignPrivateIpAddressesOutput) + ret0, _ := ret[0].(*ec20.UnassignPrivateIpAddressesOutput) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/pkg/aws/ec2/api/wrapper.go b/pkg/aws/ec2/api/wrapper.go index 29e93156..284eef0a 100644 --- a/pkg/aws/ec2/api/wrapper.go +++ b/pkg/aws/ec2/api/wrapper.go @@ -14,6 +14,7 @@ package api import ( + "context" "fmt" "net/http" "strings" @@ -30,6 +31,11 @@ import ( "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/ec2" "github.com/aws/aws-sdk-go/service/sts" + + // Add v2 SDK imports + + configv2 "github.com/aws/aws-sdk-go-v2/config" + ec2v2 "github.com/aws/aws-sdk-go-v2/service/ec2" "github.com/go-logr/logr" "github.com/prometheus/client_golang/prometheus" "sigs.k8s.io/controller-runtime/pkg/metrics" @@ -43,7 +49,7 @@ const ( ) type EC2Wrapper interface { - DescribeInstances(input *ec2.DescribeInstancesInput) (*ec2.DescribeInstancesOutput, error) + DescribeInstances(input *ec2v2.DescribeInstancesInput) (*ec2v2.DescribeInstancesOutput, error) CreateNetworkInterface(input *ec2.CreateNetworkInterfaceInput) (*ec2.CreateNetworkInterfaceOutput, error) AttachNetworkInterface(input *ec2.AttachNetworkInterfaceInput) (*ec2.AttachNetworkInterfaceOutput, error) DetachNetworkInterface(input *ec2.DetachNetworkInterfaceInput) (*ec2.DetachNetworkInterfaceOutput, error) @@ -357,6 +363,7 @@ type ec2Wrapper struct { log logr.Logger instanceServiceClient *ec2.EC2 userServiceClient *ec2.EC2 + userServiceClientV2 *ec2v2.Client // Add v2 client accountID string } @@ -374,9 +381,17 @@ func NewEC2Wrapper(roleARN, clusterName, region string, instanceClientQPS, insta return nil, err } + // Initialize v2 SDK config + cfg, err := configv2.LoadDefaultConfig(context.Background(), + configv2.WithRegion(*instanceSession.Config.Region), + ) + if err != nil { + return nil, fmt.Errorf("unable to load SDK config, %v", err) + } + // Role ARN is passed, assume the role ARN to make EC2 API Calls if roleARN != "" { - // Create the instance service client with low QPS, it will be only used fro associate branch to trunk calls + // Create the instance service client with low QPS, it will be only used for associate branch to trunk calls log.Info("Creating INSTANCE service client with configured QPS", "QPS", instanceClientQPS, "Burst", instanceClientBurst) instanceServiceClient, err := ec2Wrapper.getInstanceServiceClient(instanceClientQPS, instanceClientBurst, instanceSession) @@ -393,6 +408,10 @@ func NewEC2Wrapper(roleARN, clusterName, region string, instanceClientQPS, insta return nil, err } ec2Wrapper.userServiceClient = userServiceClient + + // Initialize v2 client with assumed role + // TODO: Add proper credentials provider with assumed role for v2 client + ec2Wrapper.userServiceClientV2 = ec2v2.NewFromConfig(cfg) } else { // Role ARN is not provided, assuming that instance service client is allowlisted for ENI branching and use // the instance service client as the user service client with higher QPS. @@ -404,6 +423,9 @@ func NewEC2Wrapper(roleARN, clusterName, region string, instanceClientQPS, insta } ec2Wrapper.instanceServiceClient = instanceServiceClient ec2Wrapper.userServiceClient = instanceServiceClient + + // Initialize v2 client with default config + ec2Wrapper.userServiceClientV2 = ec2v2.NewFromConfig(cfg) } return ec2Wrapper, nil @@ -538,9 +560,9 @@ func timeSinceMs(start time.Time) float64 { return float64(time.Since(start).Milliseconds()) } -func (e *ec2Wrapper) DescribeInstances(input *ec2.DescribeInstancesInput) (*ec2.DescribeInstancesOutput, error) { +func (e *ec2Wrapper) DescribeInstances(input *ec2v2.DescribeInstancesInput) (*ec2v2.DescribeInstancesOutput, error) { start := time.Now() - describeInstancesOutput, err := e.userServiceClient.DescribeInstances(input) + describeInstancesOutput, err := e.userServiceClientV2.DescribeInstances(context.Background(), input) ec2APICallLatencies.WithLabelValues("describe_instances").Observe(timeSinceMs(start)) // Metric updates