0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GoでLocalStackのS3にファイルをアップロードしてみた

Posted at

はじめに

この記事では、Go言語を使って LocalStack 上の S3 に HTML ファイルをアップロードする方法を解説します。
前回の記事 の続きとして、S3 バケットの作成が完了している状態からスタートします。

前提条件

  • go コマンドが使用できる環境であること
  • こちらの手順に従って、S3バケットの作成まで完了していること

go.mod の作成

compose.yml があるディレクトリで、以下のコマンドを実行して Go モジュールを初期化します。

$ go mod init {{今いるディレクトリ名}}

依存関係のインストール

S3にファイルをアップロードするために必要なパッケージをインストールします。

$ go get github.com/aws/aws-sdk-go-v2/aws 
$ go get github.com/aws/aws-sdk-go-v2/config
$ go get github.com/aws/aws-sdk-go-v2/service/s3
$ go get github.com/aws/aws-sdk-go-v2/credentials

Goコード(main.go)の作成

main.go を作成し、LocalStackのS3バケットにHTMLファイルをアップロードする処理を記述します。

main.go
package main

import (
	"context"
	"log"
	"os"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/credentials"
	"github.com/aws/aws-sdk-go-v2/service/s3"
)

func main() {
	awsEndpoint := "http://localhost:4566" // LocalStackのエンドポイント
	awsRegion := "us-east-1" // LocalStackのデフォルトリージョン

	// デフォルトの AccessKey、SecretKey は "test"
	creds := credentials.NewStaticCredentialsProvider("test", "test", "")
	// AWSの設定を読み込む
	awsCfg, err := config.LoadDefaultConfig(context.TODO(),
		config.WithRegion(awsRegion),
		config.WithCredentialsProvider(creds),
	)
	if err != nil {
		log.Fatalf("Cannot load the AWS configs: %s", err)
	}

	// S3クライアント作成
	client := s3.NewFromConfig(awsCfg, func(o *s3.Options) {
		o.UsePathStyle = true
		o.BaseEndpoint = aws.String(awsEndpoint)
	})

	bucketName := "sample-bucket"
	s3Key := "sample.html"
	// HTMLファイル読み込み
	html, err := os.Open("./sample.html")
	if err != nil {
		log.Fatal(err.Error())
	}
	defer html.Close()

	// S3にアップロード
	_, err = client.PutObject(context.TODO(), &s3.PutObjectInput{
		Bucket:      aws.String(bucketName),
		Key:         aws.String(s3Key),
		Body:        html,
		ContentType: aws.String("text/html"),
	})
	if err != nil {
		log.Fatal(err.Error())
	}
	log.Println("Success!")
}

sample.html の作成

アップロードするHTMLファイルを作成します。
以下の内容で sample.html を作成してください(HTMLの中身はお好きにしてもらって大丈夫です)。

sample.html
<html>
<head>
    <meta charset="UTF-8">
    <title>静的ホスティング</title>
</head>
<body>
    <h1>Hello LocalStack</h1>
</body>
</html>

Goコードの実行

以下のコマンドで main.go を実行して sample.html をS3バケットにアップロードします。

$ go run main.go
2025/04/05 16:37:55 Success!

成功すると、コンソールに Success! と表示され、S3(sample-bucket)にファイルがアップロードされます。

アクセス確認

最後に、ブラウザで以下のURLにアクセスして、『Hello LocalStack』 と表示されていれば成功です。

スクリーンショット 2025-04-05 17.25.28.png

まとめ

以上の手順で、Go 言語を使って LocalStack の S3 に HTML ファイルをアップロードすることができました。
LocalStack はローカル環境でのAWSサービスの使用を簡単に実現できるので、学習に便利そうですね。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?