https://github.com/awslabs/aws-sdk-go
aws公式のsdkになるaws-sdk。
取り急ぎ、ファイル一覧取得と、ファイルのアップロードの2つだけ確認してみた。
ファイル一覧取得
package main
import (
"fmt"
"github.com/awslabs/aws-sdk-go/aws"
"github.com/awslabs/aws-sdk-go/gen/s3"
)
func main() {
accessKey := "<AWS_ACCESS_KEY_ID>"
secretKey := "<AWS_SECRET_ACCESS_KEY>"
bucket := "<bucket>"
creds := aws.Creds(accessKey, secretKey, "")
cli := s3.New(creds, s3.BucketLocationConstraintApNortheast1, nil)
resp, err := cli.ListObjects(&s3.ListObjectsRequest{
Bucket: aws.String(bucket),
})
if err != nil {
panic(err)
}
for _, c := range resp.Contents {
fmt.Println(*c.Key)
}
}
ファイルのアップロード
package main
import (
"fmt"
"github.com/awslabs/aws-sdk-go/aws"
"github.com/awslabs/aws-sdk-go/gen/s3"
)
func main() {
accessKey := "<AWS_ACCESS_KEY_ID>"
secretKey := "<AWS_SECRET_ACCESS_KEY>"
bucket := "<bucket>"
creds := aws.Creds(accessKey, secretKey, "")
cli := s3.New(creds, s3.BucketLocationConstraintApNortheast1, nil)
f, err := os.Open("./foo.jpg")
if err != nil {
panic(f)
}
defer f.Close()
fstat, err := f.Stat()
if err != nil {
panic(f)
}
_, err = cli.PutObject(&s3.PutObjectRequest{
Body: f,
Bucket: aws.String(bucket),
Key: aws.String("images/foo.jpg"),
ACL: aws.String(s3.BucketCannedACLPublicRead),
ContentType: aws.String("image/jpeg"),
ContentLength: aws.Long(fstat.Size()),
})
if err != nil {
panic(err)
}
}
所感
ドキュメントがまだ未整備なので
エラーや必須パラメータはAWSのAPIドキュメントを見る必要が出てくる。
A header you provided implies functionality that is not implemented
とか言われたら、
APIドキュメントを見て原因を確認していくことになる。
要はAWS client以上でも以下でもない感じ。