LoginSignup
27
21

More than 5 years have passed since last update.

AWS SDK for Go を使ってS3にファイルをアップロードする

Last updated at Posted at 2015-06-13

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に無事にアップロードされたら成功です。

27
21
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
27
21