penggunaan | keamanan | ubah log | lampiran
(alpha) Alat untuk membantu pembuatan situs statis dengan Amazon Web Services (AWS).
Dasar Pemikiran : Situs statis itu menyenangkan. Menyebar ke S3 adalah kebahagiaan murni. CloudFront menjadikan penskalaan sesuatu yang tidak Anda pikirkan lagi. Tidak ada server untuk diadministrasikan; tidak ada air mata untuk menangis. Namun menyiapkan semuanya tidak semudah itu. Confetti adalah upaya untuk menyandikan praktik terbaik ke dalam program berulang menggunakan CloudFormation dan menyediakan alat praktis untuk skenario penerapan dasar dan lanjutan.
[confetti/confetti " 0.2.1 " ] ; ; latest release membuat situs | menyinkronkan situs Anda | langkah terakhir: dns | menambahkan subdomain
Confetti dikemas sebagai tugas boot. Hal ini terutama karena boot memudahkan penulisan aplikasi baris perintah di Clojure tanpa perlu khawatir tentang bootstrap atau resolusi ketergantungan.
Confetti menyediakan dua perintah, dalam istilah Boot yang disebut task . Tugas create-site akan membuat tumpukan CloudFormation dengan semua sumber daya untuk situs web statis Anda dan menyimpan semua informasi penting ke file EDN di direktori saat ini.
Mari kita lihat contoh pembuatan situs dan sinkronisasi untuk pertama kalinya.
Bingung tentang kunci akses? Lihat bagian Keamanan README ini.
Katakanlah Anda ingin menerapkan situs di my-app.com . Untuk membuat bucket S3, distribusi CloudFront, dan kunci akses terbatas, Anda dapat menjalankan hal berikut:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY
Catatan: bit
-d confettimemastikan Boot akan mengunduh confetti sehingga tugascreate-siteakan tersedia.
Pengecualian! Karena ingin menggunakan domain telanjang/APEX Anda harus menggunakan Route53 untuk DNS. (Anda dapat mengetahui lebih lanjut mengenai hal ini di Lampiran.) Coba lagi dengan DNS diaktifkan:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY --dns
Ini harus memulai prosesnya. Umpan balik pertama akan muncul di layar Anda. Pada titik tertentu, tidak ada peristiwa baru yang dicetak tetapi prosesnya juga belum kembali. Yang Anda tunggu sekarang adalah pembuatan distribusi CloudFront Anda. Ini biasanya memakan waktu antara 10-15 menit.
Anda dapat menghentikan prosesnya pada saat ini. Semuanya berjalan dari jarak jauh dan tidak akan terganggu. File
.confetti.edndisimpan di direktori kerja Anda saat ini dan jika menggunakan tugasfetch-outputsdengan kredensial yang memadai, Anda dapat mengunduh semua informasi berguna kapan saja. (Tugas ini juga akan memberi tahu Anda jika tumpukannya belum siap.)
Setelah tugas create-site selesai, Anda akan menemukan file di direktori kerja Anda saat ini: my-app-com.confetti.edn . Isinya harus berisi semua hal penting tentang sumber daya yang baru Anda sediakan:
{ :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 " }Sekarang semuanya siap untuk penerapan pertama!
Sekarang tugas sync-bucket mulai berlaku. Meskipun tugas ini menyediakan banyak cara berbeda untuk menentukan apa yang akan diunggah, kami hanya akan menunjukkan cara paling sederhana di sini: menyinkronkan direktori lokal. Untuk tujuan demo, mari buat direktori dengan cepat:
mkdir my-app-site
echo "Hello World" > my-app-site/index.html
echo "About Us" > my-app-site/about.html
Sekarang mari kita sinkronkan. Ambil nilai bucket-name , access-key dan secret-key dari file .confetti.edn :
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
Ini akan mengunggah index.html dan about.html ke keranjang Anda. Untuk memverifikasi bahwa semuanya berhasil, Anda dapat menavigasi ke URL yang disimpan sebagai cloudfront-url di file edn.
Masih banyak lagi cara untuk menentukan file apa yang akan diunggah (dengan metadata khusus jika diinginkan) yang tidak tercakup dalam panduan ini. Konsultasikan
boot sync-bucket --helpuntuk detailnya.
Sekarang satu-satunya langkah yang hilang adalah mengatur DNS dengan benar. Apa yang perlu dilakukan di sini bervariasi tergantung pada apakah Anda mengaktifkan opsi --dns atau tidak. Pada contoh di atas, kami mengaktifkannya, jadi mari kita bahas kasus tersebut terlebih dahulu:
DNS dengan Route53: Karena Anda memiliki pengaturan domain root/naked/apex, Anda memutuskan untuk menggunakan DNS yang dikelola oleh AWS. Sekarang Anda perlu mengatur server nama untuk domain yang Anda gunakan ke server nama AWS. Ini berbeda untuk Zona yang Di-hosting sehingga Anda perlu mencarinya di Konsol AWS.
Tanpa Route53: Saat tidak menggunakan Route53, satu-satunya hal yang harus Anda lakukan adalah menambahkan entri CNAME ke Zonefile domain Anda yang mengarah ke distribusi Cloudfront.
Kedua langkah ini akan bervariasi dari satu registrar domain ke registrar domain lainnya sehingga disarankan untuk memeriksa dokumentasi masing-masing.
Ingin SSL? Berikut cara mengaktifkannya.
Katakanlah Anda menggunakan Confetti untuk membuat situs weloveparens.com dan sekarang ingin menambahkan situs statis ke subdomain domain tersebut. Anda cukup menjalankan:
boot create-site --domain "shop.weloveparens.com" --dns --access-key FOO --secret-key BAR
Ini akan membuat Route53 RecordSet di HostedZone yang sebelumnya telah dibuat untuk Anda saat menyiapkan weloveparens.com . Bucket S3, distribusi CloudFront, dan sebagainya akan dibuat seperti biasa. Seperti biasa, semuanya (termasuk RecordSet) akan dibuat sebagai tumpukan CloudFormation jadi jika Anda tidak lagi membutuhkannya, Anda cukup menghapus tumpukan tersebut, sehingga weloveparens.com tidak terpengaruh.
Untuk mendapatkan bantuan pada baris perintah Anda selalu dapat menjalankan:
boot create-site --help
boot fetch-outputs --help
boot sync-bucket --help
Juga jangan ragu untuk membuka masalah untuk mengajukan pertanyaan atau menyarankan perbaikan.
Memberikan kunci AWS Anda ke suatu program dan membiarkannya berjalan adalah hal yang menakutkan sehingga bagian ini bertujuan untuk memberikan kenyamanan seputar hal itu.
create-site akan membuat tumpukan CloudFormation sesuai dengan templat yang ditentukan di confetti-clj/cloudformation.--dry-run .create-site harus memiliki izin untuk membuat sumber daya individual yang tercantum dalam templat CloudFormation. (Di masa mendatang, Confetti dapat menyediakan cuplikan kebijakan AWS IAM sehingga Anda dapat membuat pengguna yang memiliki semua hak yang dibutuhkan Confetti.) Pada versi 0.2.0 perintah create-site akan membuat file yang diakhiri dengan .confetti.edn yang berisi semua informasi yang diperlukan untuk memelihara situs Anda. Informasi dalam file ini mengandung rahasia!
Pembaruan: Saya sampai pada kesimpulan bahwa membuat file ini adalah ide yang buruk. Orang-orang pasti akan melakukannya dan mempublikasikan kunci ke bucket S3 mereka. Di masa depan saya hanya ingin mencetak sesuatu dalam format yang dipahami oleh direnv dan merekomendasikan env vars / direnv sebagai gantinya.
[confetti/cloudformation "0.1.6"] , yang memberikan peningkatan berikut:confetti/s3-deploy untuk meningkatkan kompatibilitas Windows Penggunaan Kembali HostedZone: Membuat HostedZone baru untuk setiap situs memiliki dua kelemahan:
Dengan menggunakan satu HostedZone untuk domain root Anda example.com masalah ini terpecahkan dan menambahkan situs baru di demo.example.com hanyalah masalah menambahkan RecordSet. Confetti sekarang mencoba menemukan HostedZone yang ada dan hanya menambahkan RecordSet jika menemukannya.
Opsi invalidation-paths baru untuk tugas sync-bucket . Jalur pembatalan sebelumnya ditentukan berdasarkan file yang Anda unggah. Sekarang Anda dapat menyediakan set khusus. (#21 + #29)
Perbaiki bug dengan metode baru dalam menyediakan opsi melalui file .confetti.edn
confetti-edn , kami sekarang menerima kedua versi (diakhiri dengan .confetti.edn dan hanya bagian sebelumnya). Sebelumnya Anda diharapkan hanya menyediakan bagian sebelum akhiran .confetti.ednconfetti-edn dan tugas fetch-outputscreate-sitefetch-outputs[confetti/cloudformation "0.1.3"] untuk memiliki :website-url dalam keluaran tumpukan tidak peduli apakah Route53 digunakan atau tidakfetch-outputs jika Route53 tidak digunakan fetch-outputs telah ditambahkan yang dapat digunakan untuk mengunduh keluaran tumpukan Cloudformation. Sebelumnya pelaporan sering macet dan tidak menyimpan keluaran tumpukan dengan benar. Untuk menghindari hal ini, Anda sekarang dapat membatalkan pelaporan dan memanggil fetch-outputs kapan saja untuk mengunduh keluaran.sync-bucket sekarang menyediakan opsi confetti-edn yang dapat digunakan untuk menyediakan bagian some-id dari {some-id}.confetti.edn . Informasi dalam file itu kemudian akan digunakan sebagai pengganti opsi tugas biasa.Jika ada yang tidak berfungsi seperti yang diharapkan, silakan buka masalah. ?
Catatan Jika Anda akhirnya mendapatkan kesalahan 504 saat meminta aset dari distribusi Cloudfront, periksa kembali apakah Anda benar-benar menggunakan titik akhir situs web sebagai asal. Kebijakan Protokol Asal harus "Hanya HTTP" sebagai akibat dari penggunaan titik akhir situs web.
Cloudfront mendukung domain APEX tetapi hanya jika Anda menggunakan data ALIAS Route53. Informasi lebih lanjut dapat ditemukan di pengumuman resmi.
Batasan ini mempersulit otomatisasi penyiapan domain root (APEX) sehingga saat ini tidak didukung untuk membuat situs untuk domain root tanpa juga mengelola DNS dengan Route53.