<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>Aws Archives - Tomoshare</title>
	<atom:link href="https://blog.tomosia.com.vn/tag/aws/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/tag/aws/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Mon, 11 Dec 2023 02:21:47 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.tomosia.com.vn/wp-content/uploads/2023/09/cropped-icon-32x32.png</url>
	<title>Aws Archives - Tomoshare</title>
	<link>https://blog.tomosia.com.vn/tag/aws/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Upload File Lên Amazon S3: Dùng Multipart Upload vs AWS CLI</title>
		<link>https://blog.tomosia.com.vn/upload-file-len-amazon-s3-dung-multipart-upload-vs-aws-cli/</link>
					<comments>https://blog.tomosia.com.vn/upload-file-len-amazon-s3-dung-multipart-upload-vs-aws-cli/#comments</comments>
		
		<dc:creator><![CDATA[Thuc Phan]]></dc:creator>
		<pubDate>Mon, 11 Dec 2023 01:38:52 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Aws]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=2273</guid>

					<description><![CDATA[<p>Việc upload file lên Amazon S3 sẽ trở nên mạnh mẽ và hiệu quả hơn với Multipart Upload&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/upload-file-len-amazon-s3-dung-multipart-upload-vs-aws-cli/">Upload File Lên Amazon S3: Dùng Multipart Upload vs AWS CLI</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Việc upload file lên Amazon S3 sẽ trở nên mạnh mẽ và hiệu quả hơn với Multipart Upload và AWS CLI. Trong bài viết này, chúng ta sẽ khám phá cách sử dụng công cụ dòng lệnh mạnh mẽ của AWS để tối ưu hóa quá trình upload và đảm bảo tính toàn vẹn của dữ liệu</p>



<h2 id="aws-cli-configuration" class="wp-block-heading">AWS CLI Configuration</h2>



<ul class="wp-block-list">
<li>VIệc đầu tiên cần kiểm tra xem máy của bạn đã được cấu hình AWS CLI chưa</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws configure list" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">configure</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">list</span></span></code></pre></div>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1024" height="222" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-8.png" alt="This image has an empty alt attribute; its file name is Screen-Shot-2023-12-05-at-8.08.01-AM-1024x222.png" class="wp-image-2284" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-8.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-8-300x65.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-8-768x167.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-8-380x82.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-8-800x173.png 800w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Bạn có thể cấu hình một profile mới như sau</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws configure" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">configure</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="148" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-1024x148.png" alt="" class="wp-image-2285" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-1024x148.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-300x43.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-768x111.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-380x55.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-800x116.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM-1160x168.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.18.15-AM.png 1452w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Tạo một bucket trên S3</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="601" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-10.png" alt="This image has an empty alt attribute; its file name is Screen-Shot-2023-12-05-at-8.32.39-PM-1024x601.png" class="wp-image-2331" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-10.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-10-300x176.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-10-768x451.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-10-380x223.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-10-800x470.png 800w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Chuẩn bị file muốn upload</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="96" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-1024x96.png" alt="" class="wp-image-2329" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-1024x96.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-300x28.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-768x72.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-380x36.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-800x75.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM-1160x109.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-05-at-8.44.24-PM.png 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="use-high-level-aws-s3-commands" class="wp-block-heading">Use high-level aws s3 commands</h2>



<ul class="wp-block-list">
<li>Để dùng high-level&nbsp;command cho multipart upload, có thể chạy lệnh sau</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">cp</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">large_test_file</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3://DOC-EXAMPLE-BUCKET/</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="59" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-1024x59.png" alt="" class="wp-image-2427" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-1024x59.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-300x17.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-768x44.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-380x22.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-800x46.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM-1160x67.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-8.00.07-AM.png 1494w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Khi bạn sử dụng lệnh <code><strong>aws s3 cp</strong></code> để tải lên một file vào Amazon S3, AWS CLI có thể tự quyết định xem có nên dùng <strong><code>multipart upload</code></strong> hay không, dựa vào kích thước của file và các cấu hình liên quan</li>
</ul>



<ul class="wp-block-list">
<li>Tốc độ upload còn phụ thuộc vào tốc độ wifi nhưng nhìn chung là upload khá nhanh</li>
</ul>



<ul class="wp-block-list">
<li>Để mã hoá file khi upload, có thể dùng lệnh sau</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/ --metadata md5=&quot;examplemd5value1234/4Q&quot;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">cp</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">large_test_file</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3://DOC-EXAMPLE-BUCKET/</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--metadata</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">md5=</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">examplemd5value1234/4Q</span><span style="color: #DEE492">&quot;</span></span></code></pre></div>



<ul class="wp-block-list">
<li>Để config max concurrent request, có thể chạy lệnh sau <em>(mặc định là 10)</em></li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws configure set default.s3.max_concurrent_requests 20" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">configure</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">set</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">default.s3.max_concurrent_requests</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">20</span></span></code></pre></div>



<ul class="wp-block-list">
<li><strong>Lưu ý:</strong> max_concurrent_requests càng nhiều thì trong quá trình upload sẽ tiêu hao nhiều băng thông và tài nguyên của máy chủ hơn</li>
</ul>



<ul class="wp-block-list">
<li>Để biết thêm thông tin về cách định cấu hình AWS CLI với Amazon S3 thì hãy xem <a href="https://awscli.amazonaws.com/v2/documentation/api/latest/topic/s3-config.html" target="_blank" rel="noreferrer noopener"><strong>AWS CLI S3 configuration</strong></a></li>
</ul>



<ul class="wp-block-list">
<li>Ngoài lệnh copy, bạn cũng có thể sử dụng các lệnh AWS S3 khác liên quan đến việc tải object lên S3 như <strong><code>aws s3 sync</code></strong> hoặc <strong><code>aws s3 mv</code></strong></li>
</ul>



<ul class="wp-block-list">
<li> Để xem thêm các options khi copy, có thể dùng lệnh sau</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3 cp help" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">cp</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">help</span></span></code></pre></div>



<h2 id="use-low-level-aws-s3api-commands" class="wp-block-heading">Use low-level aws s3api commands</h2>



<p>1. Chia file bạn muốn tải lên thành nhiều phần</p>



<ul class="wp-block-list">
<li><strong>Ubuntu:</strong> <a href="https://askubuntu.com/questions/54579/how-to-split-larger-files-into-smaller-parts">https://askubuntu.com/questions/54579/how-to-split-larger-files-into-smaller-parts</a></li>
</ul>



<ul class="wp-block-list">
<li><strong>MacOS</strong></li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="split -b fileSize path/to/filename" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">split</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-b</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">fileSize</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">path/to/filename</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="114" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-1024x114.png" alt="" class="wp-image-2453" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-1024x114.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-300x33.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-768x86.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-380x42.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-800x89.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM-1160x129.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-2.17.51-PM.png 1454w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Mình thử split một file hơn 20MB thì nó sẽ tự động sinh ra 5 files con với tên random như hình minh hoạ</li>
</ul>



<p>2. Chạy lệnh sau để khởi tạo multipart upload và truy xuất liên kết với một <strong>UploadID</strong>, kết quả phản hồi có chứa UploadID value</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3api create-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key large-test-file" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3api</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">create-multipart-upload</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--bucket</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DOC-EXAMPLE-BUCKET</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">large-test-file</span></span></code></pre></div>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="118" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-15.png" alt="This image has an empty alt attribute; its file name is Screen-Shot-2023-12-08-at-2.37.13-PM-1024x118.png" class="wp-image-2463" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-15.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-15-300x35.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-15-768x89.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-15-380x44.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/image-15-800x92.png 800w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>3. Copy UploadID value để dùng cho các bước sau</p>



<p>4. Chạy lệnh sau để upload các files part đã split ở trên, kết quả phản hồi có chứa <strong>ETag</strong> value</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3api upload-part --bucket DOC-EXAMPLE-BUCKET --key large-test-file --part-number 1 --body large-test-file.001 --upload-id UploadID" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3api</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">upload-part</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--bucket</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DOC-EXAMPLE-BUCKET</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">large-test-file</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--part-number</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">1</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--body</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">large-test-file.001</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--upload-id</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">UploadID</span></span></code></pre></div>



<p>5.&nbsp;&nbsp;&nbsp;&nbsp;Copy&nbsp;<strong>ETag</strong>&nbsp;value để dùng cho bước sau</p>



<p>6. Lặp lại bước 4 &amp; 5 đến khi upload hết các files part</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="304" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-1024x304.png" alt="" class="wp-image-2468" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-1024x304.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-300x89.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-768x228.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-1536x456.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-2048x607.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-380x113.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-800x237.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM-1160x344.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.06.30-PM.png 3196w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>7. Tạo một file <strong>fileparts.json</strong> với nội dung là <strong>ETag</strong> value của các part đã upload ở trên</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JSON</span><span role="button" tabindex="0" data-code="{
  &quot;Parts&quot;: [
    {
      &quot;ETag&quot;: &quot;example8be9a0268ebfb8b115d4c1fd3&quot;,
      &quot;PartNumber&quot;:1
    },
    {
        &quot;ETag&quot;: &quot;example246e31ab807da6f62802c1ae8&quot;,
        &quot;PartNumber&quot;:2
    }
  ]
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">Parts</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> [</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">ETag</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">example8be9a0268ebfb8b115d4c1fd3</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">PartNumber</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #BF9EEE">1</span></span>
<span class="line"><span style="color: #F6F6F4">    },</span></span>
<span class="line"><span style="color: #F6F6F4">    {</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">ETag</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">example246e31ab807da6f62802c1ae8</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">PartNumber</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #BF9EEE">2</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">  ]</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="791" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-1024x791.png" alt="" class="wp-image-2470" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-1024x791.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-300x232.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-768x593.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-380x293.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-800x618.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM-1160x896.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.19.55-PM.png 1238w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>8. Chạy lệnh sau để hoàn thành quá trình upload</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3api complete-multipart-upload --multipart-upload file://path/to/fileparts.json --bucket DOC-EXAMPLE-BUCKET --key large-test-file --upload-id UploadID" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3api</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">complete-multipart-upload</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--multipart-upload</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">file://path/to/fileparts.json</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--bucket</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DOC-EXAMPLE-BUCKET</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">large-test-file</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--upload-id</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">UploadID</span></span></code></pre></div>



<ul class="wp-block-list">
<li>Kết quả phản hồi sẽ có chứa <strong>Location</strong> value là url dẫn đến file trên S3 của bạn</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JSON</span><span role="button" tabindex="0" data-code="{
    &quot;ETag&quot;: &quot;exampleae01633ff0af167d925cad279-2&quot;,
    &quot;Bucket&quot;: &quot;DOC-EXAMPLE-BUCKET&quot;,
    &quot;Location&quot;: &quot;https://DOC-EXAMPLE BUCKET.s3.amazonaws.com/large-test-file&quot;,
   
    &quot;Key&quot;: &quot;large-test-file&quot;
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">ETag</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">exampleae01633ff0af167d925cad279-2</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">Bucket</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">DOC-EXAMPLE-BUCKET</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">Location</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">https://DOC-EXAMPLE BUCKET.s3.amazonaws.com/large-test-file</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">   </span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E2F2">&quot;</span><span style="color: #97E1F1">Key</span><span style="color: #97E2F2">&quot;</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">large-test-file</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="122" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-1024x122.png" alt="" class="wp-image-2471" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-1024x122.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-300x36.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-768x91.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-1536x183.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-2048x244.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-380x45.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-800x95.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM-1160x138.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Shot-2023-12-08-at-3.31.56-PM.png 3194w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="resolve-upload-failures" class="wp-block-heading">Resolve upload failures</h2>



<p>1. Chạy lệnh sau để xem tất cả multipart-upload chưa hoàn thành</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3api list-multipart-uploads --bucket DOC-EXAMPLE-BUCKET" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3api</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">list-multipart-uploads</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--bucket</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DOC-EXAMPLE-BUCKET</span></span></code></pre></div>



<pre class="wp-block-code"><code>{
  "Uploads": &#91;
    {     
      "Initiator": {
        "DisplayName": "multipartmessage",
        "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      },
      "Initiated": "2016-03-31T06:13:15.000Z",
      "UploadId": "examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojxxu...",
      "StorageClass": "STANDARD", 
      "Key": "",
      "Owner": {
        "DisplayName": "multipartmessage",
        "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  ]
}</code></pre>



<p>2. Chạy lệnh sau để remove UploadID chưa hoàn thành</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">ShellScript</span><span role="button" tabindex="0" data-code="aws s3api abort-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key Key --upload-id UploadID" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3api</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">abort-multipart-upload</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--bucket</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DOC-EXAMPLE-BUCKET</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Key</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--upload-id</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">UploadID</span></span></code></pre></div>



<h2 id="tai-lieu-tham-khao" class="wp-block-heading">Tài liệu tham khảo</h2>



<ul class="wp-block-list">
<li><a href="https://repost.aws/knowledge-center/s3-multipart-upload-cli">https://repost.aws/knowledge-center/s3-multipart-upload-cli</a></li>
</ul>
<p>The post <a href="https://blog.tomosia.com.vn/upload-file-len-amazon-s3-dung-multipart-upload-vs-aws-cli/">Upload File Lên Amazon S3: Dùng Multipart Upload vs AWS CLI</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/upload-file-len-amazon-s3-dung-multipart-upload-vs-aws-cli/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Localstack, giả lập môi trường AWS.</title>
		<link>https://blog.tomosia.com.vn/localstack-gia-lap-moi-truong-aws/</link>
					<comments>https://blog.tomosia.com.vn/localstack-gia-lap-moi-truong-aws/#comments</comments>
		
		<dc:creator><![CDATA[Le Van Ninh]]></dc:creator>
		<pubDate>Wed, 15 Nov 2023 09:42:02 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Aws]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1846</guid>

					<description><![CDATA[<p>Mục đích sử dụng: Localstack mô phỏng lại môi trường AWS trên máy local. Nó giúp phát triển&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/localstack-gia-lap-moi-truong-aws/">Localstack, giả lập môi trường AWS.</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 id="muc-dich-su-dung" class="wp-block-heading">Mục đích sử dụng:</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p><code>Localstack</code> mô phỏng lại môi trường AWS trên máy local.</p>



<p>Nó giúp phát triển và kiểm thử các giải pháp như microservices hoặc functions và sử dụng các dịch vụ có trong AWS.</p>



<p>Các dịch vụ AWS trên Localstack:</p>



<pre class="wp-block-verse">API Gateway,
Kinesis, 
DynamoDB, 
DynamoDB Streams, 
Elasticsearch, 
S3, 
Firehose, 
Lambda, 
SNS, 
SQS, 
Redshift, 
ES (Elasticsearch Service), 
SES, 
Route53, 
CloudFormation, 
CloudWatch, 
SSM, 
SecretsManager</pre>
</div></div>



<h2 id="cai-dat-va-su-dung" class="wp-block-heading">Cài đặt và sử dụng:</h2>



<p>Cài đặt localstack:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">YAML</span><span role="button" tabindex="0" data-code="# docker-compose.yml

version: &quot;3.2&quot;
services:
  localstack:
    image: localstack/localstack:latest
    container_name: localstack_demo
    ports:
      # - &quot;127.0.0.1:4566:4566&quot; # LocalStack Gateway
      - &quot;127.0.0.1:4510-4559:4510-4559&quot; # external services port range
      - &quot;0.0.0.0:4566:4566&quot;
    environment:
      - SERVICES=s3
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
    volumes:
      - &quot;./.localstack:/var/lib/localstack&quot;
      - &quot;/var/run/docker.sock:/var/run/docker.sock&quot;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B"># docker-compose.yml</span></span>
<span class="line"></span>
<span class="line"><span style="color: #97E1F1">version</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">3.2</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #97E1F1">services</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">localstack</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">image</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack/localstack:latest</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">container_name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack_demo</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">ports</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #7B7F8B"># - &quot;127.0.0.1:4566:4566&quot; # LocalStack Gateway</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">127.0.0.1:4510-4559:4510-4559</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4"> </span><span style="color: #7B7F8B"># external services port range</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">0.0.0.0:4566:4566</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">environment</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">SERVICES=s3</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DEBUG=1</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DATA_DIR=/tmp/localstack/data</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">volumes</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">./.localstack:/var/lib/localstack</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">/var/run/docker.sock:/var/run/docker.sock</span><span style="color: #DEE492">&quot;</span></span></code></pre></div>



<p>Start localstack:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="docker-compose up -d" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">docker-compose</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">up</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-d</span></span></code></pre></div>



<p>Tạo profile cho Localstack:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="aws configure --profile localstack
 
AWS Access Key ID [****************demo]: dummy
AWS Secret Access Key [****************demo]: dummy
Default region name [ap-northeast-1]: ap-northeast-1
Default output format [json]: json" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">configure</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--profile</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack</span></span>
<span class="line"><span style="color: #F6F6F4"> </span></span>
<span class="line"><span style="color: #62E884">AWS</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Access</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ID</span><span style="color: #F6F6F4"> [****************demo]: dummy</span></span>
<span class="line"><span style="color: #62E884">AWS</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Secret</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Access</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Key</span><span style="color: #F6F6F4"> [****************demo]: dummy</span></span>
<span class="line"><span style="color: #62E884">Default</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">region</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">name</span><span style="color: #F6F6F4"> [ap-northeast-1]: ap-northeast-1</span></span>
<span class="line"><span style="color: #62E884">Default</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">output</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">format</span><span style="color: #F6F6F4"> [json]: json</span></span></code></pre></div>
</div></div>



<p>Or</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="vi ~/.aws/config" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">vi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">~/.aws/config</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">VimL</span><span role="button" tabindex="0" data-code="[profile localstack]
output = json
region = ap-northeast-1" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">[profile localstack]</span></span>
<span class="line"><span style="color: #F6F6F4">output </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> json</span></span>
<span class="line"><span style="color: #F6F6F4">region </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> ap-northeast-</span><span style="color: #BF9EEE">1</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="vi ~/.aws/credentials" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">vi</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">~/.aws/credentials</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">VimL</span><span role="button" tabindex="0" data-code="[localstack]
aws_access_key_id = dummy
aws_secret_access_key = dummy" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">[localstack]</span></span>
<span class="line"><span style="color: #F6F6F4">aws_access_key_id </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> dummy</span></span>
<span class="line"><span style="color: #F6F6F4">aws_secret_access_key </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> dummy</span></span></code></pre></div>



<h4 id="tao-s3-trong-localstack" class="wp-block-heading">Tạo S3 trong Localstack:</h4>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="aws --endpoint-url=http://localhost:4566 --profile localstack s3api create-bucket --bucket test-bucket --create-bucket-configuration LocationConstraint=ap-northeast-1

# Kết quả:
{
    &quot;Location&quot;: &quot;http://test-bucket.s3.localhost.localstack.cloud:4566/&quot;
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--endpoint-url=http://localhost:4566</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--profile</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3api</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">create-bucket</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--bucket</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test-bucket</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--create-bucket-configuration</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">LocationConstraint=ap-northeast-1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B"># Kết quả:</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #62E884">&quot;Location&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">http://test-bucket.s3.localhost.localstack.cloud:4566/</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="aws s3 ls --endpoint-url=http://localhost:4566 --profile localstack

# Kết quả:
2023-11-15 10:24:40 test-bucket" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">s3</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ls</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--endpoint-url=http://localhost:4566</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--profile</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B"># Kết quả:</span></span>
<span class="line"><span style="color: #62E884">2023-11-15</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">10</span><span style="color: #E7EE98">:24:40</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test-bucket</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">YAML</span><span role="button" tabindex="0" data-code="# .env

# Cả 2 endpoint đều hoạt động với Localstack ở local.
#S3_ENDPOINT='http://localhost:4566'
S3_ENDPOINT='http://test-bucket.s3.localhost.localstack.cloud:4566/'
S3_AWS_ACCESS_KEY_ID='dummy'
S3_AWS_SECRET_KEY='dummy'
S3_AWS_BUCKET_NAME='test-bucket'" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B"># .env</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B"># Cả 2 endpoint đều hoạt động với Localstack ở local.</span></span>
<span class="line"><span style="color: #7B7F8B">#S3_ENDPOINT=&#39;http://localhost:4566&#39;</span></span>
<span class="line"><span style="color: #E7EE98">S3_ENDPOINT=&#39;http://test-bucket.s3.localhost.localstack.cloud:4566/&#39;</span></span>
<span class="line"><span style="color: #E7EE98">S3_AWS_ACCESS_KEY_ID=&#39;dummy&#39;</span></span>
<span class="line"><span style="color: #E7EE98">S3_AWS_SECRET_KEY=&#39;dummy&#39;</span></span>
<span class="line"><span style="color: #E7EE98">S3_AWS_BUCKET_NAME=&#39;test-bucket&#39;</span></span></code></pre></div>



<h4 id="tao-dynamodb-trong-localstack" class="wp-block-heading">Tạo Dynamodb trong Localstack:</h4>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">YAML</span><span role="button" tabindex="0" data-code="version: &quot;3.2&quot;
services:
  localstack:
    image: localstack/localstack:latest
    container_name: localstack_demo
    ports:
      # - &quot;127.0.0.1:4566:4566&quot; # LocalStack Gateway
      - &quot;127.0.0.1:4510-4559:4510-4559&quot; # external services port range
      - &quot;0.0.0.0:4566:4566&quot;
    environment:
      - SERVICES=dynamodb
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
    volumes:
      - &quot;./.localstack:/var/lib/localstack&quot;
      - &quot;/var/run/docker.sock:/var/run/docker.sock&quot;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #97E1F1">version</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">3.2</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #97E1F1">services</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">localstack</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">image</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack/localstack:latest</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">container_name</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack_demo</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">ports</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #7B7F8B"># - &quot;127.0.0.1:4566:4566&quot; # LocalStack Gateway</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">127.0.0.1:4510-4559:4510-4559</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4"> </span><span style="color: #7B7F8B"># external services port range</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">0.0.0.0:4566:4566</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">environment</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">SERVICES=dynamodb</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DEBUG=1</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">DATA_DIR=/tmp/localstack/data</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #97E1F1">volumes</span><span style="color: #F286C4">:</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">./.localstack:/var/lib/localstack</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">      </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">/var/run/docker.sock:/var/run/docker.sock</span><span style="color: #DEE492">&quot;</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">Zsh</span><span role="button" tabindex="0" data-code="aws dynamodb create-table \
    --table-name test \
    --key-schema AttributeName=id,KeyType=HASH \
    --attribute-definitions AttributeName=id,AttributeType=S \
    --billing-mode PAY_PER_REQUEST \
    --region ap-northeast-1 \
    --endpoint-url=http://localhost:4566 \
    --profile localstack

# Kết quả:
{
    &quot;TableDescription&quot;: {
        &quot;AttributeDefinitions&quot;: [
            {
                &quot;AttributeName&quot;: &quot;id&quot;,
                &quot;AttributeType&quot;: &quot;S&quot;
            }
        ],
        &quot;TableName&quot;: &quot;test&quot;,
        &quot;KeySchema&quot;: [
            {
                &quot;AttributeName&quot;: &quot;id&quot;,
                &quot;KeyType&quot;: &quot;HASH&quot;
            }
        ],
        &quot;TableStatus&quot;: &quot;ACTIVE&quot;,
        &quot;CreationDateTime&quot;: &quot;2023-11-15T11:29:05.597000+07:00&quot;,
        &quot;ProvisionedThroughput&quot;: {
            &quot;LastIncreaseDateTime&quot;: &quot;1970-01-01T07:00:00+07:00&quot;,
            &quot;LastDecreaseDateTime&quot;: &quot;1970-01-01T07:00:00+07:00&quot;,
            &quot;NumberOfDecreasesToday&quot;: 0,
            &quot;ReadCapacityUnits&quot;: 0,
            &quot;WriteCapacityUnits&quot;: 0
        },
        &quot;TableSizeBytes&quot;: 0,
        &quot;ItemCount&quot;: 0,
        &quot;TableArn&quot;: &quot;arn:aws:dynamodb:ap-northeast-1:000000000000:table/test&quot;,
        &quot;TableId&quot;: &quot;fb25d41f-0563-4be9-8b21-75bc3b7006b9&quot;,
        &quot;BillingModeSummary&quot;: {
            &quot;BillingMode&quot;: &quot;PAY_PER_REQUEST&quot;,
            &quot;LastUpdateToPayPerRequestDateTime&quot;: &quot;2023-11-15T11:29:05.597000+07:00&quot;
        }
    }
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #62E884">aws</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dynamodb</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">create-table</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--table-name</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--key-schema</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">AttributeName=id,KeyType=HASH</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--attribute-definitions</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">AttributeName=id,AttributeType=S</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--billing-mode</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">PAY_PER_REQUEST</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--region</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ap-northeast-1</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--endpoint-url=http://localhost:4566</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">\</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #BF9EEE">--profile</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localstack</span></span>
<span class="line"></span>
<span class="line"><span style="color: #7B7F8B"># Kết quả:</span></span>
<span class="line"><span style="color: #F6F6F4">{</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #62E884">&quot;TableDescription&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">{</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;AttributeDefinitions&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> [</span></span>
<span class="line"><span style="color: #F6F6F4">            {</span></span>
<span class="line"><span style="color: #F6F6F4">                </span><span style="color: #62E884">&quot;AttributeName&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">id</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">                </span><span style="color: #62E884">&quot;AttributeType&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">S</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">            }</span></span>
<span class="line"><span style="color: #F6F6F4">        ],</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;TableName&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">test</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;KeySchema&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> [</span></span>
<span class="line"><span style="color: #F6F6F4">            {</span></span>
<span class="line"><span style="color: #F6F6F4">                </span><span style="color: #62E884">&quot;AttributeName&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">id</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">                </span><span style="color: #62E884">&quot;KeyType&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">HASH</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">            }</span></span>
<span class="line"><span style="color: #F6F6F4">        ],</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;TableStatus&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">ACTIVE</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;CreationDateTime&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">2023-11-15T11:29:05.597000+07:00</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;ProvisionedThroughput&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">{</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;LastIncreaseDateTime&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">1970-01-01T07:00:00+07:00</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;LastDecreaseDateTime&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">1970-01-01T07:00:00+07:00</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;NumberOfDecreasesToday&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">0</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;ReadCapacityUnits&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">0</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;WriteCapacityUnits&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">0</span></span>
<span class="line"><span style="color: #F6F6F4">        },</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;TableSizeBytes&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">0</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;ItemCount&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">0</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;TableArn&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">arn:aws:dynamodb:ap-northeast-1:000000000000:table/test</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;TableId&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">fb25d41f-0563-4be9-8b21-75bc3b7006b9</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #62E884">&quot;BillingModeSummary&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">{</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;BillingMode&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">PAY_PER_REQUEST</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">,</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #62E884">&quot;LastUpdateToPayPerRequestDateTime&quot;</span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">2023-11-15T11:29:05.597000+07:00</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">        }</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<pre class="wp-block-verse">Bạn muốn sử dụng dịch vụ nào của AWS thì thêm dịch vụ đấy vào SERVICES trong file docker-compose.yml.</pre>



<p>Tài liệu tham khảo: <a href="https://docs.localstack.cloud/">https://docs.localstack.cloud/</a></p>
<p>The post <a href="https://blog.tomosia.com.vn/localstack-gia-lap-moi-truong-aws/">Localstack, giả lập môi trường AWS.</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/localstack-gia-lap-moi-truong-aws/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Tích hợp Minio với Rails app</title>
		<link>https://blog.tomosia.com.vn/tich-hop-minio-voi-rails-app/</link>
					<comments>https://blog.tomosia.com.vn/tich-hop-minio-voi-rails-app/#comments</comments>
		
		<dc:creator><![CDATA[Tùng Nguyễn]]></dc:creator>
		<pubDate>Thu, 19 Oct 2023 01:36:24 +0000</pubDate>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Minio]]></category>
		<category><![CDATA[Aws]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1335</guid>

					<description><![CDATA[<p>Min.io&#160;&#8211; Object Storage Server và cách để tích hợp MinIO vào trong ứng dụng Rails. Mời các bạn&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/tich-hop-minio-voi-rails-app/">Tích hợp Minio với Rails app</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a rel="noreferrer noopener" href="http://min.io/" target="_blank">Min.io</a>&nbsp;&#8211; Object Storage Server và cách để tích hợp MinIO vào trong ứng dụng Rails. Mời các bạn cùng đọc</p>



<p>1, <strong>Minio là gi?</strong></p>



<pre class="wp-block-code"><code>High Performance Object Storage
for Modern Data Lakes

<code>MinIO is a high-performance, S3 compatible object store. It is built for
large scale AI/ML, data lake and database workloads. It is software-defined
and runs on any cloud or on-premises infrastructure. MinIO is dual-licensed
under open source GNU AGPL v3 and a commercial enterprise license.</code></code></pre>



<p>để ngắn gọn hơn thì: <strong>Minio giống như dịch vụ AWS S3, nhưng được host local</strong>.</p>



<p>Minio là một object storage server được implement những public API giống như AWS S3. Điều đó có nghĩa là những ứng dụng có thể config để giao tiếp với Minio thì cũng có thể giao tiếp với AWS S3. Là một server lưu trữ object nên có thể được sử dụng để lưu trữ những unstructured data như ảnh, video, log files, backups và container/VM images. Dung lượng của 1 object có thể dao động từ một vài KB tới tối đa là 5TB. File cũng được gom lại trong 1 buckets, nó là được chỉ cùng với access key khi dùng app. Đây là giao diện của minio:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="518" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-47-1024x518.png" alt="" class="wp-image-1338" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-47-1024x518.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-47-300x152.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-47-768x389.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-47-1536x778.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-47-380x192.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-47-800x405.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-47-1160x587.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-47.png 1839w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="532" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-49.png" alt="This image has an empty alt attribute; its file name is image-48-1024x532.png" class="wp-image-1340" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-49.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-49-300x156.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-49-768x399.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-49-380x197.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-49-800x416.png 800w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>2, <strong>Setup đơn giản</strong></p>



<p>Minio có các gói docker được cài sẵn và có thể cài trực tiếp. ở đây mình sẽ chia sẽ cách cài trực tiếp với Ubuntu</p>



<p>Lệnh cài minio server</p>



<pre class="wp-block-code"><code>wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20231007150738.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb</code></pre>



<p><br>kiểm tra minio đã được cài hay chưa</p>



<pre class="wp-block-code"><code>which minio   
### /usr/local/bin/minio </code></pre>



<p>Run minio. chạy lệnh sau để run minio trên máy local. có thể thay thế thư mục tùy theo ý minh</p>



<pre class="wp-block-code"><code>mkdir ~/minio #thư mục lưu trữ 
minio server ~/minio --console-address :9001</code></pre>



<p>kết quả <br></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="295" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-51-1024x295.png" alt="" class="wp-image-1343" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-51-1024x295.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-51-300x87.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-51-768x222.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-51-1536x443.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-51-380x110.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-51-800x231.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-51-1160x335.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-51.png 1685w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>3, config với rails</p>



<p>thêm config này vào file storage.yml</p>



<pre class="wp-block-code"><code>minio:
  service: S3
  access_key_id: &lt;%= ENV&#91;'MINIO_USER'] %&gt;
  secret_access_key: &lt;%= ENV&#91;'MINIO_PASSWORD'] %&gt;
  region: us-east-1
  bucket: xxxx
  endpoint: &lt;%= ENV&#91;'MINIO_ENPOINT'] %&gt;
  force_path_style: true
</code></pre>



<p>thêm config này vào enviroments</p>



<pre class="wp-block-code"><code>config.active_storage.service = :minio</code></pre>



<p>Như vậy là có thể upload và quản lí file với minio!!!<br></p>



<p>Tiếp đến là tạo một views upload đơn giản rồi chạy&nbsp;<code>rails s</code>&nbsp;và xem kết quả&nbsp;</p>



<figure class="wp-block-image"><img decoding="async" src="https://twemoji.maxcdn.com/v/14.0.2/72x72/1f603.png" alt="😃"/></figure>



<p>&nbsp;Happy coding !</p>



<p></p>
<p>The post <a href="https://blog.tomosia.com.vn/tich-hop-minio-voi-rails-app/">Tích hợp Minio với Rails app</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/tich-hop-minio-voi-rails-app/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
	</channel>
</rss>
