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

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


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。