"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go를 사용하여 AWS S3에 파일 업로드를 스트리밍하는 방법은 무엇입니까?

Go를 사용하여 AWS S3에 파일 업로드를 스트리밍하는 방법은 무엇입니까?

2024년 11월 10일에 게시됨
검색:628

How to Stream File Uploads to AWS S3 Using Go?

Go를 사용하여 AWS S3에 파일 업로드 스트리밍

개요

메모리와 디스크 공간을 최소화하면서 대용량 파일을 AWS S3에 직접 업로드하는 것은 필수 작업입니다. 클라우드 컴퓨팅에서. 이 가이드에서는 Go용 AWS SDK를 사용하여 이를 달성하는 방법을 보여줍니다.

솔루션

파일 업로드를 S3에 직접 스트리밍하려면 s3manager 패키지를 활용할 수 있습니다. 단계별 솔루션은 다음과 같습니다.

  1. AWS 자격 증명 및 세션 구성:

    • AWS 액세스 키와 비밀을 설정합니다. 또는 기본 자격 증명 공급자를 사용하십시오.
    • 지정된 구성으로 AWS 세션을 초기화합니다.
  2. S3 업로더 생성:

    • 세션 및 선택적 구성 설정을 사용하여 S3 업로더를 초기화합니다.
    • 부분 크기, 동시성, 최대 업로드 부분과 같은 매개변수를 구성할 수 있습니다.
  3. 파일 열기:

    • os.Open 기능을 사용하여 업로드하려는 파일을 엽니다.
  4. 파일 업로드:

    • 업로더를 사용합니다. 적절한 파일 정보(버킷, 키 및 파일 포인터)와 함께 업로드 방법을 사용합니다.

예제 코드

다음 코드 샘플은 s3manager를 사용하여 AWS S3에 대용량 파일 업로드를 스트리밍하는 방법을 보여줍니다.

package main

import (
    "fmt"
    "os"

    "github.com/aws/aws-sdk-go/aws/credentials"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3/s3manager"
)

const (
    filename      = "file_name.zip"
    myBucket      = "myBucket"
    myKey         = "file_name.zip"
    accessKey     = ""
    accessSecret  = ""
)

func main() {
    var awsConfig *aws.Config
    if accessKey == "" || accessSecret == "" {
        //load default credentials
        awsConfig = &aws.Config{
            Region: aws.String("us-west-2"),
        }
    } else {
        awsConfig = &aws.Config{
            Region:      aws.String("us-west-2"),
            Credentials: credentials.NewStaticCredentials(accessKey, accessSecret, ""),
        }
    }

    // The session the S3 Uploader will use
    sess := session.Must(session.NewSession(awsConfig))

    // Create an uploader with the session and default options
    //uploader := s3manager.NewUploader(sess)

    // Create an uploader with the session and custom options
    uploader := s3manager.NewUploader(sess, func(u *s3manager.Uploader) {
        u.PartSize = 5 * 1024 * 1024 // The minimum/default allowed part size is 5MB
        u.Concurrency = 2            // default is 5
    })

    //open the file
    f, err := os.Open(filename)
    if err != nil {
        fmt.Printf("failed to open file %q, %v", filename, err)
        return
    }
    //defer f.Close()

    // Upload the file to S3.
    result, err := uploader.Upload(&s3manager.UploadInput{
        Bucket: aws.String(myBucket),
        Key:    aws.String(myKey),
        Body:   f,
    })

    //in case it fails to upload
    if err != nil {
        fmt.Printf("failed to upload file, %v", err)
        return
    }
    fmt.Printf("file uploaded to, %s\n", result.Location)
}

이 단계를 따르면 메모리 사용을 최소화하면서 대규모 멀티파트/양식 데이터 파일을 AWS S3에 직접 효율적으로 업로드할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3