【Golang】GoでAWS S3にファイルをアップロードする
GolangでAWS S3にファイルをアップロードをする手順とコードです。
S3にバケットの追加

S3のコンソールで手順に沿ってバケットを作成していきます。 なお今回はオプションはスキップします。
IAMでユーザーの追加しアクセスキーを発行
次にIAMのコンソールでユーザーを追加しアクセスキーを発行します。

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

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

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 基礎からのネットワーク&サーバー構築 改訂版
- 作者: 玉川憲,片山暁雄,今井雄太,大澤文孝
- 出版社/メーカー: 日経BP社
- 発売日: 2017/04/13
- メディア: 単行本
- この商品を含むブログを見る

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)
- 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2018/03/23
- メディア: 単行本
- この商品を含むブログ (1件) を見る