![見出し画像](https://assets.st-note.com/production/uploads/images/154591004/rectangle_large_type_2_6c083dd1081bf35152034a88a86e3cbf.png?width=1200)
S3にホスティングしたWEBサイトでS3に保存した画像を表示する(2024.9)
![](https://assets.st-note.com/img/1726503241-28OA3tcGd1mvrQPJLDuaYEBs.png?width=1200)
1-1.Reactプロジェクトのセットアップ
・左上の検索バーに「cloud9」を入力→「Cloud9」を選択
・linepictureuploadの「開く」を選択
![](https://assets.st-note.com/img/1725091575900-cRhZdSjvTX.png?width=1200)
![](https://assets.st-note.com/img/1725091731290-mi6BE9nm4l.png?width=1200)
・下部のターミナルエリアでコマンドを実行して、reactのプロジェクトを作成。
・コマンド:npx create-react-app my-image-gallery
※「my-image-gallery」は任意で
![](https://assets.st-note.com/img/1725100109867-qecLf56aDx.png)
![](https://assets.st-note.com/img/1725102128848-9KnakupTTD.png)
![](https://assets.st-note.com/img/1725102191177-n1R12PS5Bf.png)
1-2.Reactプロジェクトの動作確認
・下部のターミナルエリアでコマンドを実行して、reactの開発サーバーを起動。
・コマンド:cd my-image-gallery
・コマンド:npm start
![](https://assets.st-note.com/img/1725105743419-h3P2yxwHZE.png)
![](https://assets.st-note.com/img/1725104022164-HjUR6ArNmf.png)
・上部の「Preview」→「Preview Running Application」
![](https://assets.st-note.com/img/1725104074980-urEaWLvStS.png?width=1200)
・この画面が表示されることを確認する。
![](https://assets.st-note.com/img/1725112448867-LelnTMxo0R.png)
![](https://assets.st-note.com/img/1725117902309-3mDJ2Yybui.png?width=1200)
2-1.aws-sdkのインストール
・ターミナルでコマンドを実行して、AWS SDKをインストールし、S3から画像のURLを取得する準備をする。
・コマンド:npm install aws-sdk
![](https://assets.st-note.com/img/1725147752452-yxKco1XkxP.png)
2-2.画像表示コンポーネントの作成
・左ペインの「src」を右クリック→「NewFile」を選択して、画像表示コンポーネントファイルを作成する。
・ファイル名:ImageGallery.js
![](https://assets.st-note.com/img/1725113984816-vKtaykRiz9.png)
![](https://assets.st-note.com/img/1725114032734-KqdCDgOukD.png)
・「ImageGallery.js」を右クリック→「Open」を選択して、コードを記述する。
・コードを記述したら、上部「File」→「Save」を選択して、保存する。
![](https://assets.st-note.com/img/1725114114699-WIYtWKTONO.png)
![](https://assets.st-note.com/img/1725117535080-OXr3D4loOh.png)
2-3.画像表示コンポーネントをメインコンポーネントにインポートする
・「App.js」を右クリック→「Open」を選択して、コードを記述する。
![](https://assets.st-note.com/img/1725117646422-Rkdx4CncQb.png)
![](https://assets.st-note.com/img/1725120076899-SfPNHOjKsv.png?width=1200)
2-4.S3にアクセスするためのIAMユーザーを作成する
・AWSコンソールの左上の検索バーに「IAM」を入力→「IAM」を選択
![](https://assets.st-note.com/img/1726478456-YMETIclgnGmPCe2p6HtSD9ux.png?width=1200)
・「ユーザー」を選択
![](https://assets.st-note.com/img/1726478478-NSoW4ZQ7q5afKsHMEt2VLvid.png?width=1200)
・右「ユーザーの作成」を選択
![](https://assets.st-note.com/img/1726478514-I4Wvzetj3NuMJ91c7AfoHL6K.png?width=1200)
・ユーザー名を入力して「次へ」を選択
・ユーザー名:image-gallery_REACT_APP_AWS
![](https://assets.st-note.com/img/1726478548-if73gbsn0jrBRNUIvw2M4QEe.png?width=1200)
・以下を入力して「次へ」を選択
・許可のオプション:ポリシーを直接アタッチする
・許可ポリシー:AmazonS3ReadOnlyAccess
![](https://assets.st-note.com/img/1726478636-f321ixW6UbDcyEKe5QVdnpPY.png?width=1200)
・「ユーザーの作成」を選択
![](https://assets.st-note.com/img/1726478810-T5xvkW4RhrciAfJtNeSdgnUa.png?width=1200)
![](https://assets.st-note.com/img/1726478857-23TV1wh0coXgO6BFLyDC48Wa.png?width=1200)
2-5.アクセスキーを作成する
・IAMユーザー「image-gallery_REACT_APP_AWS」を選択→「セキュリティ認証情報」タブ→「アクセスキーを作成」を選択する。
![](https://assets.st-note.com/img/1726478950-HXuPDSqkvsgfwVcjBGiaebQK.png?width=1200)
・ユースケースを選択して「次へ」を選択
・ユースケース:AWSコンピューティングサービスで実行されるアプリケーション
![](https://assets.st-note.com/img/1726479074-WxFVqaKQHDgZwlnkf4UpuYE8.png?width=1200)
・「アクセスキーを作成」を選択
![](https://assets.st-note.com/img/1726479167-g4cDhoAj8xTELmpNwGUdz1iu.png?width=1200)
・アクセスキーとシークレットアクセスキーを取得する。
![](https://assets.st-note.com/img/1726479217-c9XQ8tjmM1IgFUWGeDavbh5O.png?width=1200)
2-6.envファイルを作成する
・cloud9の左ペインの「my-image-gallery」を右クリック→「NewFile」を選択して、envファイルを作成する。
・ファイル名:.env
![](https://assets.st-note.com/img/1726476546-kpCGDIPLMexhtZSvj9VYclRX.png)
![](https://assets.st-note.com/img/1726476546-tSkJqDFgnmLpTGPl7j5vX1ux.png)
・.envファイルを開き環境変数を記述して保存する。
・環境変数①:REACT_APP_AWS_ACCESS_KEY_ID=アクセスキー
・環境変数②:REACT_APP_AWS_SECRET_ACCESS_KEY=シークレットアクセスキー
![](https://assets.st-note.com/img/1726477288-bTjvB6JQG1qXm02LSOgEtApd.png?width=1200)
・.gitignoreファイルを開き、以下のコードを記述して保存する。
・追加コード:.env
※ここで定義する意味があるのかは、まだわかっていない。
※画像参照
![](https://assets.st-note.com/img/1726479400-AN6el72tyonQIpqwh0rGcOCU.png)
![](https://assets.st-note.com/img/1726476546-mO9xvgKjX3bSzUfGlBRrED1M.png)
2-7.ホームページのパスを設定する
・package.jsonファイルを開き、下記の設定を記述して保存する。
・設定:"homepage": "http://linepicture.s3-website-us-east-1.amazonaws.com/website"
![](https://assets.st-note.com/img/1726488735-eyhGmQ1foI4VcdpXtTvJ6gOM.png)
![](https://assets.st-note.com/img/1726490149-WqsTrDGcnMv4O51wdeIVmj8U.png)
3-1.ビルド
・ターミナルでコマンドを実行して、ビルドする。
・コマンド:npm run build
![](https://assets.st-note.com/img/1726488051-CgHW5SQZn2pbteqi6K9uBNOR.png)
![](https://assets.st-note.com/img/1726488503-LkpUlHYj1fVWICZo4une7JdA.png)
3-2.S3へリリースする
・ターミナルでコマンドを実行して、S3にリリースする。
・コマンド①:cd build/
・コマンド②:aws s3 sync . s3://your-bucket-name/website
![](https://assets.st-note.com/img/1726488535-IAuM3WfG1TL6HsiDPrjzCdFX.png?width=1200)
※S3の構成
![](https://assets.st-note.com/img/1726494734-jep8x9qaLVMAdIR5CgHfyFvD.png?width=1200)
4-1.S3のパブリックアクセスを有効にする
・AWSコンソールの左上の検索バーに「S3」を入力→「S3」を選択する。
![](https://assets.st-note.com/img/1726490481-SYDmMg5qdzPbGA92etIf0UTi.png?width=1200)
・「linpicture」を選択する。
![](https://assets.st-note.com/img/1725163839100-iruNJIwqUL.png)
・「アクセス許可」タブを選択する。
![](https://assets.st-note.com/img/1725163881501-VSU7l8QpMt.png)
・ブロックパブリックアクセス(バケット設定)の「編集」を選択する。
![](https://assets.st-note.com/img/1726490577-Aush2oZFYny7v3Ox6HWKELcU.png?width=1200)
・チェックを外して「変更の保存」を選択する。
![](https://assets.st-note.com/img/1726490690-MaOtSczq0Fd7L9GyDCPphlYr.png?width=1200)
・「確認」を入力して「確認」を選択する。
![](https://assets.st-note.com/img/1726490736-e1dvkIuQFlpnhP6HiJEaT9NB.png?width=1200)
4-2.S3のバケットポリシーを設定する
・バケットポリシーの「編集」を選択する。
![](https://assets.st-note.com/img/1726491904-zT2iGoFLf9ZHq5VarWwetnlN.png?width=1200)
・バケットポリシーを記述して「変更の保存」を選択する。
![](https://assets.st-note.com/img/1726491972-X9GAiHvg1s2CqBMOp0KzDhcS.png?width=1200)
4-3.S3のCORSを設定する
・CORSの「編集」を選択する。
![](https://assets.st-note.com/img/1725163897234-9d4Qa57dVZ.png?width=1200)
・CORSを記述して「変更の保存」を選択する。
![](https://assets.st-note.com/img/1726493939-5gSlYqK0WXOrkP6U1FcCzpai.png?width=1200)
4-4.S3のウェブサイトホスティングを設定する
・「プロパティ」タブを選択する。
![](https://assets.st-note.com/img/1726494080-uNikPVYHTMtL5O3RFmpn29KA.png?width=1200)
・静的ウェブサイトホスティングの「編集」を選択する。
![](https://assets.st-note.com/img/1726494095-ZCpKXGk5OVSM0ArYP8hciQvz.png?width=1200)
・下記を入力して「変更の保存」を選択する。
・静的ウェブサイトホスティング:有効にする
・ホスティングタイプ:静的ウェブサイトをホストする
・インデックスドキュメント:index.html
![](https://assets.st-note.com/img/1726494139-YPepdUOQtSk0cN85FEBgmbs2.png?width=1200)
・URLを確認する。
![](https://assets.st-note.com/img/1726494256-yKOmduvbAJ6GTa8phozrtBe3.png?width=1200)
5-1.動作確認
・パスの構成に合わせて、末尾に「/website/index.html」をつけてアクセスする。
http://linepicture.s3-website-us-east-1.amazonaws.com/website/index.html
![](https://assets.st-note.com/img/1726494646-xf7KOyAI0PGVbeBUMZowd3Xq.png?width=1200)
6-1.【補足】S3の構成に合わせた登録側コードの修正
・cloud9で「lambda_function.py」を開いて、画像を保存するパスを修正する。
・修正前:s3.put_object(Bucket=bucket_name, Key=f"{message_id}.jpg", Body=response.content)
・修正後:s3.put_object(Bucket=bucket_name, Key=f"images/{message_id}.jpg", Body=response.content)
![](https://assets.st-note.com/img/1725174075106-qNvWy8kTfS.png?width=1200)
※リリース手順等 参照
https://note.com/zeke_magazine/n/n228fc37c3ebb