Upload File ke Amazon S3 dengan Go

Upload File ke Amazon S3 dengan Go

Saat aplikasi kamu menangani banyak file seperti gambar atau dokumen, kamu perlu menyimpan file tersebut dalam sistem penyimpanan tertentu di luar server aplikasi kamu. Salah satu layanan penyimpanan terbaik adalah Amazon S3. Artikel ini akan menunjukkan cara membuat Bucket Amazon S3, membuat access key id dan secret, dan mengunggah file ke Amazon S3 dengan Go.

Apa itu Amazon S3

Amazon S3 atau Simple Storage Service adalah layanan penyimpanan yang disediakan oleh Amazon AWS. Kita dapat menggunakannya untuk menyimpan dan melindungi data dalam jumlah berapa pun untuk berbagai use cases, seperti data lake, website, aplikasi mobile, backup and restore, arsip, aplikasi enterprise, perangkat IoT, dan big data analytics.
Untuk menyimpan data ke S3 dengan aplikasi Go, pertama-tama kita perlu membuat bucket dan access credentials.
Jika kamu sudah memiliki bucket dan credentials, kamu dapat melompat ke bagian ini.

Membuat an S3 bucket

Untuk membuat bucket S3 kamu, pertama, buka halaman AWS console. Kemudian cari S3 di search bar. kamu akan diarahkan ke halaman dashboard S3.
Klik tombol Create Bucket.

Create S3 Bucket

Masukkan Bucket name dan pilih AWS Region pilihan kamu. Biarkan pengaturan lain apa adanya untuk saat ini.

Input S3 Bucket Name

Kemudian klik tombol Create Bucket di bagian bawah halaman. Bucket akan dibuat.

Buat IAM untuk mengakses bucket

Setelah bucket dibuat, kita perlu membuat access key id dan secret agar aplikasi Go kita dapat mengakses bucket. Untuk membuat kredensial, buka halaman konsol AWS, lalu cari IAM di search bar. Kemudian klik IAM untuk membuka halaman dasbor IAM.
Di halaman dasbor IAM, klik Users di bilah sisi kiri. Kemudian klik Add Users.

Create IAM User

Masukkan User name dan centang kotak Access key - Programmatic access. Kemudian klik tombol Next.

Input IAM User Name

Kita perlu attach S3 access policy ke user.

  • Klik Attach existing policies directly.
  • Cari S3 di filter.
  • Kemudian centang AmazonS3FullAccess dan klik tombol Next.
    Attach Policy

Kamu dapat menambahkan tag jika kamu mau. Ini opsional.

Add Tags

Tinjau pembuatan pengguna untuk memastikan parameternya benar. Kemudian klik Create User.

Review

User berhasil dibuat.

IAM Created

Simpan Access Key ID dan Secret access key. Ini diperlukan untuk mengakses bucket dari aplikasi Go.

Cara upload file ke S3 dengan Go

Setelah kita memiliki bucket dan akses key, aplikasi Go kita dapat mengunggah file ke S3. AWS menyediakan Go SDK official untuk mengelola S3 (https://github.com/aws/aws-sdk-go/).
Untuk meng-upload file ke S3 kita perlu membuat S3 upoader dan memanggil method Upload dari uploader.
Gunakan contoh kode berikut untuk membuat uploader.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import (
    // ...
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3/s3manager"
)

    // ...

    s3Config := &aws.Config{
        Region: aws.String("ap-southeast-1"),
        Credentials: credentials.NewStaticCredentials("KeyID", "SecretKey", ""),
    }
    s3Session := session.New(s3Config)

    uploader := s3manager.NewUploader(s3Session)

Pada baris 11, kita membuat AWS config dengan region bucket kita dan mengakses access key ID dan secret dari IAM. Konfigurasi ini diperlukan untuk membuat session untuk uploader. Pastikan untuk mengimport semua library yang diperlukan.
Setelah uploader dibuat, kita dapat memanggil method UploadWithContext dari uploader untuk meng-upload file ke S3. Mari kita lihat contoh kode di bawah ini.
1
2
3
4
5
6
7
    input := &s3manager.UploadInput{
        Bucket:      aws.String("jajaldoang-test-s3-upload"), // bucket's name
        Key:         aws.String("myfiles/my_cat.jpg"),        // files destination location
        Body:        bytes.NewReader(file),                   // content of the file
        ContentType: aws.String("image/jpg"),                 // content type
    }
    output, err := uploader.UploadWithContext(context.Background(), input)
Untuk mengupload file, kita memerlukan parameter UploadInput yang berisi nama bucket dan atribut file. Context dapat digunakan untuk membatasi waktu upload dan pembatalan.

Kesimpulan

Untuk mengunggah file ke Amazon S3, kita dapat menggunakan Go SDK official yang disediakan oleh AWS. Kita memerlukan bucket dan access key ID dan secret key untuk mengupload dari aplikasi Go. Setelah kita memilikinya, kode Go untuk mengunggah file menjadi sederhana.

The complete code

The complete code is here (click to expand)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package main

import (
	"bytes"
	"context"
	"io/ioutil"
	"log"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/s3/s3manager"
)

var uploader *s3manager.Uploader

func main() {
	uploader = NewUploader()

	upload()
}

func NewUploader() *s3manager.Uploader {
	s3Config := &aws.Config{
		Region:      aws.String("ap-southeast-1"),
		Credentials: credentials.NewStaticCredentials("KeyID", "SecretKey", ""),
	}

	s3Session := session.New(s3Config)

	uploader := s3manager.NewUploader(s3Session)
	return uploader
}

func upload() {
	log.Println("uploading")

	file, err := ioutil.ReadFile("./my_cat.jpg")
	if err != nil {
		log.Fatal(err)
	}

	upInput := &s3manager.UploadInput{
		Bucket:      aws.String("jajaldoang-test-s3-upload"), // bucket's name
		Key:         aws.String("myfiles/my_cat.jpg"),        // files destination location
		Body:        bytes.NewReader(file),                   // content of the file
		ContentType: aws.String("image/jpg"),                 // content type
	}
	res, err := uploader.UploadWithContext(context.Background(), upInput)
	log.Printf("res %+v\n", res)
	log.Printf("err %+v\n", err)
}
S3  aws  go 

See also

comments powered by Disqus