web-dev-qa-db-ja.com

AWSCloudfrontの複数のオリジン-1番目に見つからない場合に2番目のオリジンにフォールバックするにはどうすればよいですか

デフォルトのオリジンがS3であるCloudfrontディストリビューションをセットアップしようとしていますが、コンテンツがS3で見つからない場合は、EC2インスタンスからコンテンツをフェッチする必要があります。

これらの複数のオリジンをセットアップできますか:S3とEC2、および2つの動作。どちらもデフォルトで(*)になり、必要に応じて2番目のオリジン(EC2)にフェイルオーバーしますか?

プロセスは次のとおりです。

  1. バックエンドはEC2インスタンスで画像を生成します。
  2. できるだけ早くS3にアップロードしますが、すぐにはアップロードできません。
  3. ユーザーがcdn.example.com/images/picture.jpgにアクセスしようとすると、CloudfrontがS3バケットに転送されます。画像がまだ存在しない場合は、そのリクエストをEC2サーバーにリダイレクトします。

S3で更新されるまで、ここでは一時的なリダイレクトソリューションで問題ありません。

S3リダイレクトは、欠落しているオブジェクトではなく、既存のオブジェクトまたはバケット全体に対してのみ機能するように見えるため、S3リダイレクトは答えではありません。

どうすればそれを達成できますか?

ありがとう、Adoram

5
adoram

CloudFrontはユースケースをサポートしていません。これはアプリケーションで処理する必要があります。システムがS3への転送を完了するまで、アイテムのCDNURLを提供しないでください。

1
ceejayoz

CloudFrontのオリジンフェイルオーバー機能を使用すると、ディストリビューションにプライマリとセカンダリの2つのオリジンを設定できます。これにより、CloudFrontがプライマリオリジンが利用できないことを検出した場合にコンテンツがセカンダリオリジンから提供されます。 CloudFrontでは、Originが利用できない場合に、カスタムエラーページを設定したり、Lambda @Edgeでリダイレクトを生成したりできます。オリジンフェイルオーバーを使用すると、AWSオリジンまたはAWS以外のカスタムHTTPオリジンの組み合わせ間でフェイルオーバーロジックを簡単にセットアップできるため、視聴者のエクスペリエンスへの中断を最小限に抑えることができます。たとえば、オリジンとして機能する2つのAmazon S3バケットを作成し、コンテンツを個別にアップロードすることができます。 CloudFrontがプライマリバケットからリクエストするオブジェクトが存在しない場合、またはプライマリバケットへの接続がタイムアウトした場合、CloudFrontはセカンダリバケットからオブジェクトをリクエストします。そのため、HTTP4xxまたは5xxステータスコードのいずれかに応答してフェイルオーバーをトリガーするようにCloudFrontを設定できます。

ソース: https://aws.Amazon.com/about-aws/whats-new/2018/11/Amazon-cloudfront-announces-support-for-Origin-failover/

ドキュメント: https://docs.aws.Amazon.com/AmazonCloudFront/latest/DeveloperGuide/high_availability_Origin_failover.html

Cloudfront構成に両方のオリジンを追加します。

[オリジングループ]セクションにフェイルオーバーグループルールを追加します。

0
Chamchungue