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にはいくつかの設定がありますが、最低限必要と思われるCredentialsとRegionを設定すれば他はデフォルト値で大丈夫なようです。
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を渡します。