怠慢プログラマーの備忘録

怠慢でナマケモノなプログラマーの備忘録です。

【Golang】GoでAWS S3にファイルをアップロードする

GolangAWS S3にファイルをアップロードをする手順とコードです。

S3にバケットの追加

AWSS3

S3のコンソールで手順に沿ってバケットを作成していきます。 なお今回はオプションはスキップします。

IAMでユーザーの追加しアクセスキーを発行

次にIAMのコンソールでユーザーを追加しアクセスキーを発行します。

AWSS3

ユーザー名を入力したら「アクセスの種類」の「プログラムによるアクセス」にチェックを入れます。

アクセス権限にS3FullAccessを付与してそのまま作成します。

作成後にアクセスキーが発行されますので、これを控えておいてください。 なおシークレットキーに関してはここでしか見ることができませんので必ず記録してください。

AWSS3

aws-sdkのインストールと取得部分のコード

まず下記のコードでaws-sdkをインストールします。 $ go get github.com/aws/aws-sdk-go

次に実際にファイルを取得してそれをS3にアップロードします。

func uploadToS3(fileName string) {

    sess := session.Must(session.NewSession(&aws.Config{
        Credentials: credentials.NewStaticCredentials("アクセスキー", "アクセスシークレットキー", ""),
        Region: aws.String("ap-northeast-1"),
    }))

    uploader := s3manager.NewUploader(sess)

    f, err  := os.Open(fileName + ".json")
    if err != nil {
        fmt.Errorf("failed to open file %q, %v", "test.json", err)
    }

    // Upload the file to S3.
    res, err := uploader.Upload(&s3manager.UploadInput{
        Bucket: aws.String("retweet-users"),
        Key:    aws.String(fileName + ".json"),
        Body:   f,
    })

    if err != nil {
        fmt.Println(res)
        if err, ok := err.(awserr.Error); ok && err.Code() == request.CanceledErrorCode {
            fmt.Fprintf(os.Stderr, "upload canceled due to timeout, %v\n", err)
        } else {
            fmt.Fprintf(os.Stderr, "failed to upload object, %v\n", err)
        }
        os.Exit(1)
    }

    fmt.Printf("successfully uploaded file to %s/%s\n", "retweet-users")
    _ = os.Remove(fileName + ".json")
}

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)