LoginSignup
9
10

More than 5 years have passed since last update.

GoでAWS APIを叩く。 aws-sdk-go の 認証には aws.DetectCreds() が便利

Last updated at Posted at 2015-02-15

このaws-sdk-goは古いバージョンを対象にしているため、現在のauth周りは全く異なります!

aws-sdk-goのauthですが、
ついつい以下のようにAccessKeyを直接書いてしまいがちですが、

var (
    accessKey = "AWSaccesskey"
    secretKey = "AWSsecretKey"
    region    = "ap-northeast-1"
)
func main() {

    httpClient := &http.Client{Timeout: time.Duration(30) * time.Second}

    creds := aws.Creds(accessKey, secretKey, "")
    S3 := s3.New(creds, region, httpClient)

aws.DetectCreds()

aws.DetectCreds() を使うと、
1. 環境変数
2. /.aws/credentials
3. EC2に設定しているIAM Role
の順で勝手に認証情報を探して使ってくれてます。
便利です。とりあえずの実装ならこれを使うべき。

使い方は簡単です。 空の文字列を3つ渡すだけ。

    S3 := s3.New(aws.DetectCreds("", "", ""), region, httpClient)

putのサンプル

ついでに、
ファイルをputする簡単なサンプルを載せておきます。

package main

import (
        "log"
        "net/http"
        "os"
        "time"

        "github.com/awslabs/aws-sdk-go/aws"
        "github.com/awslabs/aws-sdk-go/gen/s3"
)

var (
        region    = "ap-northeast-1"
        bucket    = "buket_name"
        filename  = "hoge.txt"
        acl       = "private"
        mimeType  = "text/plain"
)

func main() {
        var (
                err  error
                file *os.File
                info os.FileInfo
        )

        httpClient := &http.Client{Timeout: time.Duration(30) * time.Second}

        S3 := s3.New(aws.DetectCreds("", "", ""), region, httpClient)

        if file, err = os.Open(filename); err != nil {
                log.Println(err)
        }
        defer file.Close()

        if info, err = file.Stat(); err != nil {
                log.Println(err)
        }

        req := s3.PutObjectRequest{
                Body:          file,
                Bucket:        &bucket,
                Key:           &filename,
                ACL:           &acl,
                ContentType:   &mimeType,
                ContentLength: aws.Long(info.Size()),
        }

        res, err := S3.PutObject(&req)
        log.Printf("res:%s, err:%s", res, err)

}

ちなみに、
aws-sdk-goのdevelopブランチでは、初期化回りが変わっているので注意です。
https://github.com/awslabs/aws-sdk-go/blob/develop/service/s3/service.go#L19

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10