Skip to content

Commit 1fd6c14

Browse files
prestistdustymabe
authored andcommitted
Migrate AWS SDK from v1 to v2
- Update all imports from aws-sdk-go to aws-sdk-go-v2 - Migrate error handling from awserr.Error to smithy.APIError - Update service client initialization (removed session, added direct clients) - Add context parameters to API calls - Update type references from ec2.Type to ec2types.Type - Add AWS SDK v2 dependencies to go.mod - Update slice handling from []*Type to []Type patterns - Update integer type conversions (int64 to int32) - Update architecture and volume type enums for v2
1 parent e9034ee commit 1fd6c14

File tree

11 files changed

+404
-300
lines changed

11 files changed

+404
-300
lines changed

go.mod

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ require (
1717
github.com/aliyun/alibaba-cloud-sdk-go v1.63.107
1818
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible
1919
github.com/aws/aws-sdk-go v1.55.8
20+
github.com/aws/aws-sdk-go-v2 v1.32.6
21+
github.com/aws/aws-sdk-go-v2/config v1.28.6
22+
github.com/aws/aws-sdk-go-v2/credentials v1.17.47
23+
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.43
24+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.197.0
25+
github.com/aws/aws-sdk-go-v2/service/iam v1.38.2
26+
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.0
27+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.2
28+
github.com/aws/smithy-go v1.22.1
2029
github.com/coreos/butane v0.24.0
2130
github.com/coreos/go-semver v0.3.1
2231
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e
@@ -61,6 +70,18 @@ require (
6170
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 // indirect
6271
github.com/IBM/go-sdk-core/v5 v5.19.0 // indirect
6372
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
73+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect
74+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 // indirect
75+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 // indirect
76+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 // indirect
77+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
78+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25 // indirect
79+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect
80+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6 // indirect
81+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 // indirect
82+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6 // indirect
83+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 // indirect
84+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 // indirect
6485
github.com/clarketm/json v1.17.1 // indirect
6586
github.com/containers/image/v5 v5.34.2 // indirect
6687
github.com/containers/storage v1.57.2 // indirect

go.sum

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,48 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3d
5252
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
5353
github.com/aws/aws-sdk-go v1.55.8 h1:JRmEUbU52aJQZ2AjX4q4Wu7t4uZjOu71uyNmaWlUkJQ=
5454
github.com/aws/aws-sdk-go v1.55.8/go.mod h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk=
55+
github.com/aws/aws-sdk-go-v2 v1.32.6 h1:7BokKRgRPuGmKkFMhEg/jSul+tB9VvXhcViILtfG8b4=
56+
github.com/aws/aws-sdk-go-v2 v1.32.6/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
57+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8=
58+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc=
59+
github.com/aws/aws-sdk-go-v2/config v1.28.6 h1:D89IKtGrs/I3QXOLNTH93NJYtDhm8SYa9Q5CsPShmyo=
60+
github.com/aws/aws-sdk-go-v2/config v1.28.6/go.mod h1:GDzxJ5wyyFSCoLkS+UhGB0dArhb9mI+Co4dHtoTxbko=
61+
github.com/aws/aws-sdk-go-v2/credentials v1.17.47 h1:48bA+3/fCdi2yAwVt+3COvmatZ6jUDNkDTIsqDiMUdw=
62+
github.com/aws/aws-sdk-go-v2/credentials v1.17.47/go.mod h1:+KdckOejLW3Ks3b0E3b5rHsr2f9yuORBum0WPnE5o5w=
63+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 h1:AmoU1pziydclFT/xRV+xXE/Vb8fttJCLRPv8oAkprc0=
64+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21/go.mod h1:AjUdLYe4Tgs6kpH4Bv7uMZo7pottoyHMn4eTcIcneaY=
65+
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.43 h1:iLdpkYZ4cXIQMO7ud+cqMWR1xK5ESbt1rvN77tRi1BY=
66+
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.43/go.mod h1:OgbsKPAswXDd5kxnR4vZov69p3oYjbvUyIRBAAV0y9o=
67+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 h1:s/fF4+yDQDoElYhfIVvSNyeCydfbuTKzhxSXDXCPasU=
68+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25/go.mod h1:IgPfDv5jqFIzQSNbUEMoitNooSMXjRSDkhXv8jiROvU=
69+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 h1:ZntTCl5EsYnhN/IygQEUugpdwbhdkom9uHcbCftiGgA=
70+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25/go.mod h1:DBdPrgeocww+CSl1C8cEV8PN1mHMBhuCDLpXezyvWkE=
71+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
72+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
73+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25 h1:r67ps7oHCYnflpgDy2LZU0MAQtQbYIOqNNnqGO6xQkE=
74+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25/go.mod h1:GrGY+Q4fIokYLtjCVB/aFfCVL6hhGUFl8inD18fDalE=
75+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.197.0 h1:Bo20e0LV3Qbkr7yZVGuOxvWbf9Vf3nqss5WyerHr6Ic=
76+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.197.0/go.mod h1:00zqVNJFK6UASrTnuvjJHJuaqUdkVz5tW8Ip+VhzuNg=
77+
github.com/aws/aws-sdk-go-v2/service/iam v1.38.2 h1:8iFKuRj/FJipy/aDZ2lbq0DYuEHdrxp0qVsdi+ZEwnE=
78+
github.com/aws/aws-sdk-go-v2/service/iam v1.38.2/go.mod h1:UBe4z0VZnbXGp6xaCW1ulE9pndjfpsnrU206rWZcR0Y=
79+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y=
80+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE=
81+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6 h1:HCpPsWqmYQieU7SS6E9HXfdAMSud0pteVXieJmcpIRI=
82+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6/go.mod h1:ngUiVRCco++u+soRRVBIvBZxSMMvOVMXA4PJ36JLfSw=
83+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 h1:50+XsN70RS7dwJ2CkVNXzj7U2L1HKP8nqTd3XWEXBN4=
84+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6/go.mod h1:WqgLmwY7so32kG01zD8CPTJWVWM+TzJoOVHwTg4aPug=
85+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6 h1:BbGDtTi0T1DYlmjBiCr/le3wzhA37O8QTC5/Ab8+EXk=
86+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6/go.mod h1:hLMJt7Q8ePgViKupeymbqI0la+t9/iYFBjxQCFwuAwI=
87+
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.0 h1:nyuzXooUNJexRT0Oy0UQY6AhOzxPxhtt4DcBIHyCnmw=
88+
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.0/go.mod h1:sT/iQz8JK3u/5gZkT+Hmr7GzVZehUMkRZpOaAwYXeGY=
89+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 h1:rLnYAfXQ3YAccocshIH5mzNNwZBkBo+bP6EhIxak6Hw=
90+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.7/go.mod h1:ZHtuQJ6t9A/+YDuxOLnbryAmITtr8UysSny3qcyvJTc=
91+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 h1:JnhTZR3PiYDNKlXy50/pNeix9aGMo6lLpXwJ1mw8MD4=
92+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6/go.mod h1:URronUEGfXZN1VpdktPSD1EkAL9mfrV+2F4sjH38qOY=
93+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 h1:s4074ZO1Hk8qv65GqNXqDjmkf4HSQqJukaLuuW0TpDA=
94+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.2/go.mod h1:mVggCnIWoM09jP71Wh+ea7+5gAp53q+49wDFs1SW5z8=
95+
github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro=
96+
github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
5597
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
5698
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
5799
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=

mantle/cmd/plume/release.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package main
1717
import (
1818
"bytes"
1919
"encoding/json"
20+
stdErrors "errors"
2021
"fmt"
2122
"io"
2223
"net/url"
@@ -25,7 +26,7 @@ import (
2526
"strings"
2627
"time"
2728

28-
"github.com/aws/aws-sdk-go/aws/awserr"
29+
"github.com/aws/smithy-go"
2930
"github.com/coreos/coreos-assembler/mantle/platform/api/aws"
3031
"github.com/coreos/stream-metadata-go/release"
3132
"github.com/pkg/errors"
@@ -260,8 +261,10 @@ func modifyReleaseMetadataIndex(api *aws.API, rel release.Release) {
260261
data, err = func() ([]byte, error) {
261262
f, err := api.DownloadFile(bucket, path)
262263
if err != nil {
263-
if awsErr, ok := err.(awserr.Error); ok {
264-
if awsErr.Code() == "NoSuchKey" {
264+
var apiErr smithy.APIError
265+
if stdErrors.As(err, &apiErr) {
266+
code := apiErr.ErrorCode()
267+
if code == "NoSuchKey" || code == "NotFound" {
265268
return []byte("{}"), nil
266269
}
267270
}

mantle/platform/api/aws/api.go

Lines changed: 44 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,17 @@
1515
package aws
1616

1717
import (
18+
"context"
1819
"time"
1920

20-
"github.com/aws/aws-sdk-go/aws"
21-
"github.com/aws/aws-sdk-go/aws/client"
22-
"github.com/aws/aws-sdk-go/aws/credentials"
23-
"github.com/aws/aws-sdk-go/aws/session"
24-
"github.com/aws/aws-sdk-go/service/ec2"
25-
"github.com/aws/aws-sdk-go/service/iam"
26-
"github.com/aws/aws-sdk-go/service/s3"
27-
"github.com/aws/aws-sdk-go/service/sts"
21+
"github.com/aws/aws-sdk-go-v2/aws"
22+
"github.com/aws/aws-sdk-go-v2/config"
23+
"github.com/aws/aws-sdk-go-v2/credentials"
24+
"github.com/aws/aws-sdk-go-v2/service/ec2"
25+
ec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types"
26+
"github.com/aws/aws-sdk-go-v2/service/iam"
27+
"github.com/aws/aws-sdk-go-v2/service/s3"
28+
"github.com/aws/aws-sdk-go-v2/service/sts"
2829
"github.com/coreos/pkg/capnslog"
2930

3031
"github.com/coreos/coreos-assembler/mantle/platform"
@@ -57,11 +58,12 @@ type Options struct {
5758
}
5859

5960
type API struct {
60-
session client.ConfigProvider
61-
ec2 *ec2.EC2
62-
iam *iam.IAM
63-
s3 *s3.S3
64-
opts *Options
61+
config aws.Config
62+
ec2 *ec2.Client
63+
iam *iam.Client
64+
s3 *s3.Client
65+
sts *sts.Client
66+
opts *Options
6567
}
6668

6769
// New creates a new AWS API wrapper. It uses credentials from any of the
@@ -71,28 +73,38 @@ type API struct {
7173
// preflight check is recommended via api.PreflightCheck
7274
// Note that this method may modify Options to update the AMI ID
7375
func New(opts *Options) (*API, error) {
74-
awsCfg := aws.Config{Region: aws.String(opts.Region)}
76+
ctx := context.Background()
77+
78+
// Build configuration options
79+
configOpts := []func(*config.LoadOptions) error{
80+
config.WithRegion(opts.Region),
81+
}
82+
7583
if opts.AccessKeyID != "" {
76-
awsCfg.Credentials = credentials.NewStaticCredentials(opts.AccessKeyID, opts.SecretKey, "")
84+
configOpts = append(configOpts, config.WithCredentialsProvider(
85+
credentials.NewStaticCredentialsProvider(opts.AccessKeyID, opts.SecretKey, ""),
86+
))
7787
} else if opts.CredentialsFile != "" {
78-
awsCfg.Credentials = credentials.NewSharedCredentials(opts.CredentialsFile, opts.Profile)
88+
configOpts = append(configOpts, config.WithSharedCredentialsFiles([]string{opts.CredentialsFile}))
89+
if opts.Profile != "" {
90+
configOpts = append(configOpts, config.WithSharedConfigProfile(opts.Profile))
91+
}
92+
} else if opts.Profile != "" {
93+
configOpts = append(configOpts, config.WithSharedConfigProfile(opts.Profile))
7994
}
8095

81-
sess, err := session.NewSessionWithOptions(session.Options{
82-
SharedConfigState: session.SharedConfigEnable,
83-
Profile: opts.Profile,
84-
Config: awsCfg,
85-
})
96+
awsCfg, err := config.LoadDefaultConfig(ctx, configOpts...)
8697
if err != nil {
8798
return nil, err
8899
}
89100

90101
api := &API{
91-
session: sess,
92-
ec2: ec2.New(sess),
93-
iam: iam.New(sess),
94-
s3: s3.New(sess),
95-
opts: opts,
102+
config: awsCfg,
103+
ec2: ec2.NewFromConfig(awsCfg),
104+
iam: iam.NewFromConfig(awsCfg),
105+
s3: s3.NewFromConfig(awsCfg),
106+
sts: sts.NewFromConfig(awsCfg),
107+
opts: opts,
96108
}
97109

98110
return api, nil
@@ -107,17 +119,17 @@ func (a *API) GC(gracePeriod time.Duration) error {
107119
// PreflightCheck validates that the aws configuration provided has valid
108120
// credentials
109121
func (a *API) PreflightCheck() error {
110-
stsClient := sts.New(a.session)
111-
_, err := stsClient.GetCallerIdentity(&sts.GetCallerIdentityInput{})
122+
ctx := context.Background()
123+
_, err := a.sts.GetCallerIdentity(ctx, &sts.GetCallerIdentityInput{})
112124

113125
return err
114126
}
115127

116-
func tagSpecCreatedByMantle(name, resourceType string) []*ec2.TagSpecification {
117-
return []*ec2.TagSpecification{
128+
func tagSpecCreatedByMantle(name string, resourceType ec2types.ResourceType) []ec2types.TagSpecification {
129+
return []ec2types.TagSpecification{
118130
{
119-
ResourceType: aws.String(resourceType),
120-
Tags: []*ec2.Tag{
131+
ResourceType: resourceType,
132+
Tags: []ec2types.Tag{
121133
{
122134
Key: aws.String("CreatedBy"),
123135
Value: aws.String("mantle"),

0 commit comments

Comments
 (0)