AWS SDK for Goがついにプレビュー版になりましたね!
まだまだ仕様が変わる気がしないでもありませんが現バージョン(v0.6.2)でのS3のアップロードサンプルをやってみます。
CloudFormationでS3bucketをつくる
S3バケットをつくりましょう。作り方は何でもいいです。今回はCloudFormationを使ってみます。
こんな感じのJSONを用意してStackを実行してS3バケットをつくってください。
バケット名は既にある名前だとつくれないので注意してください。
{
"AWSTemplateFormatVersion": "2010-09-09",
"Parameters": {
},
"Resources": {
"DemoBucket" : {
"Type" : "AWS::S3::Bucket",
"Properties" : {
"AccessControl" : "PublicReadWrite",
"BucketName" : "sample-demo",
"Tags": [
{
"Key": "Name",
"Value": "demo"
},
{
"Key": "Role",
"Value": "s3"
}
]
}
},
"DemoBucketPolicy" : {
"Type" : "AWS::S3::BucketPolicy",
"Properties" : {
"Bucket" : { "Ref" : "DemoBucket" },
"PolicyDocument" : {
"Version": "2008-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::sample-demo/*"
}
]
}
},
"DependsOn": "DemoBucket"
}
},
"Description": "s3"
}
Gomfileを用意してGomでaws-sdk-goをインストールする
Goマネージャーのgomが便利なのでこれを使ってaws-sdk-goをインストールします。
$ go get github.com/mattn/gom
Gomfile
を用意します。
gom 'github.com/aws/aws-sdk-go/aws'
gom 'github.com/aws/aws-sdk-go/service/s3'
パッケージをインストールします。
$ gom install
ここまで準備できたらGoでコードを書いてみましょう。
GoでS3にファイルをアップロードしてみる
コードはこんな感じになります。アクセスキーとシークレットアクセスキーが必要になります。AWSのIAMで生成しておきましょう。
サンプルでアップロードするファイルはGoコードと同じ階層に置きます。
例として ./sample.jpg
として用意しました。
goファイルは app.go
とします。
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awsutil"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/service/s3"
"log"
"os"
)
func main() {
fileTransfer := FileTransferToS3{
AccessKeyId: "ACCESS_KEY_ID",
SecretAccessKey: "SECRET_ACCESS_KEY",
Region: "us-west-2",
BucketName: "bucket-name",
}
fileTransfer.PutToS3("./", "sample.jpg")
}
type FileTransferToS3 struct {
AccessKeyId string
SecretAccessKey string
Region string
BucketName string
}
func (f *FileTransferToS3) PutToS3(path string, filename string) {
file, err := os.Open(fmt.Sprintf("%s%s", path, filename))
if err != nil {
log.Println(err.Error())
}
defer file.Close()
cli := s3.New(&aws.Config{
Credentials: credentials.NewStaticCredentials(f.AccessKeyId, f.SecretAccessKey, ""),
Region: f.Region,
})
resp, err := cli.PutObject(&s3.PutObjectInput{
Bucket: aws.String(f.BucketName),
Key: aws.String(filename),
Body: file,
})
if err != nil {
log.Println(err.Error())
}
log.Println(awsutil.StringValue(resp))
}
パッケージを gom
でインストールしたのでgomコマンドで実行してください。
$ gom run app.go
実行してS3に無事にアップロードされたら成功です。