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 confetti
memastikan Boot akan mengunduh confetti sehingga tugascreate-site
akan 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.edn
disimpan di direktori kerja Anda saat ini dan jika menggunakan tugasfetch-outputs
dengan 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 --help
untuk 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.edn
confetti-edn
dan tugas fetch-outputs
create-site
fetch-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.