👻

aws-sdk-go で S3 にファイルをアップロード

2020/10/01に公開

AWSの公式 Go SDK である aws-sdk-go で S3 にファイルをアップロードしてみました。

なお、このSDKはまだ正式リリースではなくAPIの仕様が変わる可能性があります(この記事は 2015/05/07 時点のものです)。

import


import (
	"github.com/awslabs/aws-sdk-go/aws"
	"github.com/awslabs/aws-sdk-go/aws/awsutil"
	"github.com/awslabs/aws-sdk-go/aws/credentials"
	"github.com/awslabs/aws-sdk-go/service/s3"
)

Credentials

APIにアクセスするためにCredentialsオブジェクトが必要です。

環境変数から作る場合:

creds := NewEnvCredentials()

KeyとSecretから作る場合:

creds := credentials.NewStaticCredentials("Your AWS Key", "Your AWS Secret", "")

他にもProviderインタフェースを渡す関数もあるので、ネットワーク経由でKeyとSecretを取ってくるようなものや、ファイルなどから読み込むものなど、自前で実装することも出来ます。

Config

config := aws.Config{
	Credentials: creds,
	Region:      "ap-northeast-1",
}

Configにはいくつかの設定がありますが、最低限必要と思われるCredentialsRegionを設定すれば他はデフォルト値で大丈夫なようです。

S3 Client

client := s3.New(&config)

API

params := &s3.PutObjectInput{
	Bucket:      aws.String("your_bucket_name"), // Required
	Key:         aws.String("your_s3_key"),    // Required
	ACL:         aws.String("public-read"),
	Body:        bytes.NewReader(body),
}
resp, err := client.PutObject(params)

Bodyにはio.ReadSeekerを渡します。

この記事はQiitaの記事をエクスポートしたものです

Discussion