11package provider
22
33import (
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
3033var (
@@ -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
108115func 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
130138func (aws * AWSProvider ) CreateBackend (prefix string , ctx map [string ]interface {}) (string , error ) {
@@ -158,10 +166,17 @@ func (aws *AWSProvider) KubeConfig() error {
158166
159167func (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
206221func (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