<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Work on 水源一二三</title><link>https://theweidi.net/categories/work/</link><description>Recent content in Work on 水源一二三</description><generator>Hugo</generator><language>zh-TW</language><lastBuildDate>Wed, 05 Jan 2022 06:17:34 +0000</lastBuildDate><atom:link href="https://theweidi.net/categories/work/index.xml" rel="self" type="application/rss+xml"/><item><title>Exactly-Once Delivery，這個需求做不了</title><link>https://theweidi.net/you-cannot-have-exactly-once-delivery/</link><pubDate>Wed, 05 Jan 2022 06:11:40 +0000</pubDate><guid>https://theweidi.net/you-cannot-have-exactly-once-delivery/</guid><description>&lt;p&gt;&lt;a href="https://bravenewgeek.com/you-cannot-have-exactly-once-delivery/"&gt;https://bravenewgeek.com/you-cannot-have-exactly-once-delivery/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="小小摘要"&gt;小小摘要&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Distributed systems 就是 trade-offs 的權衡。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;（傳統）理論上不可能實作出 exactly-once delivery，任何跟你說做得出來的都是&lt;em&gt;唬爛&lt;/em&gt;你或是不了解什麼是 distributed systems。實務上可以透過 idempotent （同樣的訊息處理兩次不影響）或是 deduplication 來實現同樣效果。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;於是我們只能從 at-most-once 跟 at-least-once 中做選擇，而大家可能都選了 at-least-once。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="延伸閱讀"&gt;延伸閱讀&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://queue.acm.org/detail.cfm?id=2745385"&gt;There is no now&lt;/a&gt;in a distributed system.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.ibm.com/cloud/learn/cap-theorem"&gt;CAP Theorem&lt;/a&gt; = consistency, availability, and partition tolerance.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Amazon SQS FIFO queue 有支援 &lt;a href="https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-exactly-once-processing.html"&gt;exactly-once processing&lt;/a&gt;，但實際上也是透過 deduplication 跟 acknowledgement 機制來&lt;em&gt;實現&lt;/em&gt; (fake it)，如&lt;a href="https://ably.com/blog/sqs-fifo-queues-message-ordering-and-exactly-once-processing-guaranteed"&gt;這篇&lt;/a&gt;文章所說明。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>2021 DevOps Roadmap</title><link>https://theweidi.net/2021-devops-roadmap/</link><pubDate>Wed, 24 Nov 2021 08:41:24 +0000</pubDate><guid>https://theweidi.net/2021-devops-roadmap/</guid><description>&lt;p&gt;今天才知道這個火紅的 repository [1] 跟與體感很接近的 devops roadmap lol&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://theweidi.net/uploads/2021/11/devops-1-549x1024.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;[1] &lt;a href="https://github.com/kamranahmedse/developer-roadmap/"&gt;https://github.com/kamranahmedse/developer-roadmap/&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>「最佳化」AWS 帳單</title><link>https://theweidi.net/optimizing-aws-billing/</link><pubDate>Sun, 24 Oct 2021 07:19:32 +0000</pubDate><guid>https://theweidi.net/optimizing-aws-billing/</guid><description>&lt;p&gt;第一次認真看完 Corey Quinn 的信，在講 &lt;a href="https://www.lastweekinaws.com/blog/the-turbotax-of-aws-billing/"&gt;The TurboTax of AWS Billing&lt;/a&gt;，除了一如既往生動的舉例跟嘲諷以外，他提到為什麼他的諮詢費用是「固定費用」而不是取決於「幫客戶省下多少錢」。&lt;/p&gt;
&lt;p&gt;簡單來說，不是帳單變少就是好，我的價值是幫你做出最好的調整。如果要高可用當然費用就會增加，但不是每個場景都會需要這種架構（例如水源一二三不需要多區域部署來增加 availability，但定期的 S3 備份可以提高 durability）。如果今天我收費模式是「抽佣省下來的金額」，我的目標會被導向找出可以省錢的點，而非「如果我是你我會這樣架構」。很好理解卻也很容易踩入的誤區。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Side note: &lt;a href="https://wa.aws.amazon.com/wellarchitected/2020-07-02T19-33-23/wat.concepts.wa-concepts.en.html"&gt;Concepts&lt;/a&gt; of AWS Well-Architected Framework&lt;/p&gt;</description></item><item><title>Nginx 新增 keepalive_time 參數</title><link>https://theweidi.net/nginx-adding-keepalive_time/</link><pubDate>Fri, 22 Oct 2021 06:49:44 +0000</pubDate><guid>https://theweidi.net/nginx-adding-keepalive_time/</guid><description>&lt;p&gt;Nginx 在 1.19.10 以後開始支援設定 &lt;code&gt;keepalive_time&lt;/code&gt;，初始值如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-txt" data-lang="txt"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;// https://nginx.org/en/docs/http/ngx_http_core_module.html
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Default: keepalive_requests 1000;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Default: keepalive_time 1h;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Default: keepalive_timeout 75s;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;// https://nginx.org/en/docs/http/ngx_http_upstream_module.html
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Default: keepalive_requests 1000;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Default: keepalive_time 1h;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Default: keepalive_timeout 60s;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;keepalive_time&lt;/code&gt; 限制了 total connection lifetime，如這個 &lt;a href="https://github.com/nginx/nginx/commit/d9996d6f27150bfb9c9c00d77fac940712aa1d28"&gt;commit&lt;/a&gt; 所說明。&lt;/p&gt;
&lt;p&gt;在原先的設定裡面，其實 keepalive connection 也不是無限久，理論上最多就是 &lt;code&gt;keepalive_requests * keepalive_timeout&lt;/code&gt; 的時間。 &lt;del&gt;是說 75000s 將近 21h 但 &lt;code&gt;keepalive_time&lt;/code&gt; default 卻是 1h 會不會有點太短。&lt;/del&gt;&lt;/p&gt;</description></item><item><title>S3 減一等於 R2</title><link>https://theweidi.net/s3-minus-one-equals-r2/</link><pubDate>Mon, 04 Oct 2021 06:50:08 +0000</pubDate><guid>https://theweidi.net/s3-minus-one-equals-r2/</guid><description>&lt;p&gt;上週一直被 Cloudflare 推出的 R2 給洗版，例如官方介紹的這篇&lt;a href="https://blog.cloudflare.com/introducing-r2-object-storage/"&gt;文章&lt;/a&gt;，完全就是來打 AWS S3。我覺得用 &lt;em&gt;minus the egress fees&lt;/em&gt; 的概念然後取名 R2 (S3 minus one) 很硬要但有趣。&lt;/p&gt;
&lt;p&gt;亮點：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$0.015 per GB vs. S3 ~$0.025 vs. S3 Glacier ~$0.005&lt;/li&gt;
&lt;li&gt;完全相容 S3 API&lt;/li&gt;
&lt;li&gt;可用性跟 S3 一樣 99.999999999% (11 9&amp;rsquo;s)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;egress 免費&lt;/strong&gt;，S3 ~$0.1 per GB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;等到 R2 真的上線，感覺有機會大殺四方，說明 &lt;em&gt;&lt;strong&gt;Your margin is my opportunity&lt;/strong&gt;&lt;/em&gt;。&lt;/p&gt;</description></item><item><title>有效避免 GFW 的 DNS poisoning</title><link>https://theweidi.net/avoiding-gfw-dns-poisoning/</link><pubDate>Fri, 20 Aug 2021 07:41:14 +0000</pubDate><guid>https://theweidi.net/avoiding-gfw-dns-poisoning/</guid><description>&lt;p&gt;在這篇 &lt;a href="https://twitter.com/NP_tokumei/status/1401716316394844161"&gt;Tweet&lt;/a&gt; 看到有趣的 Paper &lt;a href="https://arxiv.org/abs/2106.02167"&gt;How Great is the Great Firewall? Measuring China&amp;rsquo;s DNS Censorship&lt;/a&gt;，透過在美國及中國的實驗找出 censored domains，進而實作出可以有效避免 GFW DNS poisoning 的方式。&lt;/p&gt;
&lt;h2 id="gfw-如何運作"&gt;GFW 如何運作？&lt;/h2&gt;
&lt;p&gt;GFW 是 on-path injector，並且不會丟棄或修改由 resolver 或是 authoritative name server 的回覆。因此只有在路徑上會經過 GFW 時才會觀察到此行為，例如日本客戶端透過中國 resolver 查詢 &lt;code&gt;www.google.com&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;GFW 會偽造不合理的 IPv4/IPv6 地址，並且因為 GFW 離客戶端更近，客戶端通常會更快地收到來自 GFW 的回覆並採用。舉例來說：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 中國聯通的 DNS resolver
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 解析 Google 網站回傳的 IP 地址卻指向 Microsoft 的網站
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;$&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;dig&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;www&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;google&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;com&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;@&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;202.102&lt;/span&gt;.&lt;span style="color:#ae81ff"&gt;224.68&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;short&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;173.244&lt;/span&gt;.&lt;span style="color:#ae81ff"&gt;217.42&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Paper 裡面定義了 GFW &lt;em&gt;overblocking&lt;/em&gt; 的行為，例如 &lt;code&gt;torproject.org&lt;/code&gt; 是 censored domain，但 &lt;code&gt;mentorproject.org&lt;/code&gt; 卻也一併被污染。&lt;/p&gt;</description></item><item><title>佈景主題 Twenty Sixteen 修改小記</title><link>https://theweidi.net/wordpress-theme-twenty-sixteen-modification/</link><pubDate>Tue, 25 May 2021 23:07:44 +0000</pubDate><guid>https://theweidi.net/wordpress-theme-twenty-sixteen-modification/</guid><description>&lt;p&gt;WordPress 佈景主題 &lt;a href="https://wordpress.org/support/article/twenty-sixteen/"&gt;Twenty Sixteen&lt;/a&gt; 在呈現首頁的時候會顯示各文章的所有內容，若文章有摘要則會同時呈現。覺得這樣版面有點太亂，但這個佈景主題也沒有提供修改的地方，只能直接改檔案。&lt;/p&gt;
&lt;h3 id="原始程式碼"&gt;原始程式碼&lt;/h3&gt;
&lt;p&gt;透過 &lt;code&gt;Appearance &amp;gt; Theme Editor&lt;/code&gt; 找到 &lt;code&gt;content.php&lt;/code&gt; 會看到以下這段：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;twentysixteen_excerpt&lt;/span&gt;(); &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;lt;?php twentysixteen_post_thumbnail(); ?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt; &amp;lt;div class=&amp;#34;entry-content&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt; &amp;lt;?php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt; the_content(
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt; sprintf(
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt; __( &amp;#39;Read more...&amp;#39;, &amp;#39;twentysixteen&amp;#39; ),
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt; get_the_title()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt; );
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這邊的 &lt;a href="https://developer.wordpress.org/reference/functions/the_content/"&gt;&lt;code&gt;the_content()&lt;/code&gt;&lt;/a&gt; 會把所有的文章內容顯示出來，或是搭配 `&lt;/p&gt;</description></item><item><title>Elon Musk @ Clubhouse</title><link>https://theweidi.net/elon-musk-clubhouse/</link><pubDate>Mon, 01 Feb 2021 23:31:39 +0000</pubDate><guid>https://theweidi.net/elon-musk-clubhouse/</guid><description>&lt;p&gt;昨天剛加入 Clubhouse，今早 2/1 就看到一堆人在說 Elon Musk 台灣時間 2 PM 要在 Clubhouse 說話，就跟著一窩蜂等著加入，心裡想得是 Clubhouse 有沒有可能同時 live audio streaming 1M 的人。2:04 PM 打開 App 就發現每個房間上限是 5000 lol&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://theweidi.net/uploads/2021/02/photo_2021-02-01-23.36.24-575x1024.jpeg"&gt;&lt;/p&gt;
&lt;p&gt;後來切到 &lt;a href="https://www.youtube.com/watch?v=K8qP_8nXpuo"&gt;YouTube&lt;/a&gt; 其他人 stream 出來的當背景音樂聽，斷斷續續聽到的一些點：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;我們打算五年半後上火星。&lt;/li&gt;
&lt;li&gt;目前沒有有外星人的證據，但 &amp;ldquo;quite possible&amp;rdquo; 有外星人。&lt;/li&gt;
&lt;li&gt;&amp;ldquo;He who controls the memes controls the universe.&amp;quot;，說 memes 是 10,000 not 1,000 words，有的非常 insightful。&lt;/li&gt;
&lt;li&gt;關於他五歲小孩的教養方式？說他小孩的教育大部分都是透過 YouTube 或是線上教育，他提到要讓教育變得跟像玩遊戲一樣 &amp;ldquo;engaging&amp;rdquo;，提到要 &amp;ldquo;explain the why&amp;rdquo;，因為我們傾向於忘記不相關的東西，此時如何讓學習變得 &amp;ldquo;relevant&amp;rdquo; 就顯得重要。舉例來說，拆解工程車的過程我們學到每個 module 是如何被連接，這會比直接上一堂課教我們怎麼組裝工程車來得容易記憶。&lt;/li&gt;
&lt;li&gt;談 Neuralink 的時候說現在的人本來就有點像是 &amp;ldquo;人造人 (cyborg-like)&amp;quot;，例如我們從來離不開手機。Neuralink 的一個長期目標是讓人可以直接用思考來溝通 (沒聽錯的話)。舉例來說我們用手機打字的 bitrate 很慢，手機感覺像是在跟樹說話，如果我們可以透過 direct neural interface 來大幅提高溝通速度，我們就可以更高速地來 &amp;ldquo;processing&amp;rdquo;。&lt;/li&gt;
&lt;li&gt;支持 Bitcoin，認為即將迎來 &amp;ldquo;broader acceptance&amp;rdquo;；對於其他的各種 currencies 則沒有強烈意見。&lt;/li&gt;
&lt;li&gt;Tesla 的目標是兩千萬台車一年 [1]，原因是只要取代屆時所有車子 (2 billion) 的 1%，就足以推動公司 &amp;ldquo;加速推廣永續能源&amp;rdquo; 的長遠目標。Tesla 希望能快速提高產能，但目前主要的貧頸在於 battery cell 不夠快。&lt;/li&gt;
&lt;li&gt;推薦了 Cobra Kai 眼鏡蛇道館 XD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;覺得新奇有趣的一天。&lt;/p&gt;</description></item><item><title>[2021] 遷移 WordPress 小記</title><link>https://theweidi.net/2021-wordpress-migration/</link><pubDate>Mon, 04 Jan 2021 13:34:15 +0000</pubDate><guid>https://theweidi.net/2021-wordpress-migration/</guid><description>&lt;p&gt;（2021/02：更新 Spot instance 還有安裝過程。）&lt;br&gt;
（2021/03：更新憑證更新的注意事項。）&lt;/p&gt;
&lt;p&gt;先前用的是 &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt; 來生成靜態頁面，但覺得編輯上還是有點麻煩，心血來潮遷移到 WordPress。大概紀錄一下流程，在這之前完全沒有安裝 / 使用 WordPress 的經驗。&lt;/p&gt;
&lt;h2 id="主機選擇"&gt;主機選擇&lt;/h2&gt;
&lt;p&gt;比較熟 AWS 所以就直接開了 EC2。&lt;code&gt;t3a.micro&lt;/code&gt; 搭配三年的 Reserved instance 大概每小時 $0.005 美金、一個月大概 $3.6 美金。&lt;/p&gt;
&lt;p&gt;對照組用了 Spot instance (persistent request) 開了 &lt;code&gt;t3.micro&lt;/code&gt;，從&lt;a href="https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-ec2-spot-instances-stopped-started-similar-to-on-demand-instances/"&gt;去年&lt;/a&gt;開始已經可以支援 stop/start，感覺費用應該跟 Reserved instance 差不多但有更多彈性。&lt;/p&gt;
&lt;p&gt;[2021/08] Spot instance &lt;code&gt;t3.micro&lt;/code&gt; 每 24 小時 $0.1 美金、一個月大概才 $3 美金，跑了半年都沒有被中斷，比 &lt;code&gt;t3a.micro&lt;/code&gt; reserved instance 還好用。&lt;/p&gt;
&lt;h2 id="安裝過程"&gt;安裝過程&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;看&lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html"&gt;這篇&lt;/a&gt;在 Amazon Linux 2 上把 LAMP 裝起來。&lt;/li&gt;
&lt;li&gt;看&lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hosting-wordpress.html"&gt;這篇&lt;/a&gt;裝最新的 WordPress，我依照步驟設定起來是 5.6。裝完後可以用 HTTP 來存取 WordPress 了。&lt;/li&gt;
&lt;li&gt;綁定 EIP。&lt;/li&gt;
&lt;li&gt;CloudFront 由於先前已經有設定，只是增加新的 Origin — 用 HTTP only 的方式指到 EC2，但發現會有 mixed content block 的問題 (https:// 連上 CloudFront 但頁面的物件用 http:// 去請求會被阻擋)。&lt;/li&gt;
&lt;li&gt;為了解決此問題需要回源使用 HTTPS，於是參考&lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-amazon-linux-2.html"&gt;這篇&lt;/a&gt;搭配 certbot 開啟了 TLS。這邊記得憑證的 &lt;code&gt;subjectAlternativeName&lt;/code&gt; 要包含回源所使用的域名，這樣 CloudFront 回源不帶 Host 的時候才不會有問題。&lt;/li&gt;
&lt;li&gt;CloudFront 改為使用 HTTPS 回源。確定已經可以用 https:// 瀏覽及管理 WordPress。&lt;/li&gt;
&lt;li&gt;在官網找一個自己喜歡的 &lt;a href="https://www.wordpress.org/themes/"&gt;Theme&lt;/a&gt; 裝起來，搭配 &lt;strong&gt;Additional CSS&lt;/strong&gt; 去微調一下版面，就可以開始使用了。&lt;/li&gt;
&lt;li&gt;參考&lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UsingAlarmActions.html#AddingRecoverActions"&gt;這篇&lt;/a&gt;把 EC2 Auto Recovery 設定起來，避免 EC2 突然壞掉。&lt;/li&gt;
&lt;li&gt;參考&lt;a href="https://aws.amazon.com/blogs/security/automatically-update-security-groups-for-amazon-cloudfront-ip-ranges-using-aws-lambda/"&gt;這篇&lt;/a&gt;在 EC2 上只放行 CloudFront 流量。&lt;/li&gt;
&lt;li&gt;搭配 &lt;a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshot-lifecycle.html#dlm-permissions"&gt;EBS Lifecycle Policy&lt;/a&gt; 設定自動備份。&lt;/li&gt;
&lt;li&gt;把 Google Analytics 放到 Theme Header (header.php) 裡面。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="其他小記"&gt;其他小記&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;目前還不知道 WordPress 的架構，也沒裝什麼 plugins。先依據&lt;a href="https://aws.amazon.com/blogs/networking-and-content-delivery/how-to-accelerate-your-wordpress-site-with-amazon-cloudfront/"&gt;這篇&lt;/a&gt;文章的建議設定了 CloudFront cache behavior，之後有時間可能會想要把 static content 放在 S3 上。&lt;/li&gt;
&lt;li&gt;certbot 憑證更新需要放行 port 80，不然憑證會更新失敗。要再找時間看能不能走其他驗證方式，例如透過 DNS 或是 port 443。&lt;/li&gt;
&lt;li&gt;怕太單調想要找圖可以去&lt;a href="https://www.artic.edu/collection"&gt;芝加哥藝術博物館&lt;/a&gt;找無限制使用用途的圖，也就是有標示 Public Domain (CC0) 的畫作 [1]。例如本 blog 用的就是 &lt;a href="https://www.artic.edu/artworks/10932/snow-at-akabane-bridge-in-shiba-shiba-akabane-no-yuki-from-the-series-famous-places-in-the-eastern-capital-toto-meisho"&gt;Snow at Akabane Bridge in Shiba&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;寫在 Notion 上的筆記竟然可以無痛直接貼到 WordPress 編輯器真是不錯。&lt;/li&gt;
&lt;li&gt;如何增加 WordPress 的安全性？&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;[1] &lt;a href="https://www.artic.edu/open-access/open-access-images"&gt;https://www.artic.edu/open-access/open-access-images&lt;/a&gt;&lt;/p&gt;</description></item><item><title>期待 CloudFront 能實現的功能</title><link>https://theweidi.net/cloudfront-feature-wishlist/</link><pubDate>Mon, 04 Jan 2021 09:42:49 +0000</pubDate><guid>https://theweidi.net/cloudfront-feature-wishlist/</guid><description>&lt;p&gt;前陣子看到這個 &lt;a href="https://twitter.com/cloudfront/status/1328919044246814721"&gt;tweet&lt;/a&gt; 問大家希望能在 CloudFront 實現的功能，覺得不錯的有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Managed security group (讓 AWS origin 可以直接掛載來放行 CloudFront IP，不用用&lt;a href="https://aws.amazon.com/blogs/security/automatically-update-security-groups-for-amazon-cloudfront-ip-ranges-using-aws-lambda/"&gt;很麻煩的&lt;/a&gt; Lambda 去定期更新)&lt;/li&gt;
&lt;li&gt;WAF at behavior level (像是 static content 就不需要 WAF)&lt;/li&gt;
&lt;li&gt;Built-in redirection rules (像是 &lt;a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#redirect-actions"&gt;ALB&lt;/a&gt; 那樣)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stale-while-revalidate&lt;/code&gt; header support (&lt;a href="https://web.dev/stale-while-revalidate/"&gt;這篇文章&lt;/a&gt;解釋得很清楚)&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>關於購買/註冊域名</title><link>https://theweidi.net/domain_registration/</link><pubDate>Sun, 22 Sep 2019 10:10:00 +0000</pubDate><guid>https://theweidi.net/domain_registration/</guid><description>&lt;blockquote&gt;
&lt;p&gt;TL;DR 找到想要的網址後，記得多在幾間域名註冊商比較後再買。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;首先要先看想要哪一種域名，例如很流行的 &lt;code&gt;.cc&lt;/code&gt;、在地愛台灣的 &lt;code&gt;.tw&lt;/code&gt; [1] 或是萬用型的 &lt;code&gt;.com&lt;/code&gt;, &lt;code&gt;.net&lt;/code&gt; 等等。&lt;/p&gt;
&lt;p&gt;接著就找一間域名註冊商 registrar 來找找看想要的網址是否還可以申請，這時候就可以多看幾間，我自己曾買過網域的有 &lt;a href="https://www.godaddy.com/"&gt;GoDaddy&lt;/a&gt;、&lt;a href="https://www.gandi.net/"&gt;Gandi.net&lt;/a&gt;、&lt;a href="https://www.namecheap.com/"&gt;namecheap&lt;/a&gt; 以及 &lt;a href="https://docs.aws.amazon.com/zh_tw/Route53/latest/DeveloperGuide/domain-register.html"&gt;Amazon Route 53&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;我最近一次要註冊 &lt;code&gt;.com&lt;/code&gt; 及 &lt;code&gt;.net&lt;/code&gt; 域名時才發現價格的差異還滿大的。舉例來說 &lt;code&gt;.net&lt;/code&gt; 在 GoDaddy 第一年特價都要美金 $14.88，原價則要美金 $21.88，而從沒促銷策略的 Amazon Route 53 &lt;code&gt;.net&lt;/code&gt; 的原價就是美金 $11。&lt;/p&gt;
&lt;p&gt;因為我通常只有想要域名不需要其他附加功能，因此決定性的因素只有價格，所以就把網址在各大註冊商搜尋過一遍然後在那邊買即可。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;[1] 曾在 2018 年夏天推出「泛用型網域名稱銅板價專案」，第一年只要新台幣 $50。&lt;/p&gt;</description></item><item><title>AWS Certified Advanced Networking Specialty: Exam Notes 2019</title><link>https://theweidi.net/aws-certified-advanced-networking-specialty-exam-notes-2019/</link><pubDate>Sat, 21 Sep 2019 10:01:00 +0000</pubDate><guid>https://theweidi.net/aws-certified-advanced-networking-specialty-exam-notes-2019/</guid><description>&lt;blockquote&gt;
&lt;p&gt;TL;DR 整理給自己進考場前看過一遍的筆記。啊有順利考過了，按下 Submit 鍵就馬上知道結果真的很刺激。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="reference-materials"&gt;Reference materials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://linuxacademy.com/course/aws-advanced-networking-specialty/"&gt;Linux Academy - AWS Advanced Networking Specialty&lt;/a&gt; 的課程完整，最後還有一個模擬考。&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.whizlabs.com/aws-advanced-networking-speciality/"&gt;Whizlabs - AWS Certified Advanced Networking - Specialty&lt;/a&gt; 這個共有三份模擬考。如果有買記得找一下 coupon，滿常特價的。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="domains"&gt;Domains&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Design and implement hybrid IT network architectures at scale&lt;/li&gt;
&lt;li&gt;Design and implement AWS networks&lt;/li&gt;
&lt;li&gt;Automate AWS tasks&lt;/li&gt;
&lt;li&gt;Configure network integration with application services&lt;/li&gt;
&lt;li&gt;Design and implement for security and compliance&lt;/li&gt;
&lt;li&gt;Manage, optimize, and troubleshoot the network&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="general-best-practices"&gt;General Best Practices&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Highly available, fault-tolerant network connections are key to a well-architected system.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="articles-and-white-papers"&gt;Articles and White Papers&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/answers/networking/aws-multiple-data-center-ha-network-connectivity/"&gt;Multiple Data Center HA Network Connectivity&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Leverage multiple dynamically routed, rather than statically routed, connections to AWS.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This will allow remote connections to fail over automatically between redundant connections.&lt;/p&gt;</description></item></channel></rss>