使い方 |セキュリティ |変更ログ |付録
(アルファ)アマゾン ウェブ サービス (AWS) で静的サイトを作成するのに役立つツール。
理論的根拠: 静的サイトは楽しいです。 S3 へのデプロイは純粋に楽しいです。 CloudFront を使用すると、スケーリングについて考える必要がなくなります。サーバーを管理する必要はありません。泣く涙もない。ただし、すべてを設定するのはそれほど簡単ではありません。 Confetti は、CloudFormation を使用してベスト プラクティスを繰り返し可能なプログラムにエンコードする試みであり、基本および高度な導入シナリオに便利なツールを提供します。
[confetti/confetti " 0.2.1 " ] ; ; latest release サイトの作成 |サイトを同期する |最終ステップ:DNS |サブドメインの追加
Confetti はブート タスクとしてパッケージ化されています。これは主に、ブートを使用すると、ブートストラップや依存関係の解決について心配する必要がなく、Clojure でコマンドライン アプリを簡単に作成できるためです。
Confetti には、ブート用語でtaskと呼ばれる 2 つのコマンドが用意されています。 create-siteタスクは、静的 Web サイトのすべてのリソースを含む CloudFormation スタックを作成し、すべての重要な情報を現在のディレクトリの EDN ファイルに保存します。
サイトを作成して初めて同期する例を見てみましょう。
アクセスキーについて混乱していますか?この README の「セキュリティ」セクションを確認してください。
my-app.comにサイトをデプロイするとします。 S3 バケット、CloudFront ディストリビューション、制限付きアクセス キーを作成するには、次のコマンドを実行します。
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY
注:
-d confettiビットにより、Boot は確実に confetti をダウンロードし、create-siteタスクが使用できるようになります。
例外!ネイキッド/APEX ドメインを使用したいため、DNS に Route53 を使用する必要があります。 (これについては、付録を参照してください。) 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: root/naked/apex ドメインが設定されているため、AWS によるマネージド DNS を使用することにしました。次に、使用したドメインのネームサーバーを AWS のネームサーバーに設定する必要があります。これらはホストゾーンごとに異なるため、AWS コンソールで調べる必要があります。
Route53 を使用しない場合: Route53 を使用しない場合、必要なのは、Cloudfront ディストリビューションを指す CNAME エントリをドメインのゾーンファイルに追加することだけです。
これらの手順はどちらもドメイン レジストラーによって異なるため、個々のドキュメントを確認することをお勧めします。
SSLが必要ですか?有効にする方法は次のとおりです。
Confetti を使用してサイトweloveparens.comを作成し、そのドメインのサブドメインに静的サイトを追加したいとします。次のように実行できます。
boot create-site --domain "shop.weloveparens.com" --dns --access-key FOO --secret-key BAR
これにより、 weloveparens.com設定するときに事前に作成された Route53 RecordSet が HostedZone に作成されます。 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 を作成すると、次の 2 つの欠点があります。
ルート ドメインexample.comに 1 つの 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"]にアップグレードすると、Route53 が使用されているかどうかに関係なく、スタック出力に:website-urlが含まれます。fetch-outputs fetch-outputsタスクが追加されました。以前は、レポートが頻繁にスタックし、スタック出力が適切に保存されませんでした。これを回避するには、レポートをキャンセルし、後の任意の時点でfetch-outputs呼び出して出力をダウンロードすることができます。sync-bucketタスクは、 {some-id}.confetti.ednの some-id 部分を提供するために使用できるconfetti-ednオプションを提供するようになりました。そのファイル内の情報は、通常のタスク オプションの代わりに使用されます。何かが期待どおりに動作しない場合は、問題を開いてください。 ?
注: Cloudfront ディストリビューションからアセットをリクエストするときに 504 エラーが発生した場合は、Web サイトのエンドポイントをオリジンとして実際に使用していることを再確認してください。 Web サイトのエンドポイントを使用するため、オリジン プロトコル ポリシーは「HTTP のみ」である必要があります。
Cloudfront は APEX ドメインをサポートしますが、Route53 のALIASレコードを使用する場合に限ります。詳細については、公式発表をご覧ください。
この制限により、ルート (APEX) ドメインのセットアップを自動化することが難しくなるため、Route53 で DNS を管理せずにルート ドメインのサイトを作成することは現在サポートされていません。