<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>インフラ on 設計書</title><link>https://Hitamuki.github.io/image-upload/design/infra/</link><description>Recent content in インフラ on 設計書</description><generator>Hugo</generator><language>ja</language><atom:link href="https://Hitamuki.github.io/image-upload/design/infra/index.xml" rel="self" type="application/rss+xml"/><item><title>画像アップロード機能</title><link>https://Hitamuki.github.io/image-upload/design/infra/infra001-upload/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://Hitamuki.github.io/image-upload/design/infra/infra001-upload/</guid><description>&lt;h1 id="画像アップロード機能"&gt;画像アップロード機能&lt;a class="anchor" href="#%e7%94%bb%e5%83%8f%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89%e6%a9%9f%e8%83%bd"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="id"&gt;ID&lt;a class="anchor" href="#id"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;infra001-upload&lt;/p&gt;
&lt;h2 id="関連仕様設計"&gt;関連仕様・設計&lt;a class="anchor" href="#%e9%96%a2%e9%80%a3%e4%bb%95%e6%a7%98%e8%a8%ad%e8%a8%88"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://Hitamuki.github.io/image-upload/requirements/req001-upload/"&gt;req001-upload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://Hitamuki.github.io/image-upload/design/interaction/ia001-upload/"&gt;ia001-upload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://Hitamuki.github.io/image-upload/design/common/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%A7%8B%E6%88%90%E5%9B%B3/"&gt;システム構成図&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="使用リソース"&gt;使用リソース&lt;a class="anchor" href="#%e4%bd%bf%e7%94%a8%e3%83%aa%e3%82%bd%e3%83%bc%e3%82%b9"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;リソース&lt;/th&gt;
 &lt;th&gt;用途&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;AWS S3&lt;/td&gt;
 &lt;td&gt;画像ファイルの保存&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="s3-バケット設定"&gt;S3 バケット設定&lt;a class="anchor" href="#s3-%e3%83%90%e3%82%b1%e3%83%83%e3%83%88%e8%a8%ad%e5%ae%9a"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;パブリックアクセス&lt;/strong&gt;: Block Public Access を有効化し、直接公開を禁止する。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;オブジェクトアクセス&lt;/strong&gt;: Presigned URL 経由のみ許可（アップロード用 PUT・閲覧用 GET）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;暗号化&lt;/strong&gt;: SSE-S3（サーバーサイド暗号化）を有効化する。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CORS&lt;/strong&gt;: フロントエンドオリジンからの &lt;code&gt;PUT&lt;/code&gt; のみ許可する。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ストレージクラス&lt;/strong&gt;: Standard（頻繁アクセス向け）&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;CORSRules&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;AllowedOrigins&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;https://&amp;lt;frontend-domain&amp;gt;&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;AllowedMethods&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;PUT&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;AllowedHeaders&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;MaxAgeSeconds&amp;#34;&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="s3-ストレージクラスと料金"&gt;S3 ストレージクラスと料金&lt;a class="anchor" href="#s3-%e3%82%b9%e3%83%88%e3%83%ac%e3%83%bc%e3%82%b8%e3%82%af%e3%83%a9%e3%82%b9%e3%81%a8%e6%96%99%e9%87%91"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="ストレージクラス"&gt;ストレージクラス&lt;a class="anchor" href="#%e3%82%b9%e3%83%88%e3%83%ac%e3%83%bc%e3%82%b8%e3%82%af%e3%83%a9%e3%82%b9"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ストレージクラス&lt;/th&gt;
 &lt;th&gt;用途&lt;/th&gt;
 &lt;th&gt;特徴&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;S3 Standard&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;アクセス頻度の高い画像&lt;/td&gt;
 &lt;td&gt;頻繁アクセス、低レイテンシ&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="料金東京リージョン2024年3月時点"&gt;料金（東京リージョン、2024年3月時点）&lt;a class="anchor" href="#%e6%96%99%e9%87%91%e6%9d%b1%e4%ba%ac%e3%83%aa%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b32024%e5%b9%b43%e6%9c%88%e6%99%82%e7%82%b9"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ストレージクラス&lt;/th&gt;
 &lt;th&gt;保存料金（GB/月）&lt;/th&gt;
 &lt;th&gt;リクエスト料金（GET/1,000回）&lt;/th&gt;
 &lt;th&gt;リクエスト料金（PUT/1,000回）&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;S3 Standard&lt;/td&gt;
 &lt;td&gt;¥23&lt;/td&gt;
 &lt;td&gt;¥0.43&lt;/td&gt;
 &lt;td&gt;¥5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="ライフサイクルポリシー"&gt;ライフサイクルポリシー&lt;a class="anchor" href="#%e3%83%a9%e3%82%a4%e3%83%95%e3%82%b5%e3%82%a4%e3%82%af%e3%83%ab%e3%83%9d%e3%83%aa%e3%82%b7%e3%83%bc"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;0日～30日&lt;/strong&gt;: S3 Standard（アップロード直後）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;30日～90日&lt;/strong&gt;: S3 Standard-IA（アクセス頻度低下）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;90日以降&lt;/strong&gt;: S3 Glacier Instant Retrieval（アーカイブ）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="presigned-url"&gt;Presigned URL&lt;a class="anchor" href="#presigned-url"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;種別&lt;/th&gt;
 &lt;th&gt;操作&lt;/th&gt;
 &lt;th&gt;有効期限&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;アップロード用&lt;/td&gt;
 &lt;td&gt;PutObject&lt;/td&gt;
 &lt;td&gt;300 秒（5 分）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;閲覧用&lt;/td&gt;
 &lt;td&gt;GetObject&lt;/td&gt;
 &lt;td&gt;3600 秒（1 時間）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="ネットワーク"&gt;ネットワーク&lt;a class="anchor" href="#%e3%83%8d%e3%83%83%e3%83%88%e3%83%af%e3%83%bc%e3%82%af"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;全通信は HTTPS（TLS 1.2 以上）。&lt;/li&gt;
&lt;li&gt;Terraform にて定義する（&lt;code&gt;packages/infra/&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>