Skip to content

Commit a3f8f24

Browse files
Merge pull request #98 from pluralsh/upgrade-aws-go
upgrade to aws-sdk-go-v2
2 parents 61d2348 + 2ff1534 commit a3f8f24

3 files changed

Lines changed: 101 additions & 37 deletions

File tree

go.mod

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,9 @@ require (
1515
github.com/Azure/go-autorest/autorest/azure/auth v0.5.7
1616
github.com/Azure/go-autorest/autorest/to v0.4.0
1717
github.com/Masterminds/sprig/v3 v3.2.2
18-
github.com/aws/aws-sdk-go v1.35.35
1918
github.com/azure/azure-sdk-for-go v57.4.0+incompatible
2019
github.com/buger/goterm v1.0.0
2120
github.com/chartmuseum/helm-push v0.10.2
22-
github.com/cli/oauth v0.9.0
2321
github.com/coreos/go-semver v0.3.0
2422
github.com/fatih/color v1.13.0
2523
github.com/gin-gonic/gin v1.7.7
@@ -58,6 +56,24 @@ require (
5856
sigs.k8s.io/yaml v1.3.0
5957
)
6058

59+
require (
60+
github.com/aws/aws-sdk-go-v2 v1.16.4 // indirect
61+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.1 // indirect
62+
github.com/aws/aws-sdk-go-v2/credentials v1.12.4 // indirect
63+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.5 // indirect
64+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.11 // indirect
65+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.5 // indirect
66+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.12 // indirect
67+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.2 // indirect
68+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.1 // indirect
69+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.6 // indirect
70+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.5 // indirect
71+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.5 // indirect
72+
github.com/aws/aws-sdk-go-v2/service/sso v1.11.7 // indirect
73+
github.com/aws/aws-sdk-go-v2/service/sts v1.16.6 // indirect
74+
github.com/aws/smithy-go v1.11.2 // indirect
75+
)
76+
6177
require (
6278
cloud.google.com/go v0.100.2 // indirect
6379
cloud.google.com/go/iam v0.3.0 // indirect
@@ -81,6 +97,9 @@ require (
8197
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
8298
github.com/acomagu/bufpipe v1.0.3 // indirect
8399
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 // indirect
100+
github.com/aws/aws-sdk-go-v2/config v1.15.9
101+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.45.0
102+
github.com/aws/aws-sdk-go-v2/service/s3 v1.26.10
84103
github.com/beorn7/perks v1.0.1 // indirect
85104
github.com/cespare/xxhash/v2 v2.1.2 // indirect
86105
github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect
@@ -171,7 +190,7 @@ require (
171190
github.com/opencontainers/image-spec v1.0.2 // indirect
172191
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
173192
github.com/pkg/errors v0.9.1 // indirect
174-
github.com/pluralsh/oauth v0.9.1-0.20220520000222-d76c0e7a0db9 // indirect
193+
github.com/pluralsh/oauth v0.9.1-0.20220520000222-d76c0e7a0db9
175194
github.com/pmezard/go-difflib v1.0.0 // indirect
176195
github.com/prometheus/client_golang v1.11.0 // indirect
177196
github.com/prometheus/client_model v0.2.0 // indirect

go.sum

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,42 @@ github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZo
229229
github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM=
230230
github.com/aws/aws-sdk-go v1.25.3/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
231231
github.com/aws/aws-sdk-go v1.34.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
232-
github.com/aws/aws-sdk-go v1.35.35 h1:o/EbgEcIPWga7GWhJhb3tiaxqk4/goTdo5YEMdnVxgE=
233-
github.com/aws/aws-sdk-go v1.35.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
232+
github.com/aws/aws-sdk-go-v2 v1.16.4 h1:swQTEQUyJF/UkEA94/Ga55miiKFoXmm/Zd67XHgmjSg=
233+
github.com/aws/aws-sdk-go-v2 v1.16.4/go.mod h1:ytwTPBG6fXTZLxxeeCCWj2/EMYp/xDUgX+OET6TLNNU=
234+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.1 h1:SdK4Ppk5IzLs64ZMvr6MrSficMtjY2oS0WOORXTlxwU=
235+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.1/go.mod h1:n8Bs1ElDD2wJ9kCRTczA83gYbBmjSwZp3umc6zF4EeM=
236+
github.com/aws/aws-sdk-go-v2/config v1.15.9 h1:TK5yNEnFDQ9iaO04gJS/3Y+eW8BioQiCUafW75/Wc3Q=
237+
github.com/aws/aws-sdk-go-v2/config v1.15.9/go.mod h1:rv/l/TbZo67kp99v/3Kb0qV6Fm1KEtKyruEV2GvVfgs=
238+
github.com/aws/aws-sdk-go-v2/credentials v1.12.4 h1:xggwS+qxCukXRVXJBJWQJGyUsvuxGC8+J1kKzv2cxuw=
239+
github.com/aws/aws-sdk-go-v2/credentials v1.12.4/go.mod h1:7g+GGSp7xtR823o1jedxKmqRZGqLdoHQfI4eFasKKxs=
240+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.5 h1:YPxclBeE07HsLQE8vtjC8T2emcTjM9nzqsnDi2fv5UM=
241+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.5/go.mod h1:WAPnuhG5IQ/i6DETFl5NmX3kKqCzw7aau9NHAGcm4QE=
242+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.11 h1:gsqHplNh1DaQunEKZISK56wlpbCg0yKxNVvGWCFuF1k=
243+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.11/go.mod h1:tmUB6jakq5DFNcXsXOA/ZQ7/C8VnSKYkx58OI7Fh79g=
244+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.5 h1:PLFj+M2PgIDHG//hw3T0O0KLI4itVtAjtxrZx4AHPLg=
245+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.5/go.mod h1:fV1AaS2gFc1tM0RCb015FJ0pvWVUfJZANzjwoO4YakM=
246+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.12 h1:j0VqrjtgsY1Bx27tD0ysay36/K4kFMWRp9K3ieO9nLU=
247+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.12/go.mod h1:00c7+ALdPh4YeEUPXJzyU0Yy01nPGOq2+9rUaz05z9g=
248+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.2 h1:1fs9WkbFcMawQjxEI0B5L0SqvBhJZebxWM6Z3x/qHWY=
249+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.2/go.mod h1:0jDVeWUFPbI3sOfsXXAsIdiawXcn7VBLx/IlFVTRP64=
250+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.45.0 h1:LxCklDNKY9bynYMaDetR/zAh9kbkdSkrEzfq4L4Lhdw=
251+
github.com/aws/aws-sdk-go-v2/service/ec2 v1.45.0/go.mod h1:b2SVOmsP7A9VlTpfkJAVbU3d+TQfD76x9IUNbvynAbM=
252+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.1 h1:T4pFel53bkHjL2mMo+4DKE6r6AuoZnM0fg7k1/ratr4=
253+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.1/go.mod h1:GeUru+8VzrTXV/83XyMJ80KpH8xO89VPoUileyNQ+tc=
254+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.6 h1:9mvDAsMiN+07wcfGM+hJ1J3dOKZ2YOpDiPZ6ufRJcgw=
255+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.6/go.mod h1:Eus+Z2iBIEfhOvhSdMTcscNOMy6n3X9/BJV0Zgax98w=
256+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.5 h1:gRW1ZisKc93EWEORNJRvy/ZydF3o6xLSveJHdi1Oa0U=
257+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.5/go.mod h1:ZbkttHXaVn3bBo/wpJbQGiiIWR90eTBUVBrEHUEQlho=
258+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.5 h1:DyPYkrH4R2zn+Pdu6hM3VTuPsQYAE6x2WB24X85Sgw0=
259+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.5/go.mod h1:XtL92YWo0Yq80iN3AgYRERJqohg4TozrqRlxYhHGJ7g=
260+
github.com/aws/aws-sdk-go-v2/service/s3 v1.26.10 h1:GWdLZK0r1AK5sKb8rhB9bEXqXCK8WNuyv4TBAD6ZviQ=
261+
github.com/aws/aws-sdk-go-v2/service/s3 v1.26.10/go.mod h1:+O7qJxF8nLorAhuIVhYTHse6okjHJJm4EwhhzvpnkT0=
262+
github.com/aws/aws-sdk-go-v2/service/sso v1.11.7 h1:suAGD+RyiHWPPihZzY+jw4mCZlOFWgmdjb2AeTenz7c=
263+
github.com/aws/aws-sdk-go-v2/service/sso v1.11.7/go.mod h1:TFVe6Rr2joVLsYQ1ABACXgOC6lXip/qpX2x5jWg/A9w=
264+
github.com/aws/aws-sdk-go-v2/service/sts v1.16.6 h1:aYToU0/iazkMY67/BYLt3r6/LT/mUtarLAF5mGof1Kg=
265+
github.com/aws/aws-sdk-go-v2/service/sts v1.16.6/go.mod h1:rP1rEOKAGZoXp4iGDxSXFvODAtXpm34Egf0lL0eshaQ=
266+
github.com/aws/smithy-go v1.11.2 h1:eG/N+CcUMAvsdffgMvjMKwfyDzIkjM6pfxMJ8Mzc6mE=
267+
github.com/aws/smithy-go v1.11.2/go.mod h1:3xHYmszWVx2c0kIwQeEVf9uSm4fYZt67FBJnwub1bgM=
234268
github.com/azure/azure-sdk-for-go v57.4.0+incompatible h1:7PXrQ3NrC+hNtFlZtz8rSJi+mMolgghHh+I5db6yeUw=
235269
github.com/azure/azure-sdk-for-go v57.4.0+incompatible/go.mod h1:tOiTyk5ut55mEEo/hYwMIa79Jn9AkErVBTmJ3I0ZlfY=
236270
github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
@@ -295,8 +329,6 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D
295329
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
296330
github.com/cli/browser v1.0.0 h1:RIleZgXrhdiCVgFBSjtWwkLPUCWyhhhN5k5HGSBt1js=
297331
github.com/cli/browser v1.0.0/go.mod h1:IEWkHYbLjkhtjwwWlwTHW2lGxeS5gezEQBMLTwDHf5Q=
298-
github.com/cli/oauth v0.9.0 h1:nxBC0Df4tUzMkqffAB+uZvisOwT3/N9FpkfdTDtafxc=
299-
github.com/cli/oauth v0.9.0/go.mod h1:qd/FX8ZBD6n1sVNQO3aIdRxeu5LGw9WhKnYhIIoC2A4=
300332
github.com/cli/safeexec v1.0.0 h1:0VngyaIyqACHdcMNWfo6+KdUYnqEr2Sg+bSP1pdF+dI=
301333
github.com/cli/safeexec v1.0.0/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q=
302334
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
@@ -1224,10 +1256,6 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
12241256
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
12251257
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
12261258
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
1227-
github.com/pluralsh/oauth v0.9.1-0.20220519234934-e164dab4f478 h1:Fucoo8ws4dOhuN/uwqTWpIjCRofneJOrOO4z/yX1u6w=
1228-
github.com/pluralsh/oauth v0.9.1-0.20220519234934-e164dab4f478/go.mod h1:aTUw/75rzcsbvW+/TLvWtHVDXFIdtFrDtUncOq9vHyM=
1229-
github.com/pluralsh/oauth v0.9.1-0.20220519235719-62ca5425e24c h1:UwSYY3O4lCKj4SPRDmEdKdf/vbqKFKSoRZ5Omsr1b9g=
1230-
github.com/pluralsh/oauth v0.9.1-0.20220519235719-62ca5425e24c/go.mod h1:aTUw/75rzcsbvW+/TLvWtHVDXFIdtFrDtUncOq9vHyM=
12311259
github.com/pluralsh/oauth v0.9.1-0.20220520000222-d76c0e7a0db9 h1:bMkXXUksi9ym+enaNlvds/BUg7SkZ/3ir8D3OsznA+E=
12321260
github.com/pluralsh/oauth v0.9.1-0.20220520000222-d76c0e7a0db9/go.mod h1:aTUw/75rzcsbvW+/TLvWtHVDXFIdtFrDtUncOq9vHyM=
12331261
github.com/pluralsh/plural-operator v0.1.4 h1:P+aqlwqN80Tp5c449/6XGYAqWuUrKImiDuBQPmAiy0U=

pkg/provider/aws.go

Lines changed: 43 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package provider
22

33
import (
4+
"context"
45
"encoding/json"
56
"fmt"
67
"os/exec"
78

89
"github.com/AlecAivazis/survey/v2"
9-
"github.com/aws/aws-sdk-go/aws"
10-
"github.com/aws/aws-sdk-go/aws/session"
11-
"github.com/aws/aws-sdk-go/service/ec2"
12-
"github.com/aws/aws-sdk-go/service/s3"
10+
awsConfig "github.com/aws/aws-sdk-go-v2/config"
11+
"github.com/aws/aws-sdk-go-v2/service/ec2"
12+
ec2Types "github.com/aws/aws-sdk-go-v2/service/ec2/types"
13+
"github.com/aws/aws-sdk-go-v2/service/s3"
14+
s3Types "github.com/aws/aws-sdk-go-v2/service/s3/types"
1315
"github.com/pluralsh/plural/pkg/config"
1416
"github.com/pluralsh/plural/pkg/manifest"
1517
"github.com/pluralsh/plural/pkg/template"
@@ -23,8 +25,9 @@ type AWSProvider struct {
2325
project string
2426
bucket string
2527
Reg string `survey:"region"`
26-
storageClient *s3.S3
28+
storageClient *s3.Client
2729
writer manifest.Writer
30+
goContext *context.Context
2831
}
2932

3033
var (
@@ -73,15 +76,19 @@ func mkAWS(conf config.Config) (provider *AWSProvider, err error) {
7376
return
7477
}
7578

76-
client, err := getClient(provider.Reg)
79+
ctx := context.Background()
80+
81+
provider.goContext = &ctx
82+
83+
client, err := getClient(provider.Reg, *provider.goContext)
7784
if err != nil {
7885
return
7986
}
8087

8188
account, err := GetAwsAccount()
8289
if err != nil {
8390
err = errors.ErrorWrap(err, "Failed to get aws account (is your aws cli configured?)")
84-
return
91+
return
8592
}
8693

8794
if len(account) <= 0 {
@@ -106,25 +113,26 @@ func mkAWS(conf config.Config) (provider *AWSProvider, err error) {
106113
}
107114

108115
func awsFromManifest(man *manifest.ProjectManifest) (*AWSProvider, error) {
109-
client, err := getClient(man.Region)
116+
ctx := context.Background()
117+
context := &ctx
118+
client, err := getClient(man.Region, *context)
110119
if err != nil {
111120
return nil, err
112121
}
113122

114-
return &AWSProvider{man.Cluster, man.Project, man.Bucket, man.Region, client, nil}, nil
123+
return &AWSProvider{man.Cluster, man.Project, man.Bucket, man.Region, client, nil, context}, nil
115124
}
116125

117-
func getClient(region string) (*s3.S3, error) {
118-
sess, err := session.NewSessionWithOptions(session.Options{
119-
Config: aws.Config{Region: aws.String(region)},
120-
SharedConfigState: session.SharedConfigEnable,
121-
})
126+
func getClient(region string, context context.Context) (*s3.Client, error) {
127+
cfg, err := awsConfig.LoadDefaultConfig(context)
122128

123129
if err != nil {
124130
return nil, errors.ErrorWrap(err, "Failed to initialize aws client: ")
125131
}
126132

127-
return s3.New(sess), nil
133+
cfg.Region = region
134+
135+
return s3.NewFromConfig(cfg), nil
128136
}
129137

130138
func (aws *AWSProvider) CreateBackend(prefix string, ctx map[string]interface{}) (string, error) {
@@ -158,10 +166,17 @@ func (aws *AWSProvider) KubeConfig() error {
158166

159167
func (p *AWSProvider) mkBucket(name string) error {
160168
client := p.storageClient
161-
_, err := client.HeadBucket(&s3.HeadBucketInput{Bucket: aws.String(name)})
169+
_, err := client.HeadBucket(*p.goContext, &s3.HeadBucketInput{Bucket: &name})
162170

163171
if err != nil {
164-
_, err = client.CreateBucket(&s3.CreateBucketInput{Bucket: aws.String(name)})
172+
_, err = client.CreateBucket(*p.goContext,
173+
&s3.CreateBucketInput{
174+
Bucket: &name,
175+
CreateBucketConfiguration: &s3Types.CreateBucketConfiguration{
176+
LocationConstraint: s3Types.BucketLocationConstraint(p.Region()),
177+
},
178+
},
179+
)
165180
return err
166181
}
167182

@@ -204,18 +219,20 @@ func (aws *AWSProvider) Flush() error {
204219
}
205220

206221
func (prov *AWSProvider) Decommision(node *v1.Node) error {
207-
sess, err := session.NewSession(&aws.Config{
208-
Region: aws.String(prov.Region()),
209-
})
222+
cfg, err := awsConfig.LoadDefaultConfig(*prov.goContext)
210223

211224
if err != nil {
212225
return errors.ErrorWrap(err, "Failed to establish aws session")
213226
}
214227

215-
svc := ec2.New(sess)
216-
instances, err := svc.DescribeInstances(&ec2.DescribeInstancesInput{
217-
Filters: []*ec2.Filter{
218-
{Name: aws.String("private-dns-name"), Values: []*string{aws.String(node.ObjectMeta.Name)}},
228+
cfg.Region = prov.Region()
229+
230+
name := "private-dns-name"
231+
232+
svc := ec2.NewFromConfig(cfg)
233+
instances, err := svc.DescribeInstances(*prov.goContext, &ec2.DescribeInstancesInput{
234+
Filters: []ec2Types.Filter{
235+
{Name: &name, Values: []string{node.ObjectMeta.Name}},
219236
},
220237
})
221238

@@ -225,8 +242,8 @@ func (prov *AWSProvider) Decommision(node *v1.Node) error {
225242

226243
instance := instances.Reservations[0].Instances[0]
227244

228-
_, err = svc.TerminateInstances(&ec2.TerminateInstancesInput{
229-
InstanceIds: []*string{instance.InstanceId},
245+
_, err = svc.TerminateInstances(*prov.goContext, &ec2.TerminateInstancesInput{
246+
InstanceIds: []string{*instance.InstanceId},
230247
})
231248

232249
return errors.ErrorWrap(err, "failed to terminate instance")

0 commit comments

Comments
 (0)