はじめに
今回は、LocalStackの環境構築と、エミュレートしたS3へのファイルアップロード&ブラウザでの表示を行いました。
実務でLocalStackを触る機会があり、興味があったので実際に自分でも環境構築から行ってみました。
LocalStackの環境構築部分でいくつか詰まったので、そこも共有できたらと思います。
参考にした記事
こちらの記事を参考にしました。
LocalStackに関する説明などもこちらに記載されているので、興味がある方は見てみてください。
LocalStackの環境構築
今回は、ローカル環境(venv上)にlocalstack、awscli、awscli-localをインストールしました。
後述しますが、awscliパッケージがインストールされていないと、awscli-localのコマンドが使用できないことに注意してください。
実施環境:
- Python 3.11.9
- pip 24.0
- Docker(LocalStack CLIではDocker環境が必要)
localstack
pipを使用してLocalStackをインストールします。
$ pip install localstack
この時、パスの長さによるエラーが出た場合は、以下の記事の手順を実行することで解消することができます。
awscli-local
awslocalコマンドを使用するためにawscli-localをインストールします。
$ pip3 install awscli-local
awscli
awscli-localをインストールしただけだとawslocalコマンドは動かないので、awscliをインストールしていきます。
awscli-localはawscliをラップしたものなので、当たり前ではあるのですが、awslocalコマンドを使用した際に出たエラーが「Segmentation fault」だけだったので、解決方法を見つけるのに少し時間がかかりました。
ということでインストールしていきます。
$ pip install awscli
動作確認
まずはLocalStackが起動できるか確認します。
以下のコマンドを入力して、起動していきます。
ほかに同じポートを使用しているサービスがあるとうまく起動できないので注意してください。(自分は最初それで起動できませんでした…)
$ localstack start -d
__ _______ __ __
/ / ____ _________ _/ / ___// /_____ ______/ /__
/ / / __ \/ ___/ __ `/ /\__ \/ __/ __ `/ ___/ //_/
/ /___/ /_/ / /__/ /_/ / /___/ / /_/ /_/ / /__/ ,<
/_____/\____/\___/\__,_/_//____/\__/\__,_/\___/_/|_|
- LocalStack CLI: 4.2.0
- Profile: default
- App: https://app.localstack.cloud
...
次にawslocalコマンドが動くかを確認します。
以下のコマンドを実行して、バージョン情報が出てくれば問題ありません。
$ awslocal --version
実際に使ってみる
awslocalコマンドを使用して、LocalStackでエミュレートされたS3に対してファイルのアップロードを行い、アップロードされたファイルをブラウザから確認するということを行いました。
まずは現在開いているディレクトリに、S3へアップロードする用のファイルを作成します。
今回はtxtファイルとhtmlファイルを作成しました。
この時、UTF-8で保存するとブラウザで表示する際に文字化けしてしまうため、Shift JISで保存します。
(後で調べたらアップロードの際にコンテンツタイプにより正しく表示されることがわかりました。
例:--content-type "text/html; charset=utf-8"
)
# テスト用のファイル
<h1>HTMLファイル</h1>
次にS3バケットを作成します。
以下のコマンドでバケットを作成できます。
$ awslocal s3 mb s3://test-bucket
$ awslocal s3 mb s3://test-bucket
make_bucket: test-bucket
続いて、S3バケットに先ほど作成したファイルをアップロードしていきます。
以下のコマンドでtest.txtファイルをtest-bucketにアップロードすることができます。
$ awslocal s3 cp ./test.txt s3://test-bucket
$ awslocal s3 cp ./test.txt s3://test-bucket
upload: .\test.txt to s3://test-bucket/test.txt
同様にhtmlファイルもアップロードします。
アップロードが完了したら、今度はブラウザで表示して確認します。
- S3にアップロードされているコンテンツの一覧
- テキストファイルの表示
- HTMLファイルの表示
HTMLファイルはHTMLが読み込まれてこのように表示されると思います。
まとめ
今回はLocalStackを使ってエミュレートされたS3へのアップロードを試してみました。
LocalStackでは、S3のほかにも、EC2やLambdaといったサービスが使えるので、今後開発環境やテスト環境で必要になった際には覚えておきたいと思います。