Background
AWS announced end-of-support for aws-sdk-go v1 on July 31, 2025. The repo currently imports `github.com/aws/aws-sdk-go v1.55.8` across 35+ files. Golangci-lint v2 (staticcheck SA1019) now flags every import as a deprecation warning, which we are currently suppressing in `.golangci.yml` pending this migration.
AWS Services Used (v1 → v2 module mapping)
| v1 package |
v2 module |
| `aws/aws-sdk-go/aws` |
`aws/aws-sdk-go-v2/aws` |
| `aws/aws-sdk-go/aws/arn` |
`aws/aws-sdk-go-v2/aws/arn` |
| `aws/aws-sdk-go/aws/awserr` |
removed — use `errors.As` with service error types |
| `aws/aws-sdk-go/aws/client` |
`aws/aws-sdk-go-v2/aws` (retry via `aws.RetryerV2`) |
| `aws/aws-sdk-go/aws/ec2metadata` |
`aws/aws-sdk-go-v2/feature/ec2/imds` |
| `aws/aws-sdk-go/aws/request` |
`aws/aws-sdk-go-v2/aws` (middleware) |
| `aws/aws-sdk-go/aws/session` |
`aws/aws-sdk-go-v2/config` (`config.LoadDefaultConfig`) |
| `aws/aws-sdk-go/service/autoscaling` |
`aws/aws-sdk-go-v2/service/autoscaling` |
| `aws/aws-sdk-go/service/ec2` |
`aws/aws-sdk-go-v2/service/ec2` |
| `aws/aws-sdk-go/service/eks` |
`aws/aws-sdk-go-v2/service/eks` |
| `aws/aws-sdk-go/service/iam` |
`aws/aws-sdk-go-v2/service/iam` |
| `aws/aws-sdk-go/service/ssm` |
`aws/aws-sdk-go-v2/service/ssm` |
Note: v2 drops the *iface interface packages (`autoscalingiface`, `ec2iface`, `eksiface`, `iamiface`, `ssmiface`). Mocking for tests must be done via `smithy-go` middleware or hand-written interfaces.
Blocking Dependency
`github.com/keikoproj/aws-sdk-go-cache` currently wraps v1 SDK. It must be updated to v2 before or in parallel with this migration. See keikoproj/aws-sdk-go-cache for a corresponding issue.
Migration Plan
Phase 1 — Update `aws-sdk-go-cache` (prerequisite)
Phase 2 — Session / config layer (`controllers/providers/aws/aws.go`)
Phase 3 — Service clients
Phase 4 — EKS provisioner (`controllers/provisioners/eks/`)
Phase 5 — EKS Fargate / Managed provisioners
Phase 6 — Tests
Phase 7 — Cleanup
Key Differences to Watch For
- Pointer helpers: v1 used `aws.String("x")` / `aws.StringValue(p)` everywhere; v2 uses plain `string` values in most structs — a mechanical but large change
- Paginators: v2 has first-class paginator support via `NewXxxPaginator` — replace manual next-token loops
- Error handling: v2 errors implement `smithy.APIError`; use `errors.As` instead of type-asserting to `awserr.Error`
- Context: v2 requires `context.Context` on every API call — ensure context propagation through the controller reconcile loop
References
Background
AWS announced end-of-support for aws-sdk-go v1 on July 31, 2025. The repo currently imports `github.com/aws/aws-sdk-go v1.55.8` across 35+ files. Golangci-lint v2 (staticcheck SA1019) now flags every import as a deprecation warning, which we are currently suppressing in `.golangci.yml` pending this migration.
AWS Services Used (v1 → v2 module mapping)
Note: v2 drops the
*ifaceinterface packages (`autoscalingiface`, `ec2iface`, `eksiface`, `iamiface`, `ssmiface`). Mocking for tests must be done via `smithy-go` middleware or hand-written interfaces.Blocking Dependency
`github.com/keikoproj/aws-sdk-go-cache` currently wraps v1 SDK. It must be updated to v2 before or in parallel with this migration. See keikoproj/aws-sdk-go-cache for a corresponding issue.
Migration Plan
Phase 1 — Update `aws-sdk-go-cache` (prerequisite)
Phase 2 — Session / config layer (`controllers/providers/aws/aws.go`)
Phase 3 — Service clients
Phase 4 — EKS provisioner (`controllers/provisioners/eks/`)
Phase 5 — EKS Fargate / Managed provisioners
Phase 6 — Tests
Phase 7 — Cleanup
Key Differences to Watch For
References