この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
データアナリティクス事業本部の森脇です。
今回はaws-sdk-goを使って、S3へファイルをアップロードする方法についてご紹介したいと思います。
使用するGo言語のバージョンは1.13.6です。
前回ご紹介した、S3からファイルを取得する方法はこちら。
aws-sdk-goをインストールする
前回と同様、modulesを使ってaws-sdk-goをインストールします。
$ go mod init example.com/moriwaki/s3write
go: creating new go.mod: module example.com/moriwaki/s3write
$ go get -u github.com/aws/aws-sdk-go
go: finding github.com/aws/aws-sdk-go v1.28.9
go: downloading github.com/aws/aws-sdk-go v1.28.9
go: extracting github.com/aws/aws-sdk-go v1.28.9
$ cat go.mod
module example.com/moriwaki/s3write
go 1.13
require github.com/aws/aws-sdk-go v1.28.9 // indirect
今回はv1.28.9がインストールされました。
作っていく
main.goというファイルを作成し、実装していきます。
AWSのクレデンシャルは、aws-cliなどを使って事前に設定しておきます。
sessionを作成する
S3に接続するためにのsessionを作成します。
package main
import (
"github.com/aws/aws-sdk-go/aws/session"
)
func main() {
// sessionの作成
sess := session.Must(session.NewSessionWithOptions(session.Options{
Profile: "di",
SharedConfigState: session.SharedConfigEnable,
}))
}
「SharedConfigState」オプションの意味は、前回ご紹介した記事を参照ください。
S3にファイルをアップロードする
main.goと同じ階層に「sample.txt」というファイルを作成し、こちらをアップロードしてみます。
アップロードにはs3managerのUploaderを使用します。
package main
import (
"log"
"os"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
)
func main() {
// sessionの作成
sess := session.Must(session.NewSessionWithOptions(session.Options{
Profile: "di",
SharedConfigState: session.SharedConfigEnable,
}))
// ファイルを開く
targetFilePath := "./sample.txt"
file, err := os.Open(targetFilePath)
if err != nil {
log.Fatal(err)
}
defer file.Close()
bucketName := "xxx-bucket"
objectKey := "xxx-key"
// Uploaderを作成し、ローカルファイルをアップロード
uploader := s3manager.NewUploader(sess)
_, err = uploader.Upload(&s3manager.UploadInput{
Bucket: aws.String(bucketName),
Key: aws.String(objectKey),
Body: file,
})
if err != nil {
log.Fatal(err)
}
log.Println("done")
}
実行してみます。
$ go run main.go
2020/01/31 13:36:01 done
エラーが発生することなく、実行が完了しました。
Upload関数の引数に指定しているBodyの型はio.Readerのため、 ローカルファイル以外でも簡単にアップロードできそうです。
まとめ
aws-sdk-goを使うことで、簡単にローカルのファイルをアップロードすることができました。
次回はGo言語を使った文字コード変換を実践したいと思います。