From 49afc557e4d7b836e8077017c503248f8fb9d6aa Mon Sep 17 00:00:00 2001 From: nadavv169 <98017898+nadavv169@users.noreply.github.com> Date: Wed, 28 Feb 2024 20:28:59 +0200 Subject: [PATCH] S3 add storage class to metadata (#3369) Signed-off-by: nadavv169 --- bindings/aws/s3/s3.go | 20 ++++++++++++++++---- bindings/aws/s3/s3_test.go | 2 ++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/bindings/aws/s3/s3.go b/bindings/aws/s3/s3.go index f45510215c..545dd0cf3d 100644 --- a/bindings/aws/s3/s3.go +++ b/bindings/aws/s3/s3.go @@ -50,6 +50,7 @@ const ( metadataEncodeBase64 = "encodeBase64" metadataFilePath = "filePath" metadataPresignTTL = "presignTTL" + metadataStorageClass = "storageClass" metatadataContentType = "Content-Type" metadataKey = "key" @@ -83,6 +84,7 @@ type s3Metadata struct { InsecureSSL bool `json:"insecureSSL,string" mapstructure:"insecureSSL"` FilePath string `json:"filePath" mapstructure:"filePath" mdignore:"true"` PresignTTL string `json:"presignTTL" mapstructure:"presignTTL" mdignore:"true"` + StorageClass string `json:"storageClass" mapstructure:"storageClass" mdignore:"true"` } type createResponse struct { @@ -195,11 +197,17 @@ func (s *AWSS3) create(ctx context.Context, req *bindings.InvokeRequest) (*bindi r = b64.NewDecoder(b64.StdEncoding, r) } + var storageClass *string + if metadata.StorageClass != "" { + storageClass = aws.String(metadata.StorageClass) + } + resultUpload, err := s.uploader.UploadWithContext(ctx, &s3manager.UploadInput{ - Bucket: ptr.Of(metadata.Bucket), - Key: ptr.Of(key), - Body: r, - ContentType: contentType, + Bucket: ptr.Of(metadata.Bucket), + Key: ptr.Of(key), + Body: r, + ContentType: contentType, + StorageClass: storageClass, }) if err != nil { return nil, fmt.Errorf("s3 binding error: uploading failed: %w", err) @@ -436,6 +444,10 @@ func (metadata s3Metadata) mergeWithRequestMetadata(req *bindings.InvokeRequest) merged.PresignTTL = val } + if val, ok := req.Metadata[metadataStorageClass]; ok && val != "" { + merged.StorageClass = val + } + return merged, nil } diff --git a/bindings/aws/s3/s3_test.go b/bindings/aws/s3/s3_test.go index d08bae390c..4700b9700b 100644 --- a/bindings/aws/s3/s3_test.go +++ b/bindings/aws/s3/s3_test.go @@ -83,6 +83,7 @@ func TestMergeWithRequestMetadata(t *testing.T) { "encodeBase64": "false", "filePath": "/usr/vader.darth", "presignTTL": "15s", + "storageClass": "STANDARD_IA", } mergedMeta, err := meta.mergeWithRequestMetadata(&request) @@ -99,6 +100,7 @@ func TestMergeWithRequestMetadata(t *testing.T) { assert.False(t, mergedMeta.EncodeBase64) assert.Equal(t, "/usr/vader.darth", mergedMeta.FilePath) assert.Equal(t, "15s", mergedMeta.PresignTTL) + assert.Equal(t, "STANDARD_IA", mergedMeta.StorageClass) }) t.Run("Has invalid merged metadata decodeBase64", func(t *testing.T) {