<?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/danh-muc/infrastructure/aws/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/danh-muc/infrastructure/aws/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Fri, 26 Jan 2024 04:35:59 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</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/danh-muc/infrastructure/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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">3. Copy UploadID value để dùng cho các bước sau</p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">5.&nbsp;&nbsp;&nbsp;&nbsp;Copy&nbsp;<strong>ETag</strong>&nbsp;value để dùng cho bước sau</p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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>Cài đặt nginx trên Amazon Linux 2 (ECS Optimized)</title>
		<link>https://blog.tomosia.com.vn/cai-dat-nginx-tren-amazon-linux-2-ecs-optimized/</link>
					<comments>https://blog.tomosia.com.vn/cai-dat-nginx-tren-amazon-linux-2-ecs-optimized/#comments</comments>
		
		<dc:creator><![CDATA[Nguyen Anh]]></dc:creator>
		<pubDate>Fri, 24 Nov 2023 06:43:30 +0000</pubDate>
				<category><![CDATA[Kinh nghiệm]]></category>
		<category><![CDATA[Web Server]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1978</guid>

					<description><![CDATA[<p>Đối với một số bài toàn sử dụng ECS docker và muốn chạy nhiều dịch vụ trên một&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/cai-dat-nginx-tren-amazon-linux-2-ecs-optimized/">Cài đặt nginx trên Amazon Linux 2 (ECS Optimized)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Đối với một số bài toàn sử dụng ECS docker và muốn chạy nhiều dịch vụ trên một EC2 để tiết kiệm chi phí thì đôi lúc chúng ta cần setup nginx và đây là cách hướng dẫn. Trong bài toán này hệ thống sử dụng ECS và EC2 Amazon Linux 2 (ECS Optimized).</p>



<p class="wp-block-paragraph">1. <strong>Sử dụng kho lưu trữ Extra Packages for Enterprise Linux (EPEL)</strong>:</p>



<p class="wp-block-paragraph">Kho lưu trữ EPEL thường chứa các gói phần mềm bổ sung mà có thể không có sẵn trong các kho lưu trữ mặc định của Amazon Linux.</p>



<p class="wp-block-paragraph">Đầu tiên, cài đặt kho lưu trữ EPEL:</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">JavaScript</span><span role="button" tabindex="0" data-code="sudo amazon-linux-extras install epel -y" 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">sudo amazon</span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">linux</span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">extras install epel </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">y</span></span></code></pre></div>



<p class="wp-block-paragraph">2<strong>. Cài đặt Nginx</strong>:</p>



<p class="wp-block-paragraph">Sau khi thêm kho lưu trữ EPEL, bạn có thể thử cài đặt Nginx bằng <code>yum</code>:</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">JavaScript</span><span role="button" tabindex="0" data-code="sudo yum install nginx -y" 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">sudo yum install nginx </span><span style="color: #F286C4">-</span><span style="color: #F6F6F4">y</span></span></code></pre></div>



<p class="wp-block-paragraph">3. <strong>Khởi động và Kích hoạt Nginx</strong>:</p>



<p class="wp-block-paragraph">Sau khi cài đặt, khởi động và kích hoạt dịch vụ Nginx:</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">JavaScript</span><span role="button" tabindex="0" data-code="sudo systemctl start nginx
sudo systemctl enable nginx" 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">sudo systemctl start nginx</span></span>
<span class="line"><span style="color: #F6F6F4">sudo systemctl enable nginx</span></span></code></pre></div>



<p class="wp-block-paragraph">4. <strong>Kiểm tra Trạng thái Nginx</strong>:</p>



<p class="wp-block-paragraph">Kiểm tra trạng thái của dịch vụ Nginx để xác nhận rằng nó đang chạy:</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">JavaScript</span><span role="button" tabindex="0" data-code="sudo systemctl status nginx" 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">sudo systemctl status nginx</span></span></code></pre></div>
<p>The post <a href="https://blog.tomosia.com.vn/cai-dat-nginx-tren-amazon-linux-2-ecs-optimized/">Cài đặt nginx trên Amazon Linux 2 (ECS Optimized)</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/cai-dat-nginx-tren-amazon-linux-2-ecs-optimized/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Cài đặt MySQL trên Amazon Linux</title>
		<link>https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/</link>
					<comments>https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/#comments</comments>
		
		<dc:creator><![CDATA[Anh Le]]></dc:creator>
		<pubDate>Wed, 15 Nov 2023 18:46:52 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1901</guid>

					<description><![CDATA[<p>Giới thiệu Đối với các website không yêu cầu nhiều về quản lý CSDL như blog, các dự&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/">Cài đặt MySQL trên Amazon Linux</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h5 id="gioi-thieu" class="wp-block-heading">Giới thiệu</h5>



<p class="wp-block-paragraph">Đối với các website không yêu cầu nhiều về quản lý CSDL như blog, các dự án cần build môi trường Dev, Staging,&#8230; thì bạn có thể giản thiểu chi phí cho việc quản lý CSDL bằng cách cài đặt trực tiếp MySQL lên EC2.</p>



<h5 id="cac-buoc-thuc-hien" class="wp-block-heading">Các bước thực hiện</h5>



<p class="wp-block-paragraph">Step1: Thêm Mysql repository.</p>



<p class="wp-block-paragraph">Trước tiên, chúng ta cần thêm kho lưu trữ MySQL Yum vào danh sách kho lưu trữ của máy chủ Amazon Linux 2023. Thao tác này chỉ được thực hiện một lần và cung cấp tất cả các kho phiên bản gói MySQL.</p>



<p class="wp-block-paragraph">Sử dụng wget để tải về repository bằng command.</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">Bash</span><span role="button" tabindex="0" data-code="/* For MySQL 5.7 */
sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

/* For MySQL 8 */
sudo wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm " 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">/*</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">For</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">5.7</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE; font-style: italic">*</span><span style="color: #E7EE98">/</span></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">wget</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">/*</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">For</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">8</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE; font-style: italic">*</span><span style="color: #E7EE98">/</span></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">wget</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm</span><span style="color: #F6F6F4"> </span></span></code></pre></div>



<p class="wp-block-paragraph">Nhập y để confirm tải package.</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">Bash</span><span role="button" tabindex="0" data-code="Dependencies Resolved

======================================================================================================================================================================================================
 Package                                               Arch                               Version                           Repository                                                           Size
======================================================================================================================================================================================================
Installing:
 mysql80-community-release                             noarch                             el7-5                             /mysql80-community-release-el7-5.noarch                             9.1 k

Transaction Summary
======================================================================================================================================================================================================
Install  1 Package

Total size: 9.1 k
Installed size: 9.1 k
Is this ok [y/d/N]: y" 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">Dependencies</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Resolved</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">======================================================================================================================================================================================================</span></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #62E884">Package</span><span style="color: #F6F6F4">                                               </span><span style="color: #E7EE98">Arch</span><span style="color: #F6F6F4">                               </span><span style="color: #E7EE98">Version</span><span style="color: #F6F6F4">                           </span><span style="color: #E7EE98">Repository</span><span style="color: #F6F6F4">                                                           </span><span style="color: #E7EE98">Size</span></span>
<span class="line"><span style="color: #F6F6F4">======================================================================================================================================================================================================</span></span>
<span class="line"><span style="color: #62E884">Installing:</span></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #62E884">mysql80-community-release</span><span style="color: #F6F6F4">                             </span><span style="color: #E7EE98">noarch</span><span style="color: #F6F6F4">                             </span><span style="color: #E7EE98">el7-5</span><span style="color: #F6F6F4">                             </span><span style="color: #E7EE98">/mysql80-community-release-el7-5.noarch</span><span style="color: #F6F6F4">                             </span><span style="color: #BF9EEE">9.1</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">k</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Transaction</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Summary</span></span>
<span class="line"><span style="color: #F6F6F4">======================================================================================================================================================================================================</span></span>
<span class="line"><span style="color: #62E884">Install</span><span style="color: #F6F6F4">  </span><span style="color: #BF9EEE">1</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Package</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Total</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">size:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">9.1</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">k</span></span>
<span class="line"><span style="color: #62E884">Installed</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">size:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">9.1</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">k</span></span>
<span class="line"><span style="color: #62E884">Is</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">this</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ok</span><span style="color: #F6F6F4"> [y/d/N]: y</span></span></code></pre></div>



<p class="wp-block-paragraph">Kiểm tra repository đã tải thành công chưa với câu lệ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">Bash</span><span role="button" tabindex="0" data-code="sudo ls -lrt" 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">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ls</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-lrt</span></span></code></pre></div>



<p class="wp-block-paragraph">Output:</p>



<p class="wp-block-paragraph"><em>[ec2-user@ip-172-31-32-xxx ~]$ sudo ls -lrt<br>total 12<br>-rw-r&#8211;r&#8211;. 1 root root 10534 Jul 25 2022 mysql80-community-release-el9-1.noarch.rpm</em></p>



<p class="wp-block-paragraph">Step 2: Cài đặt MySQL.</p>



<p class="wp-block-paragraph">For MySQL 5.7</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">Bash</span><span role="button" tabindex="0" data-code="/* For MySQL 5.7 */
sudo yum localinstall mysql57-community-release-el7-11.noarch.rpm" 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">/*</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">For</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">5.7</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE; font-style: italic">*</span><span style="color: #E7EE98">/</span></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">yum</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">localinstall</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql57-community-release-el7-11.noarch.rpm</span></span></code></pre></div>



<p class="wp-block-paragraph">Ở bước này nếu bạn gặp lỗi tương tự như bên dưới thì tiếp tục chạy 2 lệnh tiếp theo để fix nhé.</p>



<p class="wp-block-paragraph"><strong>Failing package is: mysql-community-client-5.7.39-1.el7.x86_64<br>GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql</strong></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">Bash</span><span role="button" tabindex="0" data-code="sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

sudo yum -y install mysql-community-server" 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">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">rpm</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">--import</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">https://repo.mysql.com/RPM-GPG-KEY-mysql-2022</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">yum</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">install</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql-community-server</span></span></code></pre></div>



<p class="wp-block-paragraph">For MySQL 8.</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">Bash</span><span role="button" tabindex="0" data-code="sudo dnf install mysql80-community-release-el9-1.noarch.rpm
dnf repolist enabled | grep &quot;mysql.*-community.*&quot;
sudo dnf install mysql-community-server" 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">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dnf</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">install</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql80-community-release-el9-1.noarch.rpm</span></span>
<span class="line"><span style="color: #62E884">dnf</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">repolist</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">enabled</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">|</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">grep</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">mysql.*-community.*</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #62E884">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">dnf</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">install</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql-community-server</span></span></code></pre></div>



<p class="wp-block-paragraph">Step 3: Sau khi hoàn tất các câu lệnh cài đặt, ta thực hiện start MySQL.</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">Bash</span><span role="button" tabindex="0" data-code="sudo systemctl start mysqld.service" 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">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">systemctl</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">start</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysqld.service</span></span></code></pre></div>



<p class="wp-block-paragraph">Step 4: Kiểm tra trạng thái của Mysql hiện tại.</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">Bash</span><span role="button" tabindex="0" data-code="sudo systemctl status mysqld.service" 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">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">systemctl</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">status</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysqld.service</span></span></code></pre></div>



<p class="wp-block-paragraph">Nếu thành công bạn sẽ thấy thông báo MySQL đã running <em>Active: active (running)</em> như bên dưới.</p>



<p class="wp-block-paragraph">Dec 01 19:02:20 centos-512mb-sfo2-02 systemd[1]: Started MySQL Server.</p>



<h5 id="thiet-lap-cau-hinh-cho-mysql" class="wp-block-heading">Thiết lập cấu hình cho Mysql</h5>



<p class="wp-block-paragraph">Đổi mật khẩu cho người dùng root<br>Như bạn đã biết, từ Mysql 8.0 thì việc sử dụng đăng nhập không dùng mật khẩu với người dùng root đã bị loại bỏ. Vậy để tìm mật khẩu cho người dùng root khi đăng nhập lần đầu ta sẽ tìm trong file log của mysql. Mật khẩu tạm thời được tìm thấy khi thực hiện câu lệ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">Bash</span><span role="button" tabindex="0" data-code="sudo grep 'temporary password' /var/log/mysqld.log" 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">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">grep</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">temporary password</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/var/log/mysqld.log</span></span></code></pre></div>



<p class="wp-block-paragraph">[ec2-user@ip-172-31-32-xxx ~]$ sudo grep &#8216;temporary password&#8217; /var/log/mysqld.log<br>2023-07-28T09:06:43.641665Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: D6%=yjkDGnp8</p>



<p class="wp-block-paragraph">Tiếp theo ta thực hiện đăng nhập vào MySQL và nhập password tạm thời của người dùng root trong câu lệnh bên dưới: (Mật khẩu root: D6%=yjkDGnp8)</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">Bash</span><span role="button" tabindex="0" data-code="sudo mysql_secure_installation -p" 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">sudo</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysql_secure_installation</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-p</span></span></code></pre></div>



<p class="wp-block-paragraph">Nhập mật khẩu mới cho người dùng root và nhập y cuối mỗi câu để loại bỏ các user test.</p>



<p class="wp-block-paragraph">Lưu ý khi đặt mật khẩu cần tuân theo quy tắt sau:<br>+ Chứa ít nhất 1 ký tự in hoa<br>+ Chứa ít nhất 1 ký tự thường<br>+ Chứa ít nhất 1 số<br>+ Chứa ít nhất 1 ký tự đặc biệt<br>+ Tổng số ký tự phải lớn hơn 8</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">Bash</span><span role="button" tabindex="0" data-code="Securing the MySQL server deployment.


The existing password for the user account root has expired. Please set a new password.

New password: &lt;MẬT KHẨU MỚI&gt;

Re-enter new password: &lt;NHẬP LẠI MẬT KHẨU&gt;
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) :

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!" 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">Securing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">server</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">deployment.</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">The</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">existing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">user</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">account</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">has</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">expired.</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Please</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">set</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">new</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">New</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&lt;</span><span style="color: #E7EE98">MẬT</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">KHẨU</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MỚ</span><span style="color: #F6F6F4">I</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Re-enter</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">new</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password:</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&lt;</span><span style="color: #E7EE98">NHẬP</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">LẠI</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MẬT</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">KHẨ</span><span style="color: #F6F6F4">U</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #62E884">The</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">validate_password</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">component</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">is</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">installed</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">on</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">server.</span></span>
<span class="line"><span style="color: #62E884">The</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">subsequent</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">steps</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">will</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">run</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">with</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">existing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">configuration</span></span>
<span class="line"><span style="color: #62E884">of</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">component.</span></span>
<span class="line"><span style="color: #62E884">Using</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">existing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Estimated</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">strength</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">of</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">100</span></span>
<span class="line"><span style="color: #62E884">Change</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">?</span><span style="color: #F6F6F4"> ((Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #97E1F1">...</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">skipping.</span></span>
<span class="line"><span style="color: #62E884">By</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">default,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">installation</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">has</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">an</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">anonymous</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">user,</span></span>
<span class="line"><span style="color: #62E884">allowing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">anyone</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">log</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">into</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">without</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">having</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">have</span></span>
<span class="line"><span style="color: #62E884">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">user</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">account</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">created</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">them.</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">This</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">is</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">intended</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">only</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span></span>
<span class="line"><span style="color: #62E884">testing,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">and</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">make</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">installation</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">go</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">bit</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">smoother.</span></span>
<span class="line"><span style="color: #62E884">You</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">should</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">remove</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">them</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">before</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">moving</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">into</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">production</span></span>
<span class="line"><span style="color: #62E884">environment.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Remove</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">anonymous</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">users?</span><span style="color: #F6F6F4"> (Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> y</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Normally,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">should</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">only</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">be</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">allowed</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">connect</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">from</span></span>
<span class="line"><span style="color: #62E884">&#39;localhost&#39;</span><span style="color: #97E1F1">.</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">This</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ensures</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">that</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">someone</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">cannot</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">guess</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">at</span></span>
<span class="line"><span style="color: #62E884">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">password</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">from</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">network.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Disallow</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">root</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">login</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">remotely?</span><span style="color: #F6F6F4"> (Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> y</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">By</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">default,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">comes</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">with</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">named</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">test</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">that</span></span>
<span class="line"><span style="color: #62E884">anyone</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">can</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">access.</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">This</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">is</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">also</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">intended</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">only</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">testing,</span></span>
<span class="line"><span style="color: #62E884">and</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">should</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">be</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">removed</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">before</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">moving</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">into</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">a</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">production</span></span>
<span class="line"><span style="color: #62E884">environment.</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Remove</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">and</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">access</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">it?</span><span style="color: #F6F6F4"> (Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> y</span></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #62E884">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Dropping</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database...</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4"> </span><span style="color: #62E884">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Removing</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">privileges</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">on</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">test</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database...</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Reloading</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">the</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">privilege</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">tables</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">will</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ensure</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">that</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">all</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">changes</span></span>
<span class="line"><span style="color: #62E884">made</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">so</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">far</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">will</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">take</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">effect</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">immediately.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">Reload</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">privilege</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">tables</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">now?</span><span style="color: #F6F6F4"> (Press </span><span style="color: #E7EE98">y</span><span style="color: #F286C4">|</span><span style="color: #62E884">Y</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Yes,</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">any</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">other</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">key</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">for</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">No</span><span style="color: #F6F6F4">) </span><span style="color: #97E1F1">:</span><span style="color: #F6F6F4"> y</span></span>
<span class="line"><span style="color: #62E884">Success.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #62E884">All</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">done!</span></span></code></pre></div>



<p class="wp-block-paragraph">Sau khi hoàn tất bước đổi mật khẩu ở trên, chúng ta có thể thực hiện đăng nhập lại với mật khẩu vừa đổi.</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">Bash</span><span role="button" tabindex="0" data-code="mysql -uroot -pPass_xxxxx" 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">mysql</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-uroot</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-pPass_xxxxx</span></span></code></pre></div>



<h5 id="tao-db-va-nguoi-dung-cho-db-cua-ung-dung-web" class="wp-block-heading">Tạo DB và người dùng cho DB của ứng dụng web</h5>



<p class="wp-block-paragraph">Để tạo một database mới.</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">Bash</span><span role="button" tabindex="0" data-code="create database db_new;" 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">create</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">database</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_new</span><span style="color: #F6F6F4">;</span></span></code></pre></div>



<p class="wp-block-paragraph">Bước tiếp theo chúng ta sẽ thực hiện tạo một user cho ứng dụng web.</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">Bash</span><span role="button" tabindex="0" data-code="CREATE USER 'user_db'@'localhost' IDENTIFIED BY 'Pass_xxxxx';" 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">CREATE</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">USER</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">user_db</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">@</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">localhost</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">IDENTIFIED</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">BY</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">Pass_xxxxx</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span></code></pre></div>



<p class="wp-block-paragraph">Thêm full quyền quản lý DB cho user vừa tạo ở 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: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">Bash</span><span role="button" tabindex="0" data-code="GRANT ALL PRIVILEGES ON db_new.* TO 'user_db'@'localhost';
FLUSH PRIVILEGES;
exit;" 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">GRANT</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ALL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">PRIVILEGES</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">ON</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_new.</span><span style="color: #BF9EEE; font-style: italic">*</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">TO</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">user_db</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">@</span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">localhost</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #62E884">FLUSH</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">PRIVILEGES</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #97E1F1">exit</span><span style="color: #F6F6F4">;</span></span></code></pre></div>



<p class="wp-block-paragraph">Để kiểm tra bước tạo ở trên đã chuẩn chưa thì chúng ta thực hiện đăng nhập lại với user và password vừa tạo:</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">Bash</span><span role="button" tabindex="0" data-code="mysql -uuser_db -ppass_xxxx" 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">mysql</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-uuser_db</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-ppass_xxxx</span></span></code></pre></div>



<p class="wp-block-paragraph">Kiểm tra trạng thái của MySQL.</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">Bash</span><span role="button" tabindex="0" data-code="Redirecting to /bin/systemctl status mysqld.service
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: d&gt;
Active: active (running) since Mon 2023-07-31 10:10:56 UTC; 2 weeks 2 days&gt;
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Main PID: 250921 (mysqld)
Status: &quot;Server is operational&quot;
Tasks: 46 (limit: 2322)
Memory: 575.6M
CPU: 2h 19min 306ms
CGroup: /system.slice/mysqld.service
└─250921 /usr/sbin/mysqld" 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">Redirecting</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">to</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/bin/systemctl</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">status</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysqld.service</span></span>
<span class="line"><span style="color: #62E884">●</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">mysqld.service</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">-</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">MySQL</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">Server</span></span>
<span class="line"><span style="color: #62E884">Loaded:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">loaded</span><span style="color: #F6F6F4"> (/usr/lib/systemd/system/mysqld.service; </span><span style="color: #62E884">enabled</span><span style="color: #F6F6F4">; </span><span style="color: #62E884">preset:</span><span style="color: #F6F6F4"> d</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #62E884">Active:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">active</span><span style="color: #F6F6F4"> (running) since Mon 2023-07-31 10:10:56 UTC; </span><span style="color: #62E884">2</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">weeks</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">2</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">day</span><span style="color: #F6F6F4">s</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #62E884">Docs:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">man:mysqld</span><span style="color: #F6F6F4">(</span><span style="color: #62E884">8</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #62E884">http://dev.mysql.com/doc/refman/en/using-systemd.html</span></span>
<span class="line"><span style="color: #62E884">Main</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">PID:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">250921</span><span style="color: #F6F6F4"> (mysqld)</span></span>
<span class="line"><span style="color: #62E884">Status:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">Server is operational</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #62E884">Tasks:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">46</span><span style="color: #F6F6F4"> (limit: </span><span style="color: #BF9EEE">2322</span><span style="color: #F6F6F4">)</span></span>
<span class="line"><span style="color: #62E884">Memory:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">575.6</span><span style="color: #E7EE98">M</span></span>
<span class="line"><span style="color: #62E884">CPU:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">2</span><span style="color: #E7EE98">h</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">19</span><span style="color: #E7EE98">min</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">306</span><span style="color: #E7EE98">ms</span></span>
<span class="line"><span style="color: #62E884">CGroup:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/system.slice/mysqld.service</span></span>
<span class="line"><span style="color: #62E884">└─250921</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">/usr/sbin/mysqld</span></span></code></pre></div>



<p class="wp-block-paragraph">Đến bước này là chúng ta đã hoàn thành việc cài đặt Mysql server trên Amazon Linux 2023. Ngoài ra để thực hiện import sql có sẵn vào DB vừa tạo thì chúng ta có thể cài đặt PhpMyadmin hoặc sử dụng command import của mysql.</p>



<h5 id="import-va-export-mysql" class="wp-block-heading">Import và Export Mysql</h5>



<p class="wp-block-paragraph">Để Export Mysql, ở đây ta sẽ sử dụng mysqldump, thực hiện câu lệnh sau tại terminal local:</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">Bash</span><span role="button" tabindex="0" data-code="mysqldump -u user_db -pPass_xxxxx db_export &gt; ./db_backup.sql" 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">mysqldump</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-u</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">user_db</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-pPass_xxxxx</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_export</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&gt;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">./db_backup.sql</span></span></code></pre></div>



<p class="wp-block-paragraph">Lưu ý để sử dụng được DB và import vào DB mới bạn cần xóa warning của mysqldump trong file db_backup.sql vừa export ra. Tìm dòng sau trong file và xóa:</p>



<p class="wp-block-paragraph"><em>mysqldump: [Warning] Using a password on the command line interface can be insecure.</em></p>



<p class="wp-block-paragraph">Để Import Mysql vào db mới ta thực hiện lệ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">Bash</span><span role="button" tabindex="0" data-code="mysql -u username -p db_export &lt; db_backup.sql" 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">mysql</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-u</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">username</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">-p</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_export</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">db_backup.sql</span></span></code></pre></div>



<h5 id="tong-ket" class="wp-block-heading">Tổng kết</h5>



<p class="wp-block-paragraph">Trên đây là toàn bộ quá trình cài đặt Mysql trên Amazon Linux 2023. Các bước hướng dẫn trên được tóm gọn dành cho người có kinh nghiệm khi cài đặt server. Nếu bạn có vấn đề gì trong quá trình cài đặt hãy để lại comment hoặc inbox mình sẽ hướng dẫn cho nhé.</p>



<p class="wp-block-paragraph">Reference:</p>



<p class="wp-block-paragraph"><a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2023.html">https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2023.html</a></p>
<p>The post <a href="https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/">Cài đặt MySQL trên Amazon Linux</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/cai-dat-mysql-tren-amazon-linux/feed/</wfw:commentRss>
			<slash:comments>7</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 class="wp-block-paragraph"><code>Localstack</code> mô phỏng lại môi trường AWS trên máy local.</p>



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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>11</slash:comments>
		
		
			</item>
		<item>
		<title>Các bước triển khai trang web tĩnh bằng AWS S3</title>
		<link>https://blog.tomosia.com.vn/cac-buoc-trien-khai-trang-web-tinh-bang-aws-s3/</link>
					<comments>https://blog.tomosia.com.vn/cac-buoc-trien-khai-trang-web-tinh-bang-aws-s3/#comments</comments>
		
		<dc:creator><![CDATA[Thuc Phan]]></dc:creator>
		<pubDate>Wed, 08 Nov 2023 09:19:24 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1750</guid>

					<description><![CDATA[<p>Triển khai trang web tĩnh (static web page) bằng Amazon Web Services (AWS) S3 là một cách hiệu&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/cac-buoc-trien-khai-trang-web-tinh-bang-aws-s3/">Các bước triển khai trang web tĩnh bằng AWS S3</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Triển khai trang web tĩnh (static web page) bằng Amazon Web Services (AWS) S3 là một cách hiệu quả và tiết kiệm chi phí để đưa trang web của bạn lên internet. Bài viết này sẽ hướng dẫn bạn từng bước cách triển khai trang web tĩnh bằng AWS S3</p>



<h3 id="buoc-1-chuan-bi-noi-dung-trang-web" class="wp-block-heading">Bước 1: Chuẩn bị nội dung trang web</h3>



<p class="wp-block-paragraph">Trước tiên, bạn cần chuẩn bị nội dung cho trang web tĩnh của mình. Đây có thể là các tệp HTML, CSS, JavaScript, hình ảnh và bất kỳ tài liệu tĩnh nào khác bạn muốn hiển thị trên trang web của mình</p>



<p class="wp-block-paragraph">Static website template source code: <a href="https://github.com/thuc-pt/fe-zing-mp3">https://github.com/thuc-pt/fe-zing-mp3</a></p>



<h3 id="buoc-2-tao-mot-s3-bucket" class="wp-block-heading">Bước 2: Tạo một S3 bucket</h3>



<ul class="wp-block-list">
<li>Đăng nhập vào AWS Management Console</li>
</ul>



<ul class="wp-block-list">
<li>Chuyển đến dịch vụ <code>"S3"</code> bằng cách tìm kiếm trong thanh tìm kiếm hoặc nhấp vào nó trong danh sách các dịch vụ</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="627" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-1024x627.png" alt="" class="wp-image-1751" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-1024x627.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-768x470.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-1536x940.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-2048x1253.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-800x490.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM-1160x710.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.44.20-PM.png 3200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Click nút <code>"Create bucket"</code> để tạo mới một bucket</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="627" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-1024x627.png" alt="" class="wp-image-1752" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-1024x627.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-768x471.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-1536x941.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-2048x1255.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-800x490.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM-1160x711.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.45.40-PM.png 3196w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>AWS S3 quy định <code><strong>bucket name</strong></code> là duy nhất trên toàn cầu. Nên đặt tên bucket dạng <code><strong>your-domain-name.com</strong></code></li>
</ul>



<ul class="wp-block-list">
<li>Chọn khu vực AWS (Region) mà bạn muốn lưu trữ bucket</li>
</ul>



<ul class="wp-block-list">
<li>Bỏ qua các cài đặt còn lại (hoặc tuỳ chỉnh theo nhu cầu của bạn) và nhấp vào nút <code>"Create bucket"</code> ở cuối trang để tạo bucket</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="628" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-1024x628.png" alt="" class="wp-image-1753" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-1024x628.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-768x471.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-1536x942.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-2048x1256.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-800x491.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM-1160x711.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.56.50-PM.png 3200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 id="buoc-3-upload-noi-dung-trang-web" class="wp-block-heading">Bước 3: Upload nội dung trang web</h3>



<ul class="wp-block-list">
<li>Chọn bucket bạn đã tạo trong danh sách S3 buckets</li>
</ul>



<ul class="wp-block-list">
<li>Nhấp vào nút <code>"Upload"</code> và sau đó chọn files bạn muốn tải lên</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="629" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-1024x629.png" alt="" class="wp-image-1754" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-1024x629.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-768x472.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-1536x943.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-2048x1258.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-800x491.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM-1160x712.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-7.59.14-PM.png 3198w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Sau khi bạn tải lên nội dung của trang web, hãy đảm bảo rằng tất cả các tệp và thư mục đều có quyền truy cập public để mọi người có thể xem được trang web của bạn. Có thể thực hiện theo các bước sau</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="628" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-1024x628.png" alt="" class="wp-image-1755" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-1024x628.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-768x471.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-1536x942.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-2048x1256.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-800x491.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM-1160x711.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.12.25-PM.png 3196w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="627" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-1024x627.png" alt="" class="wp-image-1756" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-1024x627.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-768x470.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-1536x940.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-2048x1254.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-800x490.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM-1160x710.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.13.21-PM.png 3198w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="629" data-id="1758" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-1024x629.png" alt="" class="wp-image-1758" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-1024x629.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-768x472.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-1536x944.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-2048x1258.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-800x492.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM-1160x713.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.16.27-PM.png 3200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="630" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-1024x630.png" alt="" class="wp-image-1760" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-1024x630.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-300x185.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-768x473.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-1536x945.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-2048x1260.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-380x234.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-800x492.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM-1160x714.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.19.10-PM.png 3198w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="629" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-1024x629.png" alt="" class="wp-image-1761" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-1024x629.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-768x471.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-1536x943.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-2048x1257.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-800x491.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM-1160x712.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.20.16-PM.png 3196w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Sau khi <code>"Make public"</code> xong thì tất cả các files trong bucket đều có thể được truy cập từ internet</li>
</ul>



<h3 id="buoc-4-cau-hinh-trang-web" class="wp-block-heading">Bước 4: Cấu hình trang web</h3>



<ul class="wp-block-list">
<li>Chọn bucket của bạn và chọn <code>"Properties"</code></li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="630" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-1024x630.png" alt="" class="wp-image-1762" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-1024x630.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-768x472.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-1536x944.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-2048x1259.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-380x234.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-800x492.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM-1160x713.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.28.29-PM.png 3194w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="629" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-1024x629.png" alt="" class="wp-image-1763" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-1024x629.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-300x184.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-768x472.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-1536x943.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-2048x1258.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-380x233.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-800x491.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM-1160x712.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.29.42-PM.png 3198w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Sau khi click <code>"Save changes"</code> thì tại block <strong>Static website hosting</strong> sẽ hiển thị một URL. Đây là đường dẫn đến trang web của bạn</li>



<li>Click vào URL để kiểm tra hoạt động</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="630" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-1024x630.png" alt="" class="wp-image-1764" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-1024x630.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-300x185.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-768x473.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-1536x946.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-2048x1261.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-380x234.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-800x493.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM-1160x714.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/Screen-Shot-2023-11-07-at-8.32.33-PM.png 3200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 id="buoc-5-tuy-chinh-ten-mien-va-ssl-optional" class="wp-block-heading">Bước 5: Tùy chỉnh tên miền và SSL (optional)</h3>



<p class="wp-block-paragraph">Nếu bạn muốn sử dụng tên miền tùy chỉnh và cài đặt SSL cho trang web của bạn, bạn có thể sử dụng dịch vụ như Amazon CloudFront hoặc AWS Amplify</p>



<p class="wp-block-paragraph">Bài viết này đã hướng dẫn cách triển khai trang web tĩnh bằng AWS S3. Bằng cách làm theo các bước trên, bạn có thể đưa trang web của mình lên internet một cách dễ dàng và tiết kiệm chi phí. Chúc các bạn thành công!</p>
<p>The post <a href="https://blog.tomosia.com.vn/cac-buoc-trien-khai-trang-web-tinh-bang-aws-s3/">Các bước triển khai trang web tĩnh bằng AWS S3</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/cac-buoc-trien-khai-trang-web-tinh-bang-aws-s3/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Setup New Relic for monitoring AWS Beanstalk and Java Spring Boot</title>
		<link>https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/</link>
					<comments>https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/#comments</comments>
		
		<dc:creator><![CDATA[Việt Nguyễn]]></dc:creator>
		<pubDate>Tue, 31 Oct 2023 10:10:56 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[NewRelic]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1655</guid>

					<description><![CDATA[<p>New Relic là một dịch vụ giúp bạn theo giõi tần suất hoạt động của máy chủ, cũng&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/">Setup New Relic for monitoring AWS Beanstalk and Java Spring Boot</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">New Relic là một dịch vụ giúp bạn theo giõi tần suất hoạt động của máy chủ, cũng như theo giõi các ứng dụng được chạy trên máy chủ như Java, PHP, Ruby,&#8230; Chúng ta có thể theo giõi tổng quan mà không cần phải truy cập vào máy chủ để kiểm tra. </p>



<p class="wp-block-paragraph">Ở bài viết này, mình sẽ hướng dẫn các bạn setup New Relic với máy chủ sử dụng dịch vụ AWS Beanstalk và ứng dụng đc viết bằng Java Spring Boot. Bắt đầu thôiiii.</p>



<h2 id="1-dang-ki-tai-khoan-new-relic" class="wp-block-heading">1. Đăng kí tài khoản New Relic</h2>



<p class="wp-block-paragraph">Đăng kí tài khoản New Relic rất dễ dàng tại link sau: <a href="https://newrelic.com/signup">https://newrelic.com/signup</a></p>



<p class="wp-block-paragraph">Sau khi đăng kí thằng công, màn hình hiển thị trang dashboard của hệ thống và chúng ta có thể bắt đầu setup</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="510" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-1024x510.png" alt="" class="wp-image-1661" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-1024x510.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-300x149.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-768x383.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-1536x765.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-2048x1020.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-380x189.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-800x399.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65-1160x578.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-65.png 3356w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="2-tao-ung-dung-java-va-cai-dat" class="wp-block-heading">2. Tạo ứng dụng Java và cài đặt</h2>



<h3 id="2-1-thong-tin-ung-dung" class="wp-block-heading">2.1. Thông tin ứng dụng</h3>



<p class="wp-block-paragraph">Trên bảng stack, chọn ứng dụng Java và tiếp tục, sau đó chọn <strong>Don&#8217;t have access</strong> the host và chọn Java tại mục <strong>Connect your applications</strong>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="508" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-1024x508.png" alt="" class="wp-image-1662" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-1024x508.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-300x149.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-768x381.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-1536x762.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-2048x1015.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-380x188.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-800x397.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66-1160x575.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-66.png 3356w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Ở bài viết này chúng ta đang thực hiện trên máy chủ AWS Beanstalk nên tôi sẽ chọn <strong>On a host</strong>. Sau đó nhập tên ứng dụng và làm các bước theo hướng dẫn.</p>



<p class="wp-block-paragraph">Ở bước <strong>Tell us about your environment</strong>, tôi chọn <strong>running on Linux</strong> và framework là Spring Boot.</p>



<h3 id="2-2-cai-dat-goi-thu-vien" class="wp-block-heading">2.2. Cài đặt gói thư viện</h3>



<p class="wp-block-paragraph">Bước tiếp theo chúng ta cần tiến hành cài đặt gói thư viện. Bởi vì dùng AWS Beanstalk nên tôi sẽ thực hiện việc cài đặt trong folder <strong><em>.ebextension</em></strong></p>



<p class="wp-block-paragraph">Tạo file <strong><em>newrelic.config</em></strong> trong thư mục <strong><em>.ebextensions</em></strong></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:#F8F8F2;--cbp-line-number-width:16.854156494140625px;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:#efefe1">ShellScript</span><span role="button" tabindex="0" data-code="commands:
  01-download-java-agent:
    command: &quot;curl -O https://download.newrelic.com/newrelic/java-agent/newrelic-agent/current/newrelic-java.zip &amp;&amp; mv newrelic-java.zip /var/newrelic-java.zip&quot;
  02-unzip-java-agent:
    command: &quot;unzip -o /var/newrelic-java.zip -d /var/&quot;
  03-give-permissions-to-newrelic:
    command: &quot;chmod a+rwx /var/newrelic&quot;
  04-replace-license-key:
    command: &quot;sed -i 's/&lt;%= license_key %&gt;/your_application_license_key/g' /var/newrelic/newrelic.yml&quot;
  05-replace-application-name:
    command: &quot;sed -i 's/My Application/your_application_license_key/g' /var/newrelic/newrelic.yml&quot;
  06-enable-infras-and-logs-metric:
       command: &quot;your_application_cmd_curl_infra&quot;" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">commands:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">01-download-java-agent:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">curl -O https://download.newrelic.com/newrelic/java-agent/newrelic-agent/current/newrelic-java.zip &amp;&amp; mv newrelic-java.zip /var/newrelic-java.zip</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">02-unzip-java-agent:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">unzip -o /var/newrelic-java.zip -d /var/</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">03-give-permissions-to-newrelic:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">chmod a+rwx /var/newrelic</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">04-replace-license-key:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">sed -i &#39;s/&lt;%= license_key %&gt;/your_application_license_key/g&#39; /var/newrelic/newrelic.yml</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">05-replace-application-name:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">sed -i &#39;s/My Application/your_application_license_key/g&#39; /var/newrelic/newrelic.yml</span><span style="color: #E9F284">&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">06-enable-infras-and-logs-metric:</span></span>
<span class="line"><span style="color: #F8F8F2">       </span><span style="color: #8BE9FD">command</span><span style="color: #F8F8F2">: </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">your_application_cmd_curl_infra</span><span style="color: #E9F284">&quot;</span></span></code></pre></div>



<p class="wp-block-paragraph">Trong đó:</p>



<ul class="wp-block-list">
<li><strong>your_application_license_key</strong>: license_key của bạn.</li>



<li><strong>your_application_license_key</strong>: Application name mà bạn đã đăng kí vơi new relic.</li>



<li><strong>your_application_cmd_curl_infra</strong>: Command bạn nhận đc ở bước <strong>Connect your logs and infrastructure</strong>.</li>
</ul>



<p class="wp-block-paragraph">Nếu bạn chỉ muốn giám sát ứng dụng mà ko muốn giám sát Infras, bạn có thể bỏ qua bước <strong>06-enable-infras-and-logs-metric</strong>. Nếu cài đặt hãy disable option <strong>Automatically answer &#8220;yes&#8221; to all install prompts. We&#8217;ll stop the installer if there&#8217;s an error.</strong> trên dashboard NewRelic</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="464" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-1024x464.png" alt="" class="wp-image-1665" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-1024x464.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-300x136.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-768x348.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-1536x695.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-2048x927.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-380x172.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-800x362.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67-1160x525.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-67.png 2730w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="3-deploy-voi-codebuild-va-codepipeline" class="wp-block-heading">3. Deploy với CodeBuild và CodePipeline</h2>



<p class="wp-block-paragraph">Chúng ta cần tạo file Procfile trong folder root của source code để định nghĩa câu lệnh chạy ứng dụng java kèm theo NewRelic</p>



<p class="wp-block-paragraph"><strong>Procfile</strong>:</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:#F8F8F2;--cbp-line-number-width:8.42535400390625px;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:#efefe1">ShellScript</span><span role="button" tabindex="0" data-code="web: java -javaagent:/var/newrelic/newrelic.jar -jar app.jar" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">web:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">java</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-javaagent:/var/newrelic/newrelic.jar</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-jar</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">app.jar</span></span></code></pre></div>



<p class="wp-block-paragraph">Config sẽ không chạy nếu folder .ebextensions không được deploy lên Beanstalk. Dưới đây là file <strong>Buildspec</strong> của tôi</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:#F8F8F2;--cbp-line-number-width:16.854171752929688px;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:#efefe1">ShellScript</span><span role="button" tabindex="0" data-code="version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto11
  build:
    commands:
      - mvn install
      - mv target/*.jar app.jar
artifacts:
  files:
    - Procfile
    - app.jar
    - .ebextensions/**/*" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">version:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">0.2</span></span>
<span class="line"></span>
<span class="line"><span style="color: #50FA7B">phases:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">install:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">runtime-versions:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #50FA7B">java:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">corretto11</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">build:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">commands:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">mvn</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">install</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">mv</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">target/</span><span style="color: #BD93F9; font-style: italic">*</span><span style="color: #F1FA8C">.jar</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">app.jar</span></span>
<span class="line"><span style="color: #50FA7B">artifacts:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">files:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">Procfile</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">app.jar</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">-</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">.ebextensions/</span><span style="color: #BD93F9; font-style: italic">**</span><span style="color: #F1FA8C">/</span><span style="color: #BD93F9; font-style: italic">*</span></span></code></pre></div>



<p class="wp-block-paragraph">Cuối cùng sau khi deploy thành công, thực hiện Test Connection trên NewRelic để tạo ứng dụng:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="351" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-1024x351.png" alt="" class="wp-image-1666" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-1024x351.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-300x103.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-768x263.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-1536x527.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-2048x702.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-380x130.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-800x274.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68-1160x398.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-68.png 2258w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 id="4-tong-ket" class="wp-block-heading">4. Tổng kết</h2>



<p class="wp-block-paragraph">Còn 1 phần quan trọng mình chưa đến đó là chi phí, theo mình tìm hiểu NewRelic sẽ tính phía dựa trên dung lượng sử dụng trên hệ thống, chúng ta sẽ được miễn phí với 100GB/tháng</p>



<p class="wp-block-paragraph">Trên đây là tổng hợp các bước setup NewRelic với ứng dụng Java chạy trên AWS Beanstalk của mình, hi vọng giúp ích mọi người.</p>



<p class="wp-block-paragraph">Về những thông số và giá trị đem lại anh em hãy tự trải nghiệm và tận hưởng nheeeeeeeeé</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/">Setup New Relic for monitoring AWS Beanstalk and Java Spring Boot</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/setup-new-relic-for-monitoring-aws-beanstalk-and-java-spring-boot/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Gửi email với Amazon Simple Email Service và Spring boot</title>
		<link>https://blog.tomosia.com.vn/gui-email-voi-amazon-simple-email-service-va-spring-boot/</link>
					<comments>https://blog.tomosia.com.vn/gui-email-voi-amazon-simple-email-service-va-spring-boot/#comments</comments>
		
		<dc:creator><![CDATA[admin_tomosia]]></dc:creator>
		<pubDate>Wed, 11 Oct 2023 01:47:28 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[SES]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=427</guid>

					<description><![CDATA[<p>Amazon Simple Email Service (Amazon SES) là một dịch vụ có quy mô cực kỳ linh hoạt và&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/gui-email-voi-amazon-simple-email-service-va-spring-boot/">Gửi email với Amazon Simple Email Service và Spring boot</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Amazon Simple Email Service (Amazon SES) là một dịch vụ có quy mô cực kỳ linh hoạt và tiết kiệm chi phí dùng để gửi và nhận email. Amazon SES loại bỏ sự phức tạp cũng như chi phí của việc xây dựng một giải pháp email nội bộ hoặc việc cấp phép, cài đặt và vận hành một giải pháp email của bên thứ ba.</p>



<h3 class="wp-block-heading has-large-font-size" id="_1-gioi-thieu-ve-amazon-ses-1"><span id="1-gioi-thieu-ve-amazon-ses">1. Giới thiệu về Amazon SES.</span></h3>



<p class="wp-block-paragraph">Amazon Simple Email Service (Amazon SES) là dịch vụ gửi email trên nền tảng đám mây được thiết kế để giúp các chuyên gia marketing kỹ thuật số và nhà phát triển ứng dụng gửi email marketing, thông báo và giao dịch. Đây là dịch vụ tin cậy, tiết kiệm chi phí dành cho các doanh nghiệp thuộc đủ mọi quy mô sử dụng email để giữ liên lạc với khách hàng của mình.</p>



<p class="wp-block-paragraph">Bạn có thể sử dụng giao diện SMTP hoặc một trong các SDK của AWS để tích hợp Amazon SES trực tiếp vào các ứng dụng hiện có của bạn. Bạn cũng có thể tích hợp tính năng gửi email của Amazon SES vào trang web đang sử dụng.</p>



<p class="has-large-font-size wp-block-paragraph">2. Configuration</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Đầu tiên, chúng ta sẽ xác thực email. </strong></p>



<p class="wp-block-paragraph">Ở màn hình trang chủ của Amazon SES, các bạn nhấn vào nút&nbsp;<strong>Create Identity</strong>&nbsp;để bắt đầu xác thực nhé. </p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-20-1024x270.png" alt="" class="wp-image-434" style="width:794px;height:209px" width="794" height="209" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-20-1024x270.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-20-300x79.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-20-768x202.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-20-1536x405.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-20-2048x540.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-20-380x100.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-20-800x211.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-20-1160x306.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-20.png 2876w" sizes="auto, (max-width: 794px) 100vw, 794px" /></figure>



<p class="wp-block-paragraph">Tiếp theo chúng ta chọn loại xác thực, có 2 loại là&nbsp;<strong>Email Address</strong>&nbsp;(xác thực một địa chỉ email) và&nbsp;<strong>Domain</strong>&nbsp;(xác thực một tên miền). Nếu các bạn có tên miền rồi và muốn gửi email có dạng&nbsp;<code>no-reply@example.com</code>&nbsp;thì bạn chọn&nbsp;<strong>Domain</strong>. Còn nếu bạn chưa có tên miền và muốn dùng địa chỉ email của gmail như&nbsp;<code>hoangnhat1020023@gmail.com</code>&nbsp;thì chọn&nbsp;<strong>Email Address</strong>&nbsp;nhé.<br></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-21-1024x733.png" alt="" class="wp-image-435" style="width:705px;height:505px" width="705" height="505" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-21-1024x733.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-21-300x215.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-21-768x550.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-21-1536x1100.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-21-380x272.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-21-800x573.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-21-1160x831.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-21.png 1880w" sizes="auto, (max-width: 705px) 100vw, 705px" /></figure>



<p class="wp-block-paragraph">Tiếp theo thì AWS sẽ gửi một email đến địa chỉ email bạn vừa nhập, vào email đó và nhấn vào link xác thực để được verify nhé.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Tiếp theo, chúng ta cấu hình IAM để cấp quyền truy cập vào AWS SES<br></strong></p>



<p class="wp-block-paragraph">IAM là viết tắt của&nbsp;<strong>Identity and Access Management</strong>. Đây là một dịch vụ của AWS giúp chúng ta quản lý các tài khoản, quyền truy cập của các tài khoản đó vào các dịch vụ khác của AWS.</p>



<p class="wp-block-paragraph">Để cấp quyền các bạn làm như sau:</p>



<ul class="wp-block-list">
<li>Vào ô tìm kiếm của AWS gõ từ khóa&nbsp;<strong>IAM</strong>&nbsp;để tìm dịch vụ IAM</li>



<li>Chọn&nbsp;<strong>Access Management</strong>&nbsp;bên sidebar bên phải -&gt;&nbsp;<strong>Users</strong>&nbsp;-&gt;&nbsp;<strong>Add users</strong></li>



<li>Điền tên cho user và nhấn&nbsp;<strong>Next</strong>&nbsp;để qua step 2</li>
</ul>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-22-1024x401.png" alt="" class="wp-image-436" style="width:761px;height:297px" width="761" height="297" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-22-1024x401.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-22-300x117.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-22-768x300.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-22-1536x601.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-22-2048x801.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-22-380x149.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-22-800x313.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-22-1160x454.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-22.png 2878w" sizes="auto, (max-width: 761px) 100vw, 761px" /></figure>



<p class="wp-block-paragraph">Chọn&nbsp;<strong>Attach policies directly</strong>&nbsp;-&gt; tìm và chọn&nbsp;<strong>AmazonSESFullAccess</strong>&nbsp;-&gt; nhấn&nbsp;<strong>Next</strong>&nbsp;để qua step 3</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-23-1024x481.png" alt="" class="wp-image-437" style="width:743px;height:349px" width="743" height="349" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-23-1024x481.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-23-300x141.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-23-768x361.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-23-1536x721.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-23-2048x961.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-23-380x178.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-23-800x376.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-23-1160x545.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-23.png 2846w" sizes="auto, (max-width: 743px) 100vw, 743px" /></figure>



<ul class="wp-block-list">
<li>Review lại và nhấn&nbsp;<strong>Create user</strong>&nbsp;để tạo user</li>



<li>Tiếp tục click vào user vừa tạo, chọn tab là&nbsp;<strong>Security credentials</strong>, scroll xuống dưới phần&nbsp;<strong>Access keys</strong>, chọn&nbsp;<strong>Create access key</strong>&nbsp;để tạo access key</li>
</ul>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-24-1024x565.png" alt="" class="wp-image-438" style="width:731px;height:404px" width="731" height="404" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-24-1024x565.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-24-300x166.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-24-768x424.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-24-1536x848.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-24-2048x1131.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-24-380x210.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-24-800x442.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-24-1160x640.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-24.png 2322w" sizes="auto, (max-width: 731px) 100vw, 731px" /></figure>



<p class="wp-block-paragraph">                                                          <em>Chọn Security credentials</em><br></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="406" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-25-1024x406.png" alt="" class="wp-image-439" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-25-1024x406.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-25-300x119.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-25-768x305.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-25-1536x610.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-25-2048x813.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-25-380x151.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-25-800x317.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-25-1160x460.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-25.png 2288w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">                                                       <em>Click vào Create access key</em>  </p>



<ul class="wp-block-list">
<li>Ở Step 1 thì anh em chọn option là&nbsp;<strong>Application running outside AWS</strong>&nbsp;và nhấn&nbsp;<strong>Next</strong></li>
</ul>



<p class="wp-block-paragraph"><a href="https://duthanhduoc.com/images/2023/huong-dan-gui-email-voi-aws-ses-va-nodejs/best-practices.png" target="_blank" rel="noreferrer noopener"></a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="583" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-26-1024x583.png" alt="" class="wp-image-440" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-26-1024x583.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-26-300x171.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-26-768x437.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-26-1536x875.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-26-2048x1166.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-26-380x216.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-26-800x456.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-26-1160x661.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-26.png 2216w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<ul class="wp-block-list">
<li>Ở Step 2 thì anh em có thể điền mô tả cho cái key này hoặc không, optional mà. Nhấn&nbsp;<strong>Next</strong></li>



<li>Ở Step 3 lưu ý là anh em nên download cái file CSV chứa access key và secret key này về máy để dùng sau này nhé. Nhấn&nbsp;<strong>Download .csv file</strong>&nbsp;và&nbsp;<strong>Done</strong>&nbsp;để hoàn thành.</li>
</ul>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-27-1024x497.png" alt="" class="wp-image-441" style="width:723px;height:351px" width="723" height="351" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-27-1024x497.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-27-300x146.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-27-768x373.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-27-1536x746.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-27-2048x995.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-27-380x185.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-27-800x388.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-27-1160x563.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-27.png 2710w" sizes="auto, (max-width: 723px) 100vw, 723px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Key của chúng ta sẽ gồm 2 phần là&nbsp;<strong>Access key</strong>&nbsp;và&nbsp;<strong>Secret access key</strong>. </p>



<p class="wp-block-paragraph"></p>



<p class="has-large-font-size wp-block-paragraph">3. Gửi email với Amazon SES và Spring Boot<br></p>



<p class="has-medium-font-size wp-block-paragraph"><strong>Bước 1: Thêm Dependency vào Maven POM</strong><br></p>



<p class="wp-block-paragraph">Đầu tiên, chúng ta cần thêm các dependency cần thiết vào tệp <code>pom.xml</code> của dự án Spring Boot của bạn. Điều này bao gồm dependency cho Spring Boot Mail Starter và AWS SDK for SES.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="&lt;dependency&gt;
    &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
    &lt;artifactId&gt;spring-boot-starter-mail&lt;/artifactId&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
    &lt;groupId&gt;com.amazonaws&lt;/groupId&gt;
    &lt;artifactId&gt;aws-java-sdk-ses&lt;/artifactId&gt;
    &lt;version&gt;1.11.1003&lt;/version&gt; &lt;!-- Phiên bản cụ thể có thể thay đổi --&gt;
&lt;/dependency&gt;
" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">&lt;</span><span style="color: #FF79C6">dependency</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #8BE9FD; font-style: italic">groupId</span><span style="color: #F8F8F2">&gt;org.springframework.boot&lt;/</span><span style="color: #8BE9FD; font-style: italic">groupId</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #8BE9FD; font-style: italic">artifactId</span><span style="color: #F8F8F2">&gt;spring-boot-starter-mail&lt;/</span><span style="color: #8BE9FD; font-style: italic">artifactId</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">&lt;/</span><span style="color: #FF79C6">dependency</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">&lt;</span><span style="color: #FF79C6">dependency</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #8BE9FD; font-style: italic">groupId</span><span style="color: #F8F8F2">&gt;com.amazonaws&lt;/</span><span style="color: #8BE9FD; font-style: italic">groupId</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #8BE9FD; font-style: italic">artifactId</span><span style="color: #F8F8F2">&gt;aws-java-sdk-ses&lt;/</span><span style="color: #8BE9FD; font-style: italic">artifactId</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #FF79C6">version</span><span style="color: #F8F8F2">&gt;1.11.1003&lt;/</span><span style="color: #FF79C6">version</span><span style="color: #F8F8F2">&gt; &lt;!-- Phiên bản cụ thể có thể thay đổi --&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">&lt;/</span><span style="color: #FF79C6">dependency</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph"><strong>Bước 2: Cấu hình AWS Credentials</strong></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Tiếp theo, bạn cần cấu hình AWS Credentials (Access Key và Secret Key) và cài đặt các thuộc tính email trong tệp <code>application.properties</code> hoặc <code>application.yml</code>.<br></p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="spring.mail.host=smtp.example.com
spring.mail.port=587
spring.mail.username=your-email@example.com
spring.mail.password=your-email-password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

# AWS SES Configuration
aws.accessKey=YOUR_AWS_ACCESS_KEY
aws.secretKey=YOUR_AWS_SECRET_KEY
aws.region=us-east-1
" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">spring.mail.host</span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2">smtp.example.com</span></span>
<span class="line"><span style="color: #F8F8F2">spring.mail.port</span><span style="color: #FF79C6">=</span><span style="color: #BD93F9">587</span></span>
<span class="line"><span style="color: #F8F8F2">spring.mail.username</span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2">your</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">email@example.com</span></span>
<span class="line"><span style="color: #F8F8F2">spring.mail.password</span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2">your</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">email</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">password</span></span>
<span class="line"><span style="color: #F8F8F2">spring.mail.properties.mail.smtp.auth</span><span style="color: #FF79C6">=</span><span style="color: #BD93F9">true</span></span>
<span class="line"><span style="color: #F8F8F2">spring.mail.properties.mail.smtp.starttls.enable</span><span style="color: #FF79C6">=</span><span style="color: #BD93F9">true</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2"># AWS SES Configuration</span></span>
<span class="line"><span style="color: #F8F8F2">aws.accessKey</span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2">YOUR_AWS_ACCESS_KEY</span></span>
<span class="line"><span style="color: #F8F8F2">aws.secretKey</span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2">YOUR_AWS_SECRET_KEY</span></span>
<span class="line"><span style="color: #F8F8F2">aws.region</span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2">us</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">east</span><span style="color: #FF79C6">-</span><span style="color: #BD93F9">1</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph"><strong>Bước 3: Tạo Bean cho Amazon SES</strong></p>



<p class="wp-block-paragraph">Trong ứng dụng Spring Boot của bạn, bạn cần tạo một bean để sử dụng Amazon SES. Bean này sẽ được sử dụng để gửi email qua SES.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AwsConfig {

    @Value(&quot;${aws.accessKey}&quot;)
    private String awsAccessKey;

    @Value(&quot;${aws.secretKey}&quot;)
    private String awsSecretKey;

    @Bean
    public AmazonSimpleEmailService amazonSimpleEmailService() {
        BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKey, awsSecretKey);
        return AmazonSimpleEmailServiceClient.builder()
                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
                .build();
    }
}
" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> com.amazonaws.auth.BasicAWSCredentials;</span></span>
<span class="line"><span style="color: #F8F8F2">import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;</span></span>
<span class="line"><span style="color: #F8F8F2">import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient;</span></span>
<span class="line"><span style="color: #F8F8F2">import org.springframework.beans.factory.annotation.Value;</span></span>
<span class="line"><span style="color: #F8F8F2">import org.springframework.context.annotation.Bean;</span></span>
<span class="line"><span style="color: #F8F8F2">import org.springframework.context.annotation.Configuration;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">@Configuration</span></span>
<span class="line"><span style="color: #F8F8F2">public class AwsConfig {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    @Value(&quot;${aws.accessKey}</span><span style="color: #E9F284">&quot;</span><span style="color: #FF5555; font-style: italic; text-decoration: underline">)</span></span>
<span class="line"><span style="color: #F8F8F2">    private String awsAccessKey;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    @Value(</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">${aws.secretKey}</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">)</span></span>
<span class="line"><span style="color: #F8F8F2">    private String awsSecretKey;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    @Bean</span></span>
<span class="line"><span style="color: #F8F8F2">    public AmazonSimpleEmailService amazonSimpleEmailService() {</span></span>
<span class="line"><span style="color: #F8F8F2">        BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKey, awsSecretKey);</span></span>
<span class="line"><span style="color: #F8F8F2">        return AmazonSimpleEmailServiceClient.builder()</span></span>
<span class="line"><span style="color: #F8F8F2">                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))</span></span>
<span class="line"><span style="color: #F8F8F2">                .build();</span></span>
<span class="line"><span style="color: #F8F8F2">    }</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span></code></pre></div>



<p class="has-medium-font-size wp-block-paragraph"><strong>Bước 4: Gửi Email từ Ứng dụng của bạn</strong></p>



<p class="wp-block-paragraph">Giờ đây, bạn có thể sử dụng <code>JavaMailSender</code> để gửi email qua SES trong ứng dụng Spring Boot của bạn. Dưới đây là ví dụ về cách gửi email từ ứng dụng của bạn:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class EmailService {

    @Autowired
    private JavaMailSender javaMailSender;

    public void sendEmail(String from ,String to, String subject, String body) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(to);
        message.setFrom(from);
        message.setSubject(subject);
        message.setText(body);
        javaMailSender.send(message);
    }
}
" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> org.springframework.beans.factory.annotation.Autowired;</span></span>
<span class="line"><span style="color: #F8F8F2">import org.springframework.mail.SimpleMailMessage;</span></span>
<span class="line"><span style="color: #F8F8F2">import org.springframework.mail.javamail.JavaMailSender;</span></span>
<span class="line"><span style="color: #F8F8F2">import org.springframework.stereotype.Service;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">@Service</span></span>
<span class="line"><span style="color: #F8F8F2">public class EmailService {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    @Autowired</span></span>
<span class="line"><span style="color: #F8F8F2">    private JavaMailSender javaMailSender;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    public void sendEmail(String from ,String to, String subject, String body) {</span></span>
<span class="line"><span style="color: #F8F8F2">        SimpleMailMessage message = new SimpleMailMessage();</span></span>
<span class="line"><span style="color: #F8F8F2">        message.setTo(to);</span></span>
<span class="line"><span style="color: #F8F8F2">        message.setFrom(from);</span></span>
<span class="line"><span style="color: #F8F8F2">        message.setSubject(subject);</span></span>
<span class="line"><span style="color: #F8F8F2">        message.setText(body);</span></span>
<span class="line"><span style="color: #F8F8F2">        javaMailSender.send(message);</span></span>
<span class="line"><span style="color: #F8F8F2">    }</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Sử dụng <code>EmailService</code> để gửi email:<br></p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="@Service
public class MyService {

    @Autowired
    private EmailService emailService;

    public void sendEmail() {
        String to = &quot;recipient@example.com&quot;;
        String from = &quot;hoangnhat102003@gmail.com&quot;;
        String subject = &quot;Test Email&quot;;
        String body = &quot;This is a test email sent via AWS SES and Spring Boot.&quot;;
        emailService.sendEmail(from ,to, subject, body);
    }
}
" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">@</span><span style="color: #50FA7B; font-style: italic">Service</span></span>
<span class="line"><span style="color: #F8F8F2">public </span><span style="color: #FF79C6">class</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">MyService</span><span style="color: #F8F8F2"> {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    @</span><span style="color: #50FA7B; font-style: italic">Autowired</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">private</span><span style="color: #F8F8F2"> EmailService emailService;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">public</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">void</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">sendEmail</span><span style="color: #F8F8F2">() {</span></span>
<span class="line"><span style="color: #F8F8F2">        String to </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">recipient@example.com</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">        String from </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">hoangnhat102003@gmail.com</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">        String subject </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">Test Email</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">        String body </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">This is a test email sent via AWS SES and Spring Boot.</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">        emailService.</span><span style="color: #50FA7B">sendEmail</span><span style="color: #F8F8F2">(from ,to, subject, body);</span></span>
<span class="line"><span style="color: #F8F8F2">    }</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph"></p>



<p class="has-large-font-size wp-block-paragraph">4. Tổng kết</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Trên đây là hướng dẫn cách sử dụng AWS SES để gửi email, tất nhiên là nó không thể nào nói hết được tất cả những thứ liên quan đến AWS SES, nhưng mình đã cố gắng đơn giản hết sức cho mọi người có thể đọc xong là làm được ngay luôn, còn mấy thứ khác thì có thời gian chúng ta sẽ học sau. Đúng không nào 😁</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://blog.tomosia.com.vn/gui-email-voi-amazon-simple-email-service-va-spring-boot/">Gửi email với Amazon Simple Email Service và Spring boot</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/gui-email-voi-amazon-simple-email-service-va-spring-boot/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>Sử dụng localstack để giả lập upload file s3</title>
		<link>https://blog.tomosia.com.vn/su-dung-localstack-de-gia-lap-upload-file-s3/</link>
					<comments>https://blog.tomosia.com.vn/su-dung-localstack-de-gia-lap-upload-file-s3/#comments</comments>
		
		<dc:creator><![CDATA[admin_tomosia]]></dc:creator>
		<pubDate>Sun, 08 Oct 2023 10:04:01 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[localstack]]></category>
		<category><![CDATA[s3]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=847</guid>

					<description><![CDATA[<p>Hí anh em! Tôi&#160;saiury92&#160;đây ! Trong một thập niên qua và cũng có thể một vài thập niên&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/su-dung-localstack-de-gia-lap-upload-file-s3/">Sử dụng localstack để giả lập upload file s3</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Hí anh em! Tôi&nbsp;<a rel="noreferrer noopener" href="https://saiury92.github.io/" target="_blank">saiury92&nbsp;</a>đây ! Trong một thập niên qua và cũng có thể một vài thập niên tới AWS vẫn làm bố của các Cloud Service Providers, 10 dự án thì tới 9 dự án cần upload file lên Amazon S3. Trong bài viết hôm nay, tôi sẽ giúp các đồng dâm thực hiện việc giả lập upload file s3 ở local mà không cần AWS account. Let&#8217;s go !!!!</p>



<h4 id="localstack" class="wp-block-heading"><strong>LocalStack ?</strong></h4>



<p class="wp-block-paragraph">LocalStack là một nền tảng mã nguồn mở cho phép bạn chạy và giả lập các dịch vụ AWS ở local. LocalStack hỗ trợ nhiều dịch vụ AWS khác nhau : S3, Lambda, SNS, ES, SES, API Gateway, &#8230;. Dịch vụ cần quan tâm của chúng ta là S3.</p>



<h4 id="start-localstack-bang-docker" class="wp-block-heading">Start LocalStack bằng docker ?</h4>



<p class="wp-block-paragraph">Chúng ta có thể setup LocalStack trực tiếp trên máy thông qua pip:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="pip install localstack" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">pip install localstack</span></span></code></pre></div>



<p class="wp-block-paragraph">Nhưng bây giờ là thời đại của containerization, chúng ta mà không sử dụng docker là bị sếp nói là lạc hậu đấy ! Để chạy localstack với docker compose cho S3, anh em có thể sử dụng docker-compose.yml file dưới đây:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="version: '3.9'
services:
  localstack:
    image: localstack/localstack:latest
    container_name: localstack_s3_demo
    environment:
      SERVICES: s3
    ports:
      - '127.0.0.1:4566:4566'" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #8BE9FD">version</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">3.9</span><span style="color: #E9F284">&#39;</span></span>
<span class="line"><span style="color: #8BE9FD">services</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #8BE9FD">localstack</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">image</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">localstack/localstack:latest</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">container_name</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">localstack_s3_demo</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">environment</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #8BE9FD">SERVICES</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">s3</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #8BE9FD">ports</span><span style="color: #FF79C6">:</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">127.0.0.1:4566:4566</span><span style="color: #E9F284">&#39;</span></span></code></pre></div>



<p class="wp-block-paragraph">Start LocalStack container để sử dụng nào:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker-compose up -d" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">docker-compose</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">up</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-d</span></span></code></pre></div>



<p class="wp-block-paragraph">Tạo mới một s3 bucket với tên &#8220;<em>bucket-demo</em>&#8220;:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker exec -it localstack_s3_demo awslocal s3 mb s3://bucket-demo" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #50FA7B">docker</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">exec</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">-it</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">localstack_s3_demo</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">awslocal</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">s3</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">mb</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">s3://bucket-demo</span></span></code></pre></div>



<h4 id="upload-file-to-s3" class="wp-block-heading"><strong>Upload file to S3 ?</strong></h4>



<p class="wp-block-paragraph">Để demo việc upload lên file tới S3 tôi sử dụng package <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">@aws-sdk/client-s3</mark> cho gần gũi với đại chúng anh em coder, anh em có thể tham khảo đoạn code dưới đây:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="import { S3Client, PutObjectCommand } from &quot;@aws-sdk/client-s3&quot;;
import fs from &quot;fs&quot;;

const S3_AWS_ACCESS_KEY_ID = &quot;dummy&quot;;
const S3_AWS_SECRET_KEY = &quot;dummy&quot;;
const S3_AWS_BUCKET_NAME = &quot;bucket-demo&quot;;
const useLocal = true; // false if not using LocalStack

const client = new S3Client({
  region: &quot;us-east-1&quot;,
  endpoint: useLocal ? &quot;http://127.0.0.1:4566&quot; : undefined,
  credentials: {
    accessKeyId: S3_AWS_ACCESS_KEY_ID,
    secretAccessKey: S3_AWS_SECRET_KEY,
  },
});

const params = {
  Bucket: S3_AWS_BUCKET_NAME,
  Key: &quot;example.jpg&quot;,
  ContentType: &quot;image/jpeg&quot;,
  Body: fs.readFileSync(&quot;./example.jpg&quot;),
  s3ForcePathStyle: true,
};

const command = new PutObjectCommand(params);

try {
  const response = await client.send(command);
  console.log(response);
  console.log(&quot;File uploaded successfully!&quot;);
} catch (error) {
  console.error(error);
}" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> { S3Client, PutObjectCommand } </span><span style="color: #FF79C6">from</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">@aws-sdk/client-s3</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> fs </span><span style="color: #FF79C6">from</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">fs</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> S3_AWS_ACCESS_KEY_ID </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">dummy</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> S3_AWS_SECRET_KEY </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">dummy</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> S3_AWS_BUCKET_NAME </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">bucket-demo</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> useLocal </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">true</span><span style="color: #F8F8F2">; </span><span style="color: #6272A4">// false if not using LocalStack</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> client </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6; font-weight: bold">new</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">S3Client</span><span style="color: #F8F8F2">({</span></span>
<span class="line"><span style="color: #F8F8F2">  region</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">us-east-1</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  endpoint</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> useLocal </span><span style="color: #FF79C6">?</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">http://127.0.0.1:4566</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">undefined</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  credentials</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> {</span></span>
<span class="line"><span style="color: #F8F8F2">    accessKeyId</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> S3_AWS_ACCESS_KEY_ID,</span></span>
<span class="line"><span style="color: #F8F8F2">    secretAccessKey</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> S3_AWS_SECRET_KEY,</span></span>
<span class="line"><span style="color: #F8F8F2">  },</span></span>
<span class="line"><span style="color: #F8F8F2">});</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> params </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> {</span></span>
<span class="line"><span style="color: #F8F8F2">  Bucket</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> S3_AWS_BUCKET_NAME,</span></span>
<span class="line"><span style="color: #F8F8F2">  Key</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">example.jpg</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  ContentType</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">image/jpeg</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  Body</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> fs.</span><span style="color: #50FA7B">readFileSync</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">./example.jpg</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">),</span></span>
<span class="line"><span style="color: #F8F8F2">  s3ForcePathStyle</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">true</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">};</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> command </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6; font-weight: bold">new</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">PutObjectCommand</span><span style="color: #F8F8F2">(params);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2"> {</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> response </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">await</span><span style="color: #F8F8F2"> client.</span><span style="color: #50FA7B">send</span><span style="color: #F8F8F2">(command);</span></span>
<span class="line"><span style="color: #F8F8F2">  console.</span><span style="color: #50FA7B">log</span><span style="color: #F8F8F2">(response);</span></span>
<span class="line"><span style="color: #F8F8F2">  console.</span><span style="color: #50FA7B">log</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">File uploaded successfully!</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">);</span></span>
<span class="line"><span style="color: #F8F8F2">} </span><span style="color: #FF79C6">catch</span><span style="color: #F8F8F2"> (error) {</span></span>
<span class="line"><span style="color: #F8F8F2">  console.</span><span style="color: #50FA7B">error</span><span style="color: #F8F8F2">(error);</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p class="wp-block-paragraph">Start upload file :</p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code=" &gt; node upload.js
 
{
  '$metadata': {
    httpStatusCode: 200,
    requestId: 'CE5CQBpI8HEwPsSI4pChERwgSYOvFLIjv5xTPbO9Zg1GLEEp80vN',
    extendedRequestId: 'MzRISOwyjmnupAC6A5B7CD242F7B57/JypPGXLh0OVFGcJaaO3KW/hRAqKOpIEEp',
    cfId: undefined,
    attempts: 1,
    totalRetryDelay: 0
  },
  ETag: '&quot;2067c44cf823bd1b9c2cb66ba8f407e2&quot;'
}
File uploaded successfully!
 " style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">&gt;</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">node</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">upload.js</span></span>
<span class="line"><span style="color: #F8F8F2"> </span></span>
<span class="line"><span style="color: #F8F8F2">{</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">&#39;$metadata&#39;</span><span style="color: #8BE9FD">:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">{</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">httpStatusCode:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">200</span><span style="color: #F1FA8C">,</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">requestId:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">CE5CQBpI8HEwPsSI4pChERwgSYOvFLIjv5xTPbO9Zg1GLEEp80vN</span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">,</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">extendedRequestId:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">MzRISOwyjmnupAC6A5B7CD242F7B57/JypPGXLh0OVFGcJaaO3KW/hRAqKOpIEEp</span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">,</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">cfId:</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">undefined,</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">attempts:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">1</span><span style="color: #F1FA8C">,</span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #50FA7B">totalRetryDelay:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">0</span></span>
<span class="line"><span style="color: #F8F8F2">  },</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #50FA7B">ETag:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">&quot;2067c44cf823bd1b9c2cb66ba8f407e2&quot;</span><span style="color: #E9F284">&#39;</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"><span style="color: #50FA7B">File</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">uploaded</span><span style="color: #F8F8F2"> </span><span style="color: #F1FA8C">successfully!</span></span>
<span class="line"><span style="color: #F8F8F2"> </span></span></code></pre></div>



<p class="wp-block-paragraph">Sử dụng package<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">@aws-sdk/s3-request-presigner</mark>để lấy presigned URL:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// getSignedUrl.js

import { S3Client, GetObjectCommand } from &quot;@aws-sdk/client-s3&quot;;
import { getSignedUrl } from &quot;@aws-sdk/s3-request-presigner&quot;;

const S3_AWS_ACCESS_KEY_ID = &quot;dummy&quot;;
const S3_AWS_SECRET_KEY = &quot;dummy&quot;;
const S3_AWS_BUCKET_NAME = &quot;bucket-demo&quot;;
const useLocal = true;

const client = new S3Client({
  region: &quot;us-east-1&quot;,
  endpoint: useLocal ? &quot;http://127.0.0.1:4566&quot; : undefined,
  credentials: {
    accessKeyId: S3_AWS_ACCESS_KEY_ID,
    secretAccessKey: S3_AWS_SECRET_KEY,
  },
});

const params = {
  Bucket: S3_AWS_BUCKET_NAME,
  Key: &quot;example.jpg&quot;,
  Expires: 3600, // The URL will expire in 3600 seconds.
};

const command = new GetObjectCommand(params);

try {
  const url = await getSignedUrl(client, command);
  console.log(url);
} catch (error) {
  console.error(error);
}" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #6272A4">// getSignedUrl.js</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> { S3Client, GetObjectCommand } </span><span style="color: #FF79C6">from</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">@aws-sdk/client-s3</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #FF79C6">import</span><span style="color: #F8F8F2"> { getSignedUrl } </span><span style="color: #FF79C6">from</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">@aws-sdk/s3-request-presigner</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> S3_AWS_ACCESS_KEY_ID </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">dummy</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> S3_AWS_SECRET_KEY </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">dummy</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> S3_AWS_BUCKET_NAME </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">bucket-demo</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> useLocal </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">true</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> client </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6; font-weight: bold">new</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">S3Client</span><span style="color: #F8F8F2">({</span></span>
<span class="line"><span style="color: #F8F8F2">  region</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">us-east-1</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  endpoint</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> useLocal </span><span style="color: #FF79C6">?</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">http://127.0.0.1:4566</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">undefined</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  credentials</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> {</span></span>
<span class="line"><span style="color: #F8F8F2">    accessKeyId</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> S3_AWS_ACCESS_KEY_ID,</span></span>
<span class="line"><span style="color: #F8F8F2">    secretAccessKey</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> S3_AWS_SECRET_KEY,</span></span>
<span class="line"><span style="color: #F8F8F2">  },</span></span>
<span class="line"><span style="color: #F8F8F2">});</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> params </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> {</span></span>
<span class="line"><span style="color: #F8F8F2">  Bucket</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> S3_AWS_BUCKET_NAME,</span></span>
<span class="line"><span style="color: #F8F8F2">  Key</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">example.jpg</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  Expires</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #BD93F9">3600</span><span style="color: #F8F8F2">, </span><span style="color: #6272A4">// The URL will expire in 3600 seconds.</span></span>
<span class="line"><span style="color: #F8F8F2">};</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> command </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6; font-weight: bold">new</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">GetObjectCommand</span><span style="color: #F8F8F2">(params);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #FF79C6">try</span><span style="color: #F8F8F2"> {</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">const</span><span style="color: #F8F8F2"> url </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">await</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">getSignedUrl</span><span style="color: #F8F8F2">(client, command);</span></span>
<span class="line"><span style="color: #F8F8F2">  console.</span><span style="color: #50FA7B">log</span><span style="color: #F8F8F2">(url);</span></span>
<span class="line"><span style="color: #F8F8F2">} </span><span style="color: #FF79C6">catch</span><span style="color: #F8F8F2"> (error) {</span></span>
<span class="line"><span style="color: #F8F8F2">  console.</span><span style="color: #50FA7B">error</span><span style="color: #F8F8F2">(error);</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p class="wp-block-paragraph">Get presigned URL:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" 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;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="&gt; node getSignedUrl.js

http://127.0.0.1:4566/bucket-demo/example.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;X-Amz-Credential=dummy%2F20231008%2Fus-east-1%2Fs3%2Faws4_request&amp;X-Amz-Date=20231008T100241Z&amp;X-Amz-Expires=900&amp;X-Amz-Signature=73d10095729f1d47feee9926aa0c0d31d086c979206f93b475265bee2dc4cd4f&amp;X-Amz-SignedHeaders=host&amp;x-id=GetObject" style="color:#F8F8F2;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" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">&gt;</span><span style="color: #F8F8F2"> node getSignedUrl.js</span></span>
<span class="line"></span>
<span class="line"><span style="color: #50FA7B">http://127.0.0.1:4566/bucket-demo/example.jpg?X-Amz-Algorithm</span><span style="color: #F8F8F2">=AWS4-HMAC-SHA256&amp;</span><span style="color: #BD93F9">X-Amz-Content-Sha256</span><span style="color: #FF79C6">=</span><span style="color: #F1FA8C">UNSIGNED-PAYLOAD</span><span style="color: #F8F8F2">&amp;</span><span style="color: #BD93F9">X-Amz-Credential</span><span style="color: #FF79C6">=</span><span style="color: #F1FA8C">dummy%2F20231008%2Fus-east-1%2Fs3%2Faws4_request</span><span style="color: #F8F8F2">&amp;</span><span style="color: #BD93F9">X-Amz-Date</span><span style="color: #FF79C6">=</span><span style="color: #BD93F9">20231008</span><span style="color: #F1FA8C">T100241Z</span><span style="color: #F8F8F2">&amp;</span><span style="color: #BD93F9">X-Amz-Expires</span><span style="color: #FF79C6">=</span><span style="color: #BD93F9">900</span><span style="color: #F8F8F2">&amp;</span><span style="color: #BD93F9">X-Amz-Signature</span><span style="color: #FF79C6">=</span><span style="color: #BD93F9">73</span><span style="color: #F1FA8C">d10095729f1d47feee9926aa0c0d31d086c979206f93b475265bee2dc4cd4f</span><span style="color: #F8F8F2">&amp;</span><span style="color: #BD93F9">X-Amz-SignedHeaders</span><span style="color: #FF79C6">=</span><span style="color: #F1FA8C">host</span><span style="color: #F8F8F2">&amp;</span><span style="color: #BD93F9">x-id</span><span style="color: #FF79C6">=</span><span style="color: #F1FA8C">GetObject</span></span></code></pre></div>



<p class="wp-block-paragraph">Đơn giản thực sự đúng không anh em ! Nếu các đồng chí có bất kỳ thắc mắc hay chạy các đoạn script trên có bất cứ bug nào hãy comment cho mình được biết nha ! Cảm ơn các đồng dâm ! Thân ái và hẹn gặp lại !</p>
<p>The post <a href="https://blog.tomosia.com.vn/su-dung-localstack-de-gia-lap-upload-file-s3/">Sử dụng localstack để giả lập upload file s3</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/su-dung-localstack-de-gia-lap-upload-file-s3/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
	</channel>
</rss>
