用途 |安全|更改日誌 |附錄
(alpha)一種幫助使用 Amazon Web Services (AWS) 建立靜態網站的工具。
理由:靜態網站很有趣。部署到 S3 是一件純粹的快樂。 CloudFront 讓擴充成為您不再考慮的事情。無需管理伺服器;沒有眼淚可以哭。然而,設定這一切並不那麼簡單。 Confetti 嘗試使用 CloudFormation 將最佳實踐編碼到可重複的程式中,並為基本和進階部署場景提供方便的工具。
[confetti/confetti " 0.2.1 " ] ; ; latest release
建立網站 |同步您的網站 |最後一步:DNS |新增子網域
五彩紙屑被打包為啟動任務。這主要是因為 boot 讓在 Clojure 中編寫命令列應用程式變得容易,而無需擔心引導或依賴解析。
Confetti 提供了兩個命令,在引導術語中稱為「任務」 。 create-site
任務將建立一個包含靜態網站所有資源的 CloudFormation 堆疊,並將所有重要資訊儲存到目前目錄中的 EDN 檔案中。
讓我們看一下創建網站並首次同步它的範例。
對存取鍵感到困惑嗎?查看本自述文件的安全部分。
假設您想要在my-app.com
部署一個網站。若要建立 S3 儲存桶、CloudFront 分配和受限存取金鑰,您可以執行以下命令:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY
注意:
-d confetti
位確保 Boot 將下載五彩紙屑,以便create-site
任務可用。
例外!因為您想使用裸域/APEX 網域,所以必須使用 Route53 作為 DNS。 (您可以在附錄中找到更多相關資訊。)啟用 DNS 後重試:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY --dns
這應該會啟動該過程。第一個回饋應該會出現在您的螢幕上。在某些時候,不會列印任何新事件,但進程也尚未返回。您現在等待的是建立 CloudFront 分配。這通常需要 10-15 分鐘。
此時您可以終止該進程。一切都在遠端運行,不會中斷。
.confetti.edn
檔案保存在您目前的工作目錄中,如果使用具有足夠憑證的fetch-outputs
任務,您可以隨時下載所有有用的信息。 (該任務會告訴您堆疊是否還沒準備好。)
create-site
任務完成後,您應該在目前工作目錄中找到一個檔案: my-app-com.confetti.edn
。它的內容應包含有關新配置的資源的所有重要內容:
{ :stack-id " arn:aws:cloudformation:us-east-1:297681564547:stack/my-app-com/xxx " ,
:bucket-name " my-app-com-sitebucket-3fu0w0729ndk " ,
:cloudfront-id " E3760XUWU2V9R7 " ,
:cloudfront-url " d3up0oy7r2svli.cloudfront.net " ,
:access-key " AAA " ,
:secret-key " BBB " ,
:website-url " http://my-app.com " ,
:hosted-zone-id " Z3KJWNUJTT8GHO " }
現在一切準備就緒,可以進行第一次部署了!
現在sync-bucket
任務開始發揮作用。雖然該任務提供了許多不同的方法來指定要上傳的內容,但我們在這裡僅展示最簡單的方法:同步本地目錄。為了我們的演示目的,讓我們快速建立一個目錄:
mkdir my-app-site
echo "Hello World" > my-app-site/index.html
echo "About Us" > my-app-site/about.html
現在讓我們同步它。從.confetti.edn檔案中取得bucket-name
、 access-key
和secret-key
值:
boot -d confetti sync-bucket --bucket "my-app-com-sitebucket-3fu0w0729ndk"
--access-key AAA --secret-key BBB --dir my-app-site
;; or alternatively
boot -d confetti sync-bucket --confetti-edn your-site.confetti.edn --dir my-app-site
這會將index.html
和about.html
上傳到您的儲存桶。要驗證一切是否成功,您可以導航到 edn 檔案中儲存為cloudfront-url
URL。
還有很多方法可以指定要上傳的文件(如果需要,可以使用自訂元資料),本指南未涵蓋這些方法。有關詳細信息,請參閱
boot sync-bucket --help
。
現在唯一缺少的步驟是正確設定 DNS。這裡需要執行的操作取決於您是否啟用了--dns
選項。在上面的範例中,我們啟用了它,所以讓我們先介紹一下這種情況:
使用 Route53 的 DNS:因為您有根/裸/頂點網域設置,所以您決定使用 AWS 託管的 DNS。現在您需要將您使用的網域的名稱伺服器設定為 AWS 的名稱伺服器。這些對於不同的託管區域是不同的,因此您需要在 AWS 控制台中尋找它們。
不使用 Route53:不使用 Route53 時,您唯一需要做的就是將 CNAME 條目新增至指向 Cloudfront 發行版的網域的 Zonefile 中。
這兩個步驟因網域註冊商而異,因此建議檢查其各自的文件。
想要 SSL 嗎?以下是啟用它的方法。
假設您使用 Confetti 建立了一個網站weloveparens.com
,現在想要將一個靜態網站新增到該網域的子網域中。你可以運行:
boot create-site --domain "shop.weloveparens.com" --dns --access-key FOO --secret-key BAR
這將在 HostedZone 中建立一個 Route53 記錄集,該記錄集是先前在設定weloveparens.com
時為您建立的。 S3 儲存桶、CloudFront 分配等將照常建立。此外,與往常一樣,所有內容(包括 RecordSet)都會建立為 CloudFormation 堆疊,因此如果您不再需要它,您可以刪除該堆疊,而weloveparens.com
不受影響。
要獲取命令列幫助,您可以隨時運行:
boot create-site --help
boot fetch-outputs --help
boot sync-bucket --help
也可以隨意打開問題來提出問題或提出改進建議。
將您的 AWS 金鑰交給某個程式並讓它運行有點令人恐懼,因此本節旨在對此提供一些安慰。
create-site
任務將根據confetti-clj/cloudformation 中定義的範本建立CloudFormation 堆疊。--dry-run
參數。create-site
憑證必須有權建立 CloudFormation 範本中所列的各個資源。 (將來 Confetti 可能會提供 AWS IAM 策略片段,以便您可以建立擁有 Confetti 所需的所有權限的使用者。)從版本0.2.0
開始, create-site
指令將建立一個以.confetti.edn
結尾的文件,其中包含維護網站所需的所有資訊。該文件中的資訊包含秘密!
更新:我得出的結論是創建此文件是一個壞主意。人們不可避免地會提交它並公開其 S3 儲存桶的密鑰。將來我想以 direnv 可以理解的格式列印一些內容,並推薦使用 env vars / direnv 代替。
[confetti/cloudformation "0.1.6"]
,帶來以下改進:confetti/s3-deploy
以提高 Windows 相容性HostedZone 重複使用:為每個網站建立新的 HostedZone 有兩個缺點:
透過為您的根網域example.com
使用一個 HostedZone,這些問題就得到了解決,並且在demo.example.com
添加新網站只需添加一個 RecordSet 即可。 Confetti 現在嘗試尋找現有的 HostedZone,並且僅在找到時添加 RecordSet。
sync-bucket
任務的新invalidation-paths
選項。先前失效路徑是根據您上傳的檔案決定的。現在您可以提供自訂集。 (#21 + #29)
使用透過.confetti.edn
檔案提供選項的新方法修復錯誤
confetti-edn
選項時,我們現在接受兩個版本(以.confetti.edn
結尾以及之前的部分)。以前預計您只提供.confetti.edn
後綴之前的部分confetti-edn
選項和fetch-outputs
任務create-site
呼叫的單獨任務fetch-outputs
任務[confetti/cloudformation "0.1.3"]
以在堆疊輸出中包含:website-url
,無論是否使用 Route53fetch-outputs
中列印 Cloudfront URL fetch-outputs
任務,可用於下載 Cloudformation 堆疊的輸出。以前,報告經常卡住並且無法正確保存堆疊輸出。為了避免這種情況,您現在可以取消報表並在以後的任何時間點呼叫fetch-outputs
以下載輸出。sync-bucket
任務現在提供一個confetti-edn
選項,可用來提供{some-id}.confetti.edn
的 some-id 部分。該文件中的資訊將用於代替常規任務選項。如果有任何內容未按預期工作,請提出問題。 ?
注意如果您在從 Cloudfront 指派請求資產時最終收到 504 錯誤,請仔細檢查您是否確實使用網站端點作為來源。由於使用網站端點,來源協定策略必須是「僅 HTTP」。
Cloudfront 支援 APEX 網域,但前提是您使用 Route53 的ALIAS
記錄。更多資訊可以在官方公告中找到。
此限制使得自動根 (APEX) 網域設定變得更加困難,因此目前不支援在不使用 Route53 管理 DNS 的情況下為根網域建立網站。