2017-10-24 31 views
0

私はS3でホストされ、CloudFront経由でWebに公開されている1ページのアプリケーションを提供しています。私のAPIでメンテナンスを行っているとき、私は、メンテナンスページをレンダリングするために私のアプリケーションへの要求を引き起こす手動スイッチを持っていると思います。S3 + CloudFrontを使用した保守モード

メンテナンスHTML(またはjson)をS3に置くことができます。メンテナンスモードをオンにすると、CloudFrontがメンテナンスサイトを返すように設定するにはどうすればいいですか?

答えて

2

あなたの静的な「メンテナンス」の応答を生成するためにエッジ機能@ラムダを作成します:あなたは、それをアクティブビューアリクエストトリガーを選択しての設定ページにラムダ関数のARNを使用したい場合は http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html#lambda-examples-static-web-server

をキャッシュメンテナンスメッセージを返信し、変更を保存する動作。それを無効にするには、削除します。変更は通常、非常に短い期間内に処理されます。

前CloudFrontのキャッシュがチェックされ、それが応答を生成する場合、応答はキャッシュを確認せずに返され、生成された応答は、CloudFrontはキャッシュに格納されていないビューア要求トリガが起動するのでこれはあなたの目的を達成します - したがって、キャッシュされたコンテンツは、トリガーを削除した後もそこに残ります。あなたが実際にCloudFrontの配信で、このような機能を関連付ける初めて、私はあなたがCloudFrontのは、必要なときにラムダ関数はグローバルにアクセス可能になるように、ラムダコンソールで「トリガーを有効にして複製」する必要がを信じること

注意それ。これをテストするときには、実際のCloudFrontディストリビューションに関連付ける必要はありません。テスト用に2つ目を作成することはできますが、CloudFrontコンソールで使用できるようにするには、関数バージョンがこのレプリケーションサイクルを通過する必要があります。 Lambda @ Edgeで使用する関数は、us-east-1領域に作成し、すべての領域に複製して、CloudFrontエッジが最も近い領域から呼び出すことができるようにする必要があります。 Lambda @ Edge関数は、常にその数値のバージョンIDによって参照されます。マジックストリング$LATESTを含む関数エイリアスは、Lambda @ Edgeでは使用されていません。

+0

ニース!これは私が欲しかったものです。ありがとうございました。 –

+0

@MaticJurglič素晴らしい私は最終的にあなたにいくつかのトラブルシューティングを保存するために最後に別のメモを追加しました。 –

0

CloudFrontで特定のファイルのinvalidationを行うことができますが、メンテナンス中に現在のWebアプリケーションを上書きしてから、バックアップした後に復元(および無効化)する必要があります。

あなたのアプリに定期的に(そして利用可能なエラーではなく)メンテナンスモードのサポートを追加することが最善のソリューションだと思うのですが、どこかのフラグ(通常、メンテナンスモードでアプリをフリーズし、APIがメンテナンス中であることをユーザーに知らせるダイアログを表示するか、APIアクセスが必要な機能をロックし、可能であればキャッシュされたデータで読み取り専用アクセスを使用できるようにします。

後者の解決策では、ファイルをS3にアップロードするだけで済みます。終了したらもう一度削除/置き換えてください。アプリがユーザーに表示するメッセージ(変更履歴など)を含めることもできます。

関連する問題