golangでAWS S3内のファイルを読み込んだり、アップロードしたりします。
IAMの設定からプログラムでの入出力までメモ。
AWS IAM設定
AWSトップページから「セキュリティ>IAM」に行きます。
ユーザーを選択して「ユーザーを追加」。
適当なユーザ名にして「プログラムによるアクセス」を選択します。
S3のフルアクセス権限をアタッチします。
後は必要に応じてタグをつけて、設定確認が終わればユーザーが追加できます。
ここで得られるアクセスキーIDとシークレットアクセスキーを控えてください。
GOでのS3アクセス
まずは必要なパッケージを取得します。
1 2 |
go get github.com/aws/aws-sdk-go/aws go get github.com/aws/aws-sdk-go/service/s3 |
ファイルを取得して中身をStringで出してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
package main import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/service/s3" "log" "bytes" ) type AccessS3 struct { Id string Key string Region string Bucket string } func (a *AccessS3) GetS3(path_s3 string)(buf *bytes.Buffer) { sess := session.Must(session.NewSession()) cli := s3.New(sess,&aws.Config{ Credentials: credentials.NewStaticCredentials(a.Id, a.Key, ""), Region: &a.Region, }) obj, err := cli.GetObject(&s3.GetObjectInput{ Bucket: aws.String(a.Bucket), Key: aws.String(path_s3), }) if err != nil { log.Fatalf("s3 get : %v",err) } defer obj.Body.Close() buf = new(bytes.Buffer) buf.ReadFrom(obj.Body) return } func main() { mys3 := AccessS3{ Id: "アクセスキーID", Key: "シークレットアクセスキー", Region: "リージョン名", Bucket: "バケット名", } buf := mys3.GetS3("bucket_path/obj") str := buf.String() log.Println(str) } |
S3内ファイルの中身を取り出すことができました。
アップロードは次のように書けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
func (a *AccessS3) PutS3(path_local,path_s3 string) { file, err := os.Open(path_local) if err != nil { log.Fatalf("file open : %v",err) } defer file.Close() sess := session.Must(session.NewSession()) cli := s3.New(sess,&aws.Config{ Credentials: credentials.NewStaticCredentials(a.Id, a.Key, ""), Region: &a.Region, }) _, err = cli.PutObject(&s3.PutObjectInput{ Bucket: aws.String(a.Bucket), Key: aws.String(path_s3), Body: file, }) if err != nil { log.Fatalf("s3 put : %v",err) } } func main(){ ... mys3.PutS3("local path/obj","s3 path/obj") } |
これでローカルファイルをS3の好きなところにアップロードできます。