Go, AWS S3에 파일 올리고 다운받기

2020. 9. 17. 09:25개발/GO

다른 곳에서 사용하던 putobject, getobject를 go에서 구현을 해보려고 했습니다.

사실 볼 자료는 AWS에 많고 예제도 많지만, 딱 원하는 부분이 시원하게 나오지 않아서 조금 해맸습니다.

 

AWS SDK for Go Developer Guide

 

AWS SDK for Go Developer Guide - AWS SDK for Go

AWS SDK for Go Developer Guide Welcome to the AWS SDK for Go. The AWS SDK for Go provides APIs and utilities that developers can use to build Go applications that use AWS services, such as Amazon Elastic Compute Cloud (Amazon EC2) and Amazon Simple Storage

docs.aws.amazon.com

git- AWS SDK for Go

 

aws/aws-sdk-go

AWS SDK for the Go programming language. Contribute to aws/aws-sdk-go development by creating an account on GitHub.

github.com

 

putobject

getGitList() 를 하게 되면 제가 기존에 사용하던 struct 값을 가져오게 되고,

json.Marshal을 통해 GITLIST.txt 파일에 넣어주는 부분입니다

bucket := "YOUR BUCKET"
key := "GITLIST.txt"

gitList := getGitList()
strGitList, _ := json.Marshal(gitList)

sess, err := session.NewSession(&aws.Config{
    Region: aws.String("ap-northeast-2")},
)

svc := s3.New(sess)

_, err = svc.PutObject(&s3.PutObjectInput{
    Body:   strings.NewReader(string(strGitList)),
    Bucket: &bucket,
    Key:    &key,
})
if err != nil {
    fmt.Printf("Failed to upload data to %s/%s, %s\n", bucket, key, err)
    return
}

 

getobject

s3에서 값을 가져와서 기존에 사용하던 struct 에까지 넣는 방법입니다.

bucket := "YOUR BUCKET"
key := "GITLIST.txt"

sess, err := session.NewSession(&aws.Config{
    Region: aws.String("ap-northeast-2")},
)

svc := s3.New(sess)

result, err := svc.GetObject(&s3.GetObjectInput{
    Bucket: &bucket,
    Key:    &key,
})
if err != nil {
    fmt.Printf("Failed to upload data to %s/%s, %s\n", bucket, key, err)
    return
}

buf := new(bytes.Buffer)
_, _ = buf.ReadFrom(result.Body)

content := buf.String()

gitList := GitList{}

json.Unmarshal([]byte(content), &gitList)

 

aws.Config

추가로 중간에 aws.Config를 설명하면 region은 제가 표시하기 위해 설정을  했으며,

그 이외에는 아직 제가 필요치 않아서 따로 설정을 하지 않았습니다.

자세한 문서는 docs.aws.amazon.com/sdk-for-go/api/aws/#Config 에서 보시면 되겠습니다.

 

#을 통해 문서가 잘 이동이 안되는데 제법 하단에 있습니다.

아니면 git 주소를 이용해도 됩니다. github.com/aws/aws-sdk-go/blob/v1.34.24/aws/config.go#L33-L267

'개발 > GO' 카테고리의 다른 글

Go, Git API를 이용해서 남의 최신 releases 정보 가져오기  (0) 2020.09.10