はじめに
この記事では、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ファイルをアップロードする処理を記述します。
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の中身はお好きにしてもらって大丈夫です)。
<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』 と表示されていれば成功です。
まとめ
以上の手順で、Go 言語を使って LocalStack の S3 に HTML ファイルをアップロードすることができました。
LocalStack はローカル環境でのAWSサービスの使用を簡単に実現できるので、学習に便利そうですね。