diff --git a/batch/batch.go b/batch/batch.go index 2cc29fcbe204370130aef3fbc19ddbefa20b5064..b4d8ac35a736affc4bef1db4f78f87a253e5a1de 100644 --- a/batch/batch.go +++ b/batch/batch.go @@ -1,17 +1,20 @@ package batch import ( + "context" "encoding/json" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/batch" + "io" + "time" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/batch" + "github.com/aws/aws-sdk-go-v2/service/batch/types" "github.com/go-resty/resty/v2" "github.com/google/uuid" "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/logs" "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/s3" "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/utils" - "io" - "time" ) const ( @@ -31,7 +34,7 @@ type BatchJobQueue string type BatchJobMessageType string type BatchJob struct { - Name *string + Name string Job any FullJobDefinition string FullJobQueue string @@ -50,19 +53,17 @@ func SubmitJob(batchJob BatchJob) error { return nil } - options := session.Options{ - Config: aws.Config{ - Region: utils.ValueToPointer("af-south-1"), - }, + cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("af-south-1")) + if err != nil { + return err } - sess, err := session.NewSessionWithOptions(options) - batchClient := batch.New(sess) + batchClient := batch.NewFromConfig(cfg) - if batchJob.Name == nil { + if batchJob.Name == "" { id := uuid.New() jobID := "job" + id.String() - batchJob.Name = utils.ValueToPointer(jobID) + batchJob.Name = jobID } err = uploadMessageToS3(batchJob) @@ -70,12 +71,12 @@ func SubmitJob(batchJob BatchJob) error { return err } - command := []*string{ - utils.ValueToPointer(binaryPath), + command := []string{ + binaryPath, batchJob.Name, } - environmentOverwrite := []*batch.KeyValuePair{{ + environmentOverwrite := []types.KeyValuePair{{ Name: utils.ValueToPointer("BATCH_MESSAGE_TYPE"), Value: utils.ValueToPointer(string(BatchJobMessageTypeS3)), }, @@ -83,14 +84,14 @@ func SubmitJob(batchJob BatchJob) error { input := &batch.SubmitJobInput{ JobDefinition: utils.ValueToPointer(batchJob.FullJobDefinition), - JobName: batchJob.Name, - JobQueue: utils.ValueToPointer(batchJob.FullJobQueue), - ContainerOverrides: &batch.ContainerOverrides{ + JobName: aws.String(batchJob.Name), + JobQueue: aws.String(batchJob.FullJobQueue), + ContainerOverrides: &types.ContainerOverrides{ Command: command, Environment: environmentOverwrite, }, } - _, err = batchClient.SubmitJob(input) + _, err = batchClient.SubmitJob(context.TODO(), input) if err != nil { return err } @@ -104,8 +105,8 @@ func uploadMessageToS3(batchJob BatchJob) error { } // Upload message - _, err = s3.GetSession(batchJob.IsDebug).UploadWithSettingsRevised(jobBytes, batchJob.MessagesBucketName, s3.S3UploadSettings{ - FileName: utils.PointerToValue(batchJob.Name), + _, err = s3.GetClient(batchJob.IsDebug).UploadWithSettingsRevised(jobBytes, batchJob.MessagesBucketName, s3.S3UploadSettings{ + FileName: batchJob.Name, }) if err != nil { return err @@ -116,7 +117,7 @@ func uploadMessageToS3(batchJob BatchJob) error { func RetrieveMessageFromS3(filename string, messagesBucketName string, isDebug bool) ([]byte, error) { // get the file contents - rawObject, err := s3.GetSession(isDebug).GetObject(messagesBucketName, filename, isDebug) + rawObject, err := s3.GetClient(isDebug).GetObject(messagesBucketName, filename, isDebug) if err != nil { return []byte{}, err } diff --git a/errors/errors.go b/errors/errors.go index 0eae331099ed9dd70d372bd1dce4f895aa2eda38..521075c5a3fb8999aadd1a9d967148ecc7f70299 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -1,8 +1,10 @@ package errors import ( + "errors" "fmt" - "github.com/aws/aws-sdk-go/aws/awserr" + + "github.com/aws/smithy-go" pkg_errors "github.com/pkg/errors" ) @@ -127,8 +129,9 @@ func AWSErrorExceptionCode(err error) string { return "" } - if awsError, ok := err.(awserr.Error); ok { - return awsError.Code() + var apiErr *smithy.GenericAPIError + if errors.As(err, &apiErr) { + return apiErr.Code } return "" } @@ -138,8 +141,9 @@ func AWSErrorWithoutExceptionCode(err error) error { return nil } - if awsError, ok := err.(awserr.Error); ok { - return Error(awsError.Message()) + var apiErr *smithy.GenericAPIError + if errors.As(err, &apiErr) { + return Error(apiErr.Message) } return err } diff --git a/go.mod b/go.mod index b976fa9abe37d4142fecf9f60790fa07245ebaee..12ed98d963523a922278abbb1f087dc2fbdb5dd6 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de github.com/aws/aws-lambda-go v1.26.0 github.com/aws/aws-sdk-go v1.44.180 + github.com/aws/aws-sdk-go-v2/credentials v1.17.10 github.com/aws/aws-secretsmanager-caching-go v1.1.0 github.com/dlsniper/debugger v0.6.0 github.com/go-pg/pg/v10 v10.10.6 @@ -29,6 +30,26 @@ require ( ) require ( + github.com/aws/aws-sdk-go-v2 v1.26.1 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect + github.com/aws/aws-sdk-go-v2/config v1.27.10 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 // indirect + github.com/aws/aws-sdk-go-v2/service/batch v1.36.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 // indirect + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.28.6 // indirect + github.com/aws/aws-sdk-go-v2/service/sqs v1.31.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.20.4 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 // indirect + github.com/aws/smithy-go v1.20.2 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/go-errors/errors v1.4.1 // indirect diff --git a/go.sum b/go.sum index 6e5df8975d2a78f5fe77070dfd931a8bbb558dea..4f8eb3def2aa4a7398558475145d5e41f8ab4361 100644 --- a/go.sum +++ b/go.sum @@ -9,20 +9,65 @@ github.com/aws/aws-lambda-go v1.26.0/go.mod h1:jJmlefzPfGnckuHdXX7/80O3BvUUi12XO github.com/aws/aws-sdk-go v1.19.23/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.44.180 h1:VLZuAHI9fa/3WME5JjpVjcPCNfpGHVMiHx8sLHWhMgI= github.com/aws/aws-sdk-go v1.44.180/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go-v2 v1.17.3 h1:shN7NlnVzvDUgPQ+1rLMSxY8OWRNDRYtiqe0p/PgrhY= github.com/aws/aws-sdk-go-v2 v1.17.3/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= +github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg= github.com/aws/aws-sdk-go-v2/config v1.18.8/go.mod h1:5XCmmyutmzzgkpk/6NYTjeWb6lgo9N170m1j6pQkIBs= +github.com/aws/aws-sdk-go-v2/config v1.27.10 h1:PS+65jThT0T/snC5WjyfHHyUgG+eBoupSDV+f838cro= +github.com/aws/aws-sdk-go-v2/config v1.27.10/go.mod h1:BePM7Vo4OBpHreKRUMuDXX+/+JWP38FLkzl5m27/Jjs= +github.com/aws/aws-sdk-go-v2/credentials v1.13.8 h1:vTrwTvv5qAwjWIGhZDSBH/oQHuIQjGmD232k01FUh6A= github.com/aws/aws-sdk-go-v2/credentials v1.13.8/go.mod h1:lVa4OHbvgjVot4gmh1uouF1ubgexSCN92P6CJQpT0t8= +github.com/aws/aws-sdk-go-v2/credentials v1.17.10 h1:qDZ3EA2lv1KangvQB6y258OssCHD0xvaGiEDkG4X/10= +github.com/aws/aws-sdk-go-v2/credentials v1.17.10/go.mod h1:6t3sucOaYDwDssHQa0ojH1RpmVmF5/jArkye1b2FKMI= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21/go.mod h1:ugwW57Z5Z48bpvUyZuaPy4Kv+vEfJWnIrky7RmkBvJg= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27/go.mod h1:a1/UpzeyBBerajpnP5nGZa9mGzsBn5cOKxm6NWQsvoI= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21/go.mod h1:+Gxn8jYn5k9ebfHEqlhrMirFjSW0v0C9fI+KN5vk2kE= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28/go.mod h1:yRZVr/iT0AqyHeep00SZ4YfBAKojXz08w3XMBscdi0c= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 h1:81KE7vaZzrl7yHBYHVEzYB8sypz11NMOZ40YlWvPxsU= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5/go.mod h1:LIt2rg7Mcgn09Ygbdh/RdIm0rQ+3BNkbP1gyVMFtRK0= +github.com/aws/aws-sdk-go-v2/service/batch v1.36.1 h1:OY9+Dt4FkK6q2VHKAB8zY4nEKOhkziVOtxCPnS94leM= +github.com/aws/aws-sdk-go-v2/service/batch v1.36.1/go.mod h1:JuPGVm7DzXD73vZBQsZwlDzoJeZewN08swLBGiU47K8= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 h1:ZMeFZ5yk+Ek+jNr1+uwCd2tG89t6oTS5yVWpa6yy2es= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7/go.mod h1:mxV05U+4JiHqIpGqqYXOHLPKUC6bDXC44bsUhNjOEwY= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21/go.mod h1:lRToEJsn+DRA9lW4O9L9+/3hjTkUzlzyzHqn8MTds5k= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 h1:f9RyWNtS8oH7cZlbn+/JNPpjUk5+5fLd5lM9M0i49Ys= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5/go.mod h1:h5CoMZV2VF297/VLhRhO1WF+XYWOzXo+4HsObA4HjBQ= +github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 h1:6cnno47Me9bRykw9AEv9zkXE+5or7jz8TsskTTccbgc= +github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1/go.mod h1:qmdkIIAC+GCLASF7R2whgNrJADz0QZPX+Seiw/i4S3o= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.28.6 h1:TIOEjw0i2yyhmhRry3Oeu9YtiiHWISZ6j/irS1W3gX4= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.28.6/go.mod h1:3Ba++UwWd154xtP4FRX5pUK3Gt4up5sDHCve6kVfE+g= +github.com/aws/aws-sdk-go-v2/service/sqs v1.31.4 h1:mE2ysZMEeQ3ulHWs4mmc4fZEhOfeY1o6QXAfDqjbSgw= +github.com/aws/aws-sdk-go-v2/service/sqs v1.31.4/go.mod h1:lCN2yKnj+Sp9F6UzpoPPTir+tSaC9Jwf6LcmTqnXFZw= github.com/aws/aws-sdk-go-v2/service/sso v1.12.0/go.mod h1:wo/B7uUm/7zw/dWhBJ4FXuw1sySU5lyIhVg1Bu2yL9A= +github.com/aws/aws-sdk-go-v2/service/sso v1.20.4 h1:WzFol5Cd+yDxPAdnzTA5LmpHYSWinhmSj4rQChV0ee8= +github.com/aws/aws-sdk-go-v2/service/sso v1.20.4/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.0/go.mod h1:TZSH7xLO7+phDtViY/KUp9WGCJMQkLJ/VpgkTFd5gh8= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak= github.com/aws/aws-sdk-go-v2/service/sts v1.18.0/go.mod h1:+lGbb3+1ugwKrNTWcf2RT05Xmp543B06zDFTwiTLp7I= +github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU= +github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw= github.com/aws/aws-secretsmanager-caching-go v1.1.0 h1:vcV94XGJ9KouXKYBTMqgrBw96Tae8JKLmoUZ5SbaXNo= github.com/aws/aws-secretsmanager-caching-go v1.1.0/go.mod h1:wahQpJP1dZKMqjGFAjGCqilHkTlN0zReGWocPLbXmxg= +github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= +github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -89,6 +134,7 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= +github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/inconshreveable/log15 v3.0.0-testing.3+incompatible h1:zaX5fYT98jX5j4UhO/WbfY8T1HkgVrydiDMC9PWqGCo= github.com/inconshreveable/log15 v3.0.0-testing.3+incompatible/go.mod h1:cOaXtrgN4ScfRrD9Bre7U1thNq5RtJ8ZoP4iXVGRj6o= @@ -110,6 +156,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -308,6 +355,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= diff --git a/handler_utils/request.go b/handler_utils/request.go index ac13d59ee7dacbb6d98c2110c7f13d9bc91a5240..ef101c40b64023109ad7da2603f4dad2509117b4 100644 --- a/handler_utils/request.go +++ b/handler_utils/request.go @@ -3,15 +3,19 @@ package handler_utils import ( "bytes" "context" - "github.com/aws/aws-sdk-go/aws/credentials" - v4 "github.com/aws/aws-sdk-go/aws/signer/v4" - "github.com/go-resty/resty/v2" + "crypto/sha256" + "encoding/hex" "io" "net/http" "os" "strings" "time" + "github.com/aws/aws-sdk-go-v2/aws" + v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4" + "github.com/aws/aws-sdk-go-v2/credentials" + "github.com/go-resty/resty/v2" + "github.com/aws/aws-lambda-go/lambdacontext" ) @@ -69,9 +73,29 @@ func SignAWSRestyClient(client *resty.Client, accessKeyID, secretAccessKey strin // SignAWSRequest wraps and executes http.NewRequest and adds a sig version 4 signature for AWS API Gateway func SignAWSHttpRequest(request *http.Request, accessKeyID, secretAccessKey string, bodySeeker io.ReadSeeker) error { + credsCache := aws.NewCredentialsCache(credentials.NewStaticCredentialsProvider(accessKeyID, secretAccessKey, "")) + creds, err := credsCache.Retrieve(request.Context()) + if err != nil { + return err + } + + payload, err := io.ReadAll(request.Body) + if err != nil { + return err + } + payloadHash := sha256.Sum256(payload) + hexEncodedPayloadHash := hex.EncodeToString(payloadHash[:]) + // Use AWS SDK to sign the request for API gateway, i.e. execute-api, and the current region - _, err := v4.NewSigner(credentials.NewStaticCredentials(accessKeyID, secretAccessKey, "")). - Sign(request, bodySeeker, "execute-api", os.Getenv("AWS_REGION"), time.Now()) + err = v4.NewSigner(). + SignHTTP(request.Context(), + creds, + request, + hexEncodedPayloadHash, + "execute-api", + os.Getenv("AWS_REGION"), + time.Now(), + ) if err != nil { return err } diff --git a/oauth/oauth.go b/oauth/oauth.go index d0c4e1d085c93e16eb26f564e073e07ddd50251c..a0e9fff37d4d5e42abb9306eb911ee18feba08ed 100644 --- a/oauth/oauth.go +++ b/oauth/oauth.go @@ -1,13 +1,14 @@ package oauth import ( - "github.com/aws/aws-sdk-go/aws" - "github.com/google/uuid" - "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/encryption" "net/url" "strconv" "strings" "time" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/google/uuid" + "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/encryption" ) type Oauth1 struct { diff --git a/s3/s3.go b/s3/s3.go index 7d41422739e0f2d4049e7de7964be89c9aca821b..aa573f739e886dda7f391f2dfb64a5f5d8f69aca 100644 --- a/s3/s3.go +++ b/s3/s3.go @@ -2,23 +2,26 @@ package s3 import ( "bytes" + "context" "encoding/binary" "fmt" - "github.com/aws/aws-sdk-go/aws/credentials" - "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/secrets_manager" "net/url" "os" "path" "strings" "time" - "github.com/aws/aws-sdk-go/aws/awserr" - "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/credentials" + "github.com/aws/smithy-go" + "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/secrets_manager" + + std_errors "errors" - "github.com/aws/aws-sdk-go/aws/session" + "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/s3" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/google/uuid" ) @@ -82,14 +85,14 @@ const ( ) var ( - sessions = map[string]*SessionWithHelpers{} + clients = map[string]*ClientWithHelpers{} ) -type SessionWithHelpers struct { - S3Session *s3.S3 +type ClientWithHelpers struct { + S3Client *s3.Client } -func GetSession(isDebug bool, region ...string) *SessionWithHelpers { +func GetClient(isDebug bool, region ...string) *ClientWithHelpers { s3Region := os.Getenv("AWS_REGION") // Set custom region @@ -97,46 +100,41 @@ func GetSession(isDebug bool, region ...string) *SessionWithHelpers { s3Region = region[0] } - // Check if session exists for region, if it does return it - if s3Session, ok := sessions[s3Region]; ok { - return s3Session - } - - // Setup session - s3Credentials := GetS3SessionCredentials(isDebug) - options := session.Options{ - Config: aws.Config{ - Region: aws.String(s3Region), - Credentials: s3Credentials, - }, + // Check if client exists for region, if it does return it + if s3Client, ok := clients[s3Region]; ok { + return s3Client } - sess, err := session.NewSessionWithOptions(options) + cfg, err := config.LoadDefaultConfig(context.TODO(), + config.WithRegion(s3Region), + config.WithCredentialsProvider(GetS3CredentialsProvider(isDebug)), + ) if err != nil { return nil } - s3Session := NewSession(sess) - sessions[s3Region] = s3Session - return s3Session + s3Client := NewClient(cfg) + + clients[s3Region] = s3Client + return s3Client } -func GetS3SessionCredentials(isDebug bool) *credentials.Credentials { +func GetS3CredentialsProvider(isDebug bool) credentials.StaticCredentialsProvider { secretID := os.Getenv("S3_SECRET_ID") - s3Credentials, err := secrets_manager.GetS3UploadCredentials(secretID, isDebug) + s3CredentialsProvider, err := secrets_manager.GetS3UploadCredentialsProvider(secretID, isDebug) if err != nil { - return nil + return credentials.StaticCredentialsProvider{} } - return s3Credentials + return s3CredentialsProvider } -func NewSession(session *session.Session) *SessionWithHelpers { - return &SessionWithHelpers{ - S3Session: s3.New(session), +func NewClient(cfg aws.Config) *ClientWithHelpers { + return &ClientWithHelpers{ + S3Client: s3.NewFromConfig(cfg), } } -func (s SessionWithHelpers) Upload(data []byte, bucket, fileName string, metadata *map[string]*string) (*s3.PutObjectOutput, error) { +func (s ClientWithHelpers) Upload(data []byte, bucket, fileName string, metadata *map[string]string) (*s3.PutObjectOutput, error) { mimeType := getTypeForFilename(fileName) putInput := &s3.PutObjectInput{ Bucket: aws.String(bucket), @@ -149,7 +147,7 @@ func (s SessionWithHelpers) Upload(data []byte, bucket, fileName string, metadat putInput.Metadata = *metadata } - response, err := s.S3Session.PutObject(putInput) + response, err := s.S3Client.PutObject(context.TODO(), putInput) if err != nil { return nil, err } @@ -157,7 +155,7 @@ func (s SessionWithHelpers) Upload(data []byte, bucket, fileName string, metadat return response, nil } -func (s SessionWithHelpers) UploadWithSettings(data []byte, bucket, fileName string, settings S3UploadSettings) (string, error) { +func (s ClientWithHelpers) UploadWithSettings(data []byte, bucket, fileName string, settings S3UploadSettings) (string, error) { if settings.MimeType == "" { settings.MimeType = getTypeForFilename(fileName) } @@ -175,7 +173,7 @@ func (s SessionWithHelpers) UploadWithSettings(data []byte, bucket, fileName str putInput.Expires = &expiry } - _, err := s.S3Session.PutObject(putInput) + _, err := s.S3Client.PutObject(context.TODO(), putInput) if err != nil { return "", err } @@ -201,7 +199,7 @@ func (s SessionWithHelpers) UploadWithSettings(data []byte, bucket, fileName str } // UploadWithSettingsRevised can be renamed to UploadWithSettings once original function has been deprecated. -func (s SessionWithHelpers) UploadWithSettingsRevised(data []byte, bucket string, settings S3UploadSettings) (S3UploadResponse, error) { +func (s ClientWithHelpers) UploadWithSettingsRevised(data []byte, bucket string, settings S3UploadSettings) (S3UploadResponse, error) { var fullFileName, uploadUrl string uuidString := "" @@ -244,7 +242,7 @@ func (s SessionWithHelpers) UploadWithSettingsRevised(data []byte, bucket string putInput.Expires = &expiry } - _, err := s.S3Session.PutObject(putInput) + _, err := s.S3Client.PutObject(context.TODO(), putInput) if err != nil { return S3UploadResponse{}, err } @@ -283,7 +281,7 @@ func (s SessionWithHelpers) UploadWithSettingsRevised(data []byte, bucket string return response, nil } -func (s SessionWithHelpers) UploadWith1DayExpiry(data []byte, bucket, fileName string, mimeType MIMEType, shouldDownloadInsteadOfOpen bool) (string, error) { +func (s ClientWithHelpers) UploadWith1DayExpiry(data []byte, bucket, fileName string, mimeType MIMEType, shouldDownloadInsteadOfOpen bool) (string, error) { if mimeType == "" { mimeType = getTypeForFilename(fileName) } @@ -303,7 +301,16 @@ func (s SessionWithHelpers) UploadWith1DayExpiry(data []byte, bucket, fileName s } // GetSignedDownloadURL gets a signed download URL for the duration. If scv is nil, a new session will be created. -func (s SessionWithHelpers) GetSignedDownloadURL(bucket string, fileName string, duration time.Duration, headers ...map[string]string) (string, error) { +func (s ClientWithHelpers) GetSignedDownloadURL(bucket string, fileName string, duration time.Duration, headers ...map[string]string) (string, error) { + fileExists, err := s.FileExists(bucket, fileName) + if err != nil { + return "", err + } + + if !fileExists { + return "", errors.Error("File does not exist") + } + getInput := &s3.GetObjectInput{ Bucket: aws.String(bucket), Key: aws.String(fileName), @@ -315,32 +322,24 @@ func (s SessionWithHelpers) GetSignedDownloadURL(bucket string, fileName string, } } - getRequest, _ := s.S3Session.GetObjectRequest(getInput) - - fileExists, err := s.FileExists(bucket, fileName) - if err != nil { - return "", err - } - - if !fileExists { - return "", errors.Error("File does not exist") - } + presignClient := s3.NewPresignClient(s.S3Client) + getRequest, err := presignClient.PresignGetObject(context.TODO(), getInput, func(po *s3.PresignOptions) { + po.Expires = duration + }) - return getRequest.Presign(duration) + return getRequest.URL, err } -func (s SessionWithHelpers) FileExists(bucket string, fileName string) (bool, error) { - _, err := s.S3Session.HeadObject(&s3.HeadObjectInput{ +func (s ClientWithHelpers) FileExists(bucket string, fileName string) (bool, error) { + _, err := s.S3Client.HeadObject(context.TODO(), &s3.HeadObjectInput{ Bucket: aws.String(bucket), Key: aws.String(fileName), }) if err != nil { - if aerr, ok := err.(awserr.Error); ok { - switch aerr.Code() { - case "NotFound": // s3.ErrCodeNoSuchKey does not work, aws is missing this error code so we hardwire a string + var apiErr *smithy.GenericAPIError + if std_errors.As(err, &apiErr) { + if apiErr.Code == "NotFound" { return false, nil - default: - return false, err } } return false, err @@ -349,7 +348,7 @@ func (s SessionWithHelpers) FileExists(bucket string, fileName string) (bool, er } // UploadWithFileExtension will upload a file to S3 and return a standard S3UploadResponse. -func (s SessionWithHelpers) UploadWithFileExtension(data []byte, bucket, filePrefix, fileExt string, mimeType MIMEType) (*S3UploadResponse, error) { +func (s ClientWithHelpers) UploadWithFileExtension(data []byte, bucket, filePrefix, fileExt string, mimeType MIMEType) (*S3UploadResponse, error) { fileName := fmt.Sprintf("%s_%s.%s", filePrefix, uuid.New().String(), fileExt) duration := 24 * time.Hour @@ -391,24 +390,24 @@ func getTypeForFilename(f string) MIMEType { return MIMETypeDefault } -func (s SessionWithHelpers) GetObject(bucket string, fileName string, isDebug bool) (*s3.GetObjectOutput, error) { +func (s ClientWithHelpers) GetObject(bucket string, fileName string, isDebug bool) (*s3.GetObjectOutput, error) { getInput := &s3.GetObjectInput{ Bucket: aws.String(bucket), Key: aws.String(fileName), } - getObjectOutput, err := s.S3Session.GetObject(getInput) + getObjectOutput, err := s.S3Client.GetObject(context.TODO(), getInput) if err != nil { return nil, err } return getObjectOutput, nil } -func (s SessionWithHelpers) GetObjectMetadata(bucket string, fileName string, isDebug bool) (map[string]*string, error) { +func (s ClientWithHelpers) GetObjectMetadata(bucket string, fileName string, isDebug bool) (map[string]string, error) { headObjectInput := &s3.HeadObjectInput{ Bucket: aws.String(bucket), Key: aws.String(fileName), } - headObjectOutput, err := s.S3Session.HeadObject(headObjectInput) + headObjectOutput, err := s.S3Client.HeadObject(context.TODO(), headObjectInput) if err != nil { return nil, err } @@ -416,7 +415,7 @@ func (s SessionWithHelpers) GetObjectMetadata(bucket string, fileName string, is } // MoveObjectBucketToBucket - Move object from one S3 bucket to another -func (s SessionWithHelpers) MoveObjectBucketToBucket(sourceBucket string, destinationBucket string, sourceFileName string, destinationFileName string, settings S3UploadSettings) error { +func (s ClientWithHelpers) MoveObjectBucketToBucket(sourceBucket string, destinationBucket string, sourceFileName string, destinationFileName string, settings S3UploadSettings) error { err := s.CopyObjectBucketToBucket(sourceBucket, destinationBucket, sourceFileName, destinationFileName, settings) if err != nil { @@ -432,7 +431,7 @@ func (s SessionWithHelpers) MoveObjectBucketToBucket(sourceBucket string, destin } // CopyObjectBucketToBucket - Copy an object from one S3 bucket to another -func (s SessionWithHelpers) CopyObjectBucketToBucket(sourceBucket string, destinationBucket string, sourceFileName string, destinationFilename string, settings S3UploadSettings) error { +func (s ClientWithHelpers) CopyObjectBucketToBucket(sourceBucket string, destinationBucket string, sourceFileName string, destinationFilename string, settings S3UploadSettings) error { // copy the file copySource := url.QueryEscape(sourceBucket + "/" + sourceFileName) copyObjectInput := &s3.CopyObjectInput{ @@ -446,13 +445,14 @@ func (s SessionWithHelpers) CopyObjectBucketToBucket(sourceBucket string, destin copyObjectInput.Expires = &expiry } - _, err := s.S3Session.CopyObject(copyObjectInput) + _, err := s.S3Client.CopyObject(context.TODO(), copyObjectInput) if err != nil { return err } // wait to see if the file copied successfully - err = s.S3Session.WaitUntilObjectExists(&s3.HeadObjectInput{Bucket: aws.String(destinationBucket), Key: aws.String(destinationFilename)}) + waiter := s3.NewObjectExistsWaiter(s.S3Client) + err = waiter.Wait(context.TODO(), &s3.HeadObjectInput{Bucket: aws.String(destinationBucket), Key: aws.String(destinationFilename)}, 5*time.Minute) if err != nil { return err } @@ -461,22 +461,20 @@ func (s SessionWithHelpers) CopyObjectBucketToBucket(sourceBucket string, destin } // DeleteObjectFromBucket - Delete an object from an S3 bucket -func (s SessionWithHelpers) DeleteObjectFromBucket(bucket string, fileName string) error { +func (s ClientWithHelpers) DeleteObjectFromBucket(bucket string, fileName string) error { // delete the file deleteObjectInput := &s3.DeleteObjectInput{ Bucket: aws.String(bucket), Key: aws.String(fileName), } - _, err := s.S3Session.DeleteObject(deleteObjectInput) + _, err := s.S3Client.DeleteObject(context.TODO(), deleteObjectInput) if err != nil { return err } // wait to see if the file deleted successfully - err = s.S3Session.WaitUntilObjectNotExists(&s3.HeadObjectInput{ - Bucket: aws.String(bucket), // the bucket we are deleting from - Key: aws.String(fileName), // the filename we are deleting - }) + waiter := s3.NewObjectNotExistsWaiter(s.S3Client) + err = waiter.Wait(context.TODO(), &s3.HeadObjectInput{Bucket: aws.String(bucket), Key: aws.String(fileName)}, 5*time.Minute) if err != nil { return err } diff --git a/secrets_manager/secrets_manager.go b/secrets_manager/secrets_manager.go index 1b14632383ef988fc3773ae6279218c01678e840..a58846781dacd7991b408ee1000935cfa3b108b8 100644 --- a/secrets_manager/secrets_manager.go +++ b/secrets_manager/secrets_manager.go @@ -45,27 +45,25 @@ func GetDatabaseCredentials(secretID string, isDebug bool) (DatabaseCredentials, return credentials, nil } -func GetS3UploadCredentials(secretID string, isDebug bool) (aws.Credentials, error) { +func GetS3UploadCredentialsProvider(secretID string, isDebug bool) (credentials.StaticCredentialsProvider, error) { secret, _ := GetSecret(secretID, isDebug) var secretValue map[string]string err := struct_utils.UnmarshalJSON([]byte(secret), &secretValue) if err != nil { - return aws.Credentials{}, err + return credentials.StaticCredentialsProvider{}, err } accessKeyID, ok := secretValue["AccessKeyID"] if !ok { - return aws.Credentials{}, err + return credentials.StaticCredentialsProvider{}, err } secretKey, ok := secretValue["SecretKey"] if !ok { - return aws.Credentials{}, err + return credentials.StaticCredentialsProvider{}, err } - creds := aws.NewCredentialsCache(credentials.NewStaticCredentialsProvider(accessKeyID, secretKey, "")) - - return creds.Retrieve(context.TODO()) + return credentials.NewStaticCredentialsProvider(accessKeyID, secretKey, ""), nil } func instantiateSecretManagerClient(isDebug bool) (err error) { diff --git a/sqs/sqs.go b/sqs/sqs.go index cf452f77eb080211a46efb69f9983e2b1bc7a933..97ad23d5fd3ca7f90095105dd4fbafc853c70cb9 100644 --- a/sqs/sqs.go +++ b/sqs/sqs.go @@ -3,21 +3,24 @@ package sqs /*Package sqs provides a simple interface to send messages to AWS SQS*/ import ( + "context" "encoding/json" "fmt" + "io" + "time" + "github.com/google/uuid" "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/s3" - "io/ioutil" - "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/sqs" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/sqs" + "github.com/aws/aws-sdk-go-v2/service/sqs/types" "github.com/go-resty/resty/v2" "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/logs" ) -var sqsClient *sqs.SQS +var sqsClient *sqs.Client const SQSMessageOnS3Key = "message-on-s3" @@ -26,10 +29,10 @@ type Messenger struct { QueueName string QueueURL string Region string - S3Session *s3.SessionWithHelpers + S3Client *s3.ClientWithHelpers S3BucketName string MessageGroupID *string - DelaySeconds *int64 + DelaySeconds int32 RequestIDHeaderKey string } @@ -37,20 +40,14 @@ type Messenger struct { // awsRegion - region that the queue was created // awsQueue - name of the queue // Note: Calling code needs SQS IAM permissions -func NewSQSClient(awsRegion string) (*sqs.SQS, error) { - // Make an AWS session - sess, err := session.NewSessionWithOptions(session.Options{ - Config: aws.Config{ - Region: aws.String(awsRegion), - }, - }) - +func NewSQSClient(awsRegion string) (*sqs.Client, error) { + cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion(awsRegion)) if err != nil { return nil, err } - // Create SQS service - sqsClient = sqs.New(sess) + sqsClient := sqs.NewFromConfig(cfg) + return sqsClient, err } @@ -58,10 +55,10 @@ func NewSQSClient(awsRegion string) (*sqs.SQS, error) { // headers - string message attributes of the SQS message (see AWS SQS documentation) // body - body of the SQS message (see AWS SQS documentation) func (m *Messenger) SendSQSMessage(headers map[string]string, body string, currentRequestID *string, sqsType string) (string, error) { - msgAttrs := make(map[string]*sqs.MessageAttributeValue) + msgAttrs := make(map[string]types.MessageAttributeValue) for key, val := range headers { - msgAttrs[key] = &sqs.MessageAttributeValue{ + msgAttrs[key] = types.MessageAttributeValue{ DataType: aws.String("String"), StringValue: aws.String(val), } @@ -69,26 +66,26 @@ func (m *Messenger) SendSQSMessage(headers map[string]string, body string, curre // Add request ID if currentRequestID != nil { - msgAttrs[m.RequestIDHeaderKey] = &sqs.MessageAttributeValue{ + msgAttrs[m.RequestIDHeaderKey] = types.MessageAttributeValue{ DataType: aws.String("String"), StringValue: aws.String(*currentRequestID), } } - msgAttrs["type"] = &sqs.MessageAttributeValue{ + msgAttrs["type"] = types.MessageAttributeValue{ DataType: aws.String("String"), StringValue: aws.String(sqsType), } // SQS has max of 15 minutes delay // https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html - if m.DelaySeconds != nil && aws.Int64Value(m.DelaySeconds) > 900 { - m.DelaySeconds = aws.Int64(900) + if m.DelaySeconds != 0 && m.DelaySeconds > 900 { + m.DelaySeconds = 900 } var res *sqs.SendMessageOutput var err error - res, err = sqsClient.SendMessage(&sqs.SendMessageInput{ + res, err = sqsClient.SendMessage(context.TODO(), &sqs.SendMessageInput{ MessageAttributes: msgAttrs, MessageBody: aws.String(body), QueueUrl: &m.QueueURL, @@ -107,8 +104,8 @@ func SendSQSMessage(msgr Messenger, objectToSend interface{}, currentRequestID * if isDebug { go func() { - if msgr.DelaySeconds != nil { - delay := *msgr.DelaySeconds + if msgr.DelaySeconds != 0 { + delay := msgr.DelaySeconds time.Sleep(time.Second * time.Duration(delay)) } resty.New().R(). @@ -147,7 +144,7 @@ func SendSQSMessage(msgr Messenger, objectToSend interface{}, currentRequestID * filename := fmt.Sprintf("%v-%v", sqsType, id.String()) logs.Info("SQS S3 %s", filename) - err := uploadMessageToS3(msgr.S3Session, msgr.S3BucketName, filename, jsonBytes) + err := uploadMessageToS3(msgr.S3Client, msgr.S3BucketName, filename, jsonBytes) if err != nil { return err } @@ -165,7 +162,7 @@ func SendSQSMessage(msgr Messenger, objectToSend interface{}, currentRequestID * return nil } -func uploadMessageToS3(session *s3.SessionWithHelpers, bucket string, name string, messageBytes []byte) error { +func uploadMessageToS3(session *s3.ClientWithHelpers, bucket string, name string, messageBytes []byte) error { // Upload message expiry := 24 * 7 * time.Hour // 3 days _, err := session.UploadWithSettings(messageBytes, bucket, name, s3.S3UploadSettings{ @@ -178,7 +175,7 @@ func uploadMessageToS3(session *s3.SessionWithHelpers, bucket string, name strin return nil } -func RetrieveMessageFromS3(session *s3.SessionWithHelpers, bucket string, filename string) ([]byte, error) { +func RetrieveMessageFromS3(session *s3.ClientWithHelpers, bucket string, filename string) ([]byte, error) { // get the file contents rawObject, err := session.GetObject(bucket, filename, false) if err != nil { @@ -187,7 +184,7 @@ func RetrieveMessageFromS3(session *s3.SessionWithHelpers, bucket string, filena // Read the message var bodyBytes []byte - bodyBytes, err = ioutil.ReadAll(rawObject.Body) + bodyBytes, err = io.ReadAll(rawObject.Body) if err != nil { logs.ErrorWithMsg("Could not read file", err) return []byte{}, err