ストレージのためのAWSのAmazon S3とCDNのためのCloudfrontの設定

,

はじめに

必要となるもの:

  1. app.yml アクセス権を持つ Discourse インスタンス
  2. AWS アカウント

命名戦略

ミスが発生する場所は多数あります。自分自身、あるいは他の人にとっても意味のある命名規則の戦略を採用することで、特に複数の Discourse インスタンスを設定している場合のトラブルシューティングが容易になります。

  • IAM ユーザー: your-iam-user
  • ポリシー: s3-discourse-policy-your-iam-user
  • バックアップバケット: yourdomain-subdomain-backups
  • アップロードバケット: yourdomain-subdomain-uploads
  • 配信 CDN: cdn-yourdomain-subdomain および s3-yourdomain-subdomain-uploads

オプション: 設定プロセス用バケット: a-origin-config-bucket

AWS 設定

指示がない限り、AWS 設定ページではデフォルトの設定を使用してください。

S3 の名前、名前、名前

  • Discourse インスタンスのドメイン: subdomain.yourdomain.tld (subdomain.yourdomain.tld および www.yourdomain.tld を含む)
  • IAM ユーザー: yourdomain-subdomain (yourdomain-discourse、yourdomain-forum、または Apex/ルートでの Discourse: yourdomain-tld-www)
  • IAM ユーザー用ポリシー: s3-discourse-policy-yourdomain-subdomain
  • アップロードバケット: yourdomain-subdomain-uploads 注: バケット>Permissions: Access control list-(ACL) Access control list (ACL)-Grantee で「Everyone (public access)」を「Read」に設定することを忘れないでください。
  • バックアップバケット: yourdomain-subdomain-backups
  • 配信 CDN: cdn-yourdomain-subdomain および s3-yourdomain-subdomain-uploads
  • 設定プロセス用バケット: a-origin-config-bucket

IAM ユーザー

  1. IAM > Users > 「ユーザーの作成」を選択
  2. IAM > Users > ユーザーの作成 > ユーザー詳細の指定 > ユーザー詳細 > ユーザー名 > 名前を入力(例: your-iam-user)> 「次へ」を選択
  3. IAM > Users > ユーザーの作成 > 権限の設定 > 権限オプション > 「ポリシーを直接アタッチ」を選択 > 「ポリシーの作成」を選択 > ポリシー作成ページが開く(または、事前にポリシーでポリシーを作成し、ユーザー作成時の「権限ポリシー」で選択することも可能)
  4. IAM > Users > ユーザーの作成 > 権限の設定 > 権限ポリシー > 種類でフィルターするドロップダウンセレクト > 「顧客管理」を選択 > 新しく作成したポリシーを選択 > 「次へ」を選択 > 「ユーザーの作成」を選択
  5. IAM > Users > your-iam-user > セキュリティ資格情報 > アクセスキー > 「アクセスキーの作成」を選択
  6. IAM > Users > your-iam-user > アクセスキーの作成 > アクセスキーのベストプラクティスと代替案 > 「その他」を選択 > 「次へ」を選択
  7. IAM > Users > your-iam-user > アクセスキーの作成 > 説明タグの設定 > 「アクセスキーの作成」を選択
  8. IAM > Users > your-iam-user > アクセスキーの作成 > アクセスキーの取得 > Discourse の app.yml で使用するために、アクセスキーとシークレットアクセスキーを安全に保存 > 「完了」を選択

ポリシー

  1. s3-discourse-policy-your-iam-user.txt を、IAM ユーザー名とバケット名に合わせて修正してください。
  2. IAM > ポリシー > ポリシーの作成
  3. IAM > ポリシー > ポリシーの作成 > 権限の指定 > ポリシーエディター > ポリシーエディターで「JSON」を選択 > s3-discourse-policy-your-iam-user.txt からポリシーをコピーし、既存の JSON を上書きして JSON エディターに貼り付け > 「次へ」を選択
  4. IAM > ポリシー > ポリシーの作成 > 確認と作成 > ポリシー詳細 > ポリシー名 > ポリシー名を入力(例: s3-discourse-policy-your-iam-user)> 「次へ」を選択
  5. IAM ユーザーへ移動: 4. IAM > Users > ユーザーの作成に進み、ユーザー作成プロセスを継続してください

Amazon S3 バケット

バックアップバケット、アップロードバケット、およびオプションですが有用な設定プロセス用バケットを作成して設定します。

バックアップバケットの作成 yourdomain-subdomain-backups

  1. Amazon S3 バケット に移動 > 「バケットの作成」を選択
  2. Amazon S3 > バケット > バケットの作成 > 一般設定 > 「汎用」選択を確認
  3. Amazon S3 > バケット > バケットの作成 > 一般設定 > バケット名 > バックアップバケット名を入力(例: yourdomain-subdomain-backups)
  4. Amazon S3 > バケット > バケットの作成 > 一般設定 > 「ACL を無効化(推奨)」選択を確認
  5. Amazon S3 > バケット > バケットの作成 > このバケットの公開アクセスブロック設定 > 「すべての公開アクセスをブロック」の選択を解除し、「新しい公開バケットまたはアクセスポイントポリシーを通じて付与されたバケットおよびオブジェクトへの公開アクセスをブロック」と「任意の公開バケットまたはアクセスポイントポリシーを通じてバケットおよびオブジェクトへの公開およびクロスアカウントアクセスをブロック」を選択
  6. Amazon S3 > バケット > バケットの作成 > このバケットの公開アクセスブロック設定 > 「すべての公開アクセスのブロックをオフにすると、このバケットとその内部のオブジェクトが公開される可能性があります」> 「現在の設定により、このバケットとその内部のオブジェクトが公開される可能性があることを認識しています」を選択
  7. Amazon S3 > バケット > バケットの作成 > バケットバージョン管理 > バケットバージョン管理 > 「有効化」を選択 情報: バケットバージョン管理は「ライフサイクルルール」に必要です
  8. Amazon S3 > バケット > バケットの作成 > 「バケットの作成」を選択

ライフサイクルルールの設定

バックアップ保持ルール

  1. Amazon S3 > バケット > 新しく作成したバケット(例: yourdomain-subdomain-backups)を選択
  2. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > 「ライフサイクルルールの作成」を選択
  3. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > ライフサイクルルール名 > ルール名を入力(例: backup retention)
  4. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > ルールスコープの選択 > 「バケット内のすべてのオブジェクトに適用」を選択
  5. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > ルールスコープの選択 > バケット内のすべてのオブジェクトに適用 > 「このルールがバケット内のすべてのオブジェクトに適用されることを認識しています」を選択
  6. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > ライフサイクルルールアクション > 「オブジェクトの非現行バージョンをストレージクラス間で移行する」、「オブジェクトの現行バージョンを有効期限切れにする」、および「オブジェクトの非現行バージョンを完全に削除する」を選択
  7. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > ライフサイクルルールアクション > 移行はリクエストごとに課金されます > 「このライフサイクルルールにより、リクエストごとに移行コストが発生することを認識しています」を選択
  8. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > オブジェクトの非現行バージョンをストレージクラス間で移行する > ストレージクラス移行の選択 > 「Glacier Instant Retrieval」を選択
  9. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > オブジェクトの非現行バージョンをストレージクラス間で移行する > オブジェクトが非現行になってからの日数 > 「1」を入力
  10. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > オブジェクトの現行バージョンを有効期限切れにする > オブジェクト作成からの日数 > 「7」または「15」または「30」または「???」を入力
  11. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > オブジェクトの非現行バージョンを完全に削除する > オブジェクトが非現行になってからの日数 > 「91」を入力
  12. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > 「移行と有効期限切れアクションの確認」が正しいことを確認 > 「ルールを作成」を選択

クリーンアップルール

  1. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > 「ライフサイクルルールの作成」を選択
  2. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > ライフサイクルルール名 > ルール名 cleanup を入力
  3. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > ルールスコープの選択 > 「バケット内のすべてのオブジェクトに適用」を選択
  4. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > ルールスコープの選択 > バケット内のすべてのオブジェクトに適用 > 「このルールがバケット内のすべてのオブジェクトに適用されることを認識しています」を選択
  5. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > ライフサイクルルールアクション > 「オブジェクトの非現行バージョンを完全に削除する」と「期限切れのオブジェクト削除マーカーまたは不完全なマルチパートアップロードを削除する」を選択
  6. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > オブジェクトの非現行バージョンを完全に削除する > オブジェクトが非現行になってからの日数 > 「92」を入力
  7. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > オブジェクトの非現行バージョンを完全に削除する > 期限切れのオブジェクト削除マーカーまたは不完全なマルチパートアップロードを削除する > 期限切れのオブジェクト削除マーカー > 「期限切れのオブジェクト削除マーカーを削除する」を選択
  8. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > オブジェクトの非現行バージョンを完全に削除する > 期限切れのオブジェクト削除マーカーまたは不完全なマルチパートアップロードを削除する > 不完全なマルチパートアップロード > 「不完全なマルチパートアップロードを削除する」を選択
  9. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > オブジェクトの非現行バージョンを完全に削除する > 期限切れのオブジェクト削除マーカーまたは不完全なマルチパートアップロードを削除する > 不完全なマルチパートアップロード > 不完全なマルチパートアップロードを削除する > 日数 > 「3」または「???」を入力
  10. Amazon S3 > バケット > yourdomain-subdomain-backups > 管理 > ライフサイクル設定 > 「移行と有効期限切れアクションの確認」が正しいことを確認 > 「ルールを作成」を選択

アップロードバケットの作成 yourdomain-subdomain-uploads

  1. Amazon S3 > バケット に移動 > 「バケットの作成」を選択
  2. Amazon S3 > バケット > バケットの作成 > 一般設定 > 「汎用」選択を確認
  3. Amazon S3 > バケット > バケットの作成 > 一般設定 > バケット名 > アップロードバケット名を入力(例: yourdomain-subdomain-uploads)
  4. Amazon S3 > バケット > バケットの作成 > 一般設定 > 「ACL を有効化」を選択
  5. Amazon S3 > バケット > バケットの作成 > このバケットの公開アクセスブロック設定 > 「すべての公開アクセスをブロック」の選択を解除し、「新しい公開バケットまたはアクセスポイントポリシーを通じて付与されたバケットおよびオブジェクトへの公開アクセスをブロック」と「任意の公開バケットまたはアクセスポイントポリシーを通じてバケットおよびオブジェクトへの公開およびクロスアカウントアクセスをブロック」を選択
  6. Amazon S3 > バケット > バケットの作成 > このバケットの公開アクセスブロック設定 > 「すべての公開アクセスのブロックをオフにすると、このバケットとその内部のオブジェクトが公開される可能性があります」> 「現在の設定により、このバケットとその内部のオブジェクトが公開される可能性があることを認識しています」を選択
  7. Amazon S3 > バケット > バケットの作成 > 「バケットの作成」を選択
  8. Amazon S3 > バケット > バケット画面 > 新しく作成したバケット(例: yourdomain-subdomain-uploads)を選択
    配信 #2 の作成後にステップ 9 を実行してください
  9. Amazon S3 > バケット > yourdomain-subdomain-uploads > 権限 > バケットポリシー > 編集を選択 > 配信 #2 の作成 11. CloudFront > 配信 > 配信 ID > オリジンの編集 > オリジンアクセス制御 > 「変更を保存」を選択した JSON を貼り付け
  10. Amazon S3 > バケット > yourdomain-subdomain-uploads > 権限 > アクセス制御リスト (ACL) > 編集を選択 > Everyone (public access) > 「Read」を選択 > Everyone グループまたは認証済みユーザーグループのグラントにアクセス権を付与すると、世界中の誰でもこのバケット内のオブジェクトにアクセスできます。「これらの変更がオブジェクトおよびバケットに与える影響を理解しています」を選択 > 「変更を保存」を選択

設定プロセス用バケットの作成 a-origin-config-bucket
配信 #1 の設定プロセス中に使用されるバケットを作成します。名前と設定は重要ではありません。このバケットは、設定プロセス中に削除される一時的な初期オリジンとしてのみ使用されるためです。
1. Amazon S3 > バケット に移動 > 「バケットの作成」を選択
2. Amazon S3 > バケット > バケットの作成 > 一般設定 > 「汎用」選択を確認
3. Amazon S3 > バケット > バケットの作成 > 一般設定 > バケット名 > アップロードバケット名を入力(例: a-origin-config-bucket)
4. 設定ページを移動し、「バケットの作成」を選択

CloudFront 配信

2 つの AWS S3 CloudFront 配信を作成します。1 つはウェブサイトのアセットを提供し、もう 1 つはアップロードバケットのアセットを提供します。

配信 #1 の作成

  配信 #1
    DISCOURSE_CDN_URL
      配信名: cdn-yourdomain-subdomain
      オリジン: subdomain.yourdomain.tld
      配信ドメイン名 (Cloudfront URL): AWS-assigned.cloudfront.net
      代替ドメイン名: discourse-cdn.yourdomain.tld
  1. CloudFront > 配信 に移動 > 「作成」を選択
  2. CloudFront > 配信 > 配信の作成 > プランの選択 > 「従量課金」を選択 > 「次へ」を選択
  3. CloudFront > 配信 > 配信の作成 > 開始 > 配信オプション > 配信名 > 配信名を入力(例: cdn-yourdomain-subdomain)
  4. CloudFront > 配信 > 配信の作成 > 開始 > 配信オプション > 説明 - オプション > 「cdn-yourdomain-subdomain」を入力(オプションですが、可視性の向上に役立ちます)
  5. CloudFront > 配信 > 配信の作成 > 開始 > 配信オプション > 配信タイプ > 「単一のウェブサイトまたはアプリ」選択を確認 > 「次へ」を選択
  6. CloudFront > 配信 > 配信の作成 > オリジンの指定 > オリジンタイプ > 「その他」を選択 パブリックに解決可能な URL を通じて、AWS 内または外の任意のオリジンを参照してください。
  7. CloudFront > 配信 > 配信の作成 > オリジンの指定 > オリジン > カスタムオリジン > ドメインを入力(例: subdomain.yourdomain.tld)
  8. CloudFront > 配信 > 配信の作成 > オリジンの指定 > 設定 > キャッシュ設定 > 「キャッシュ設定をカスタマイズ」を選択
  9. CloudFront > 配信 > 配信の作成 > オリジンの指定 > 設定 > キャッシュ設定 > キャッシュポリシー > ドロップダウンから「CachingOptimized」を選択 > 「次へ」を選択
  10. CloudFront > 配信 > 配信の作成 > セキュリティの有効化 > 選択してください - このガイドでは > 「セキュリティ保護を有効化しない」を選択 > 「次へ」を選択
  11. CloudFront > 配信 > 配信の作成 > 確認と作成 > 「配信の作成」を選択
    ブランド付き CDN URL を使用する場合 → ステップ 12
  12. CloudFront > 配信 > 配信 ID > 代替ドメイン名 > 「ドメインの追加」を選択
  13. CloudFront > 配信 > 配信 ID > 代替ドメイン名 > ドメインの追加 > ドメインの設定 > ドメイン > 配信対象のドメイン > DISCOURSE_CDN_URL を入力(例: discourse-cdn.yourdomain.tld)> 「次へ」を選択

未完了: 代替ドメイン名: discourse-cdn.yourdomain.tld

配信 #2 の作成

  配信 #2
    DISCOURSE_S3_CDN_URL
      配信名: s3-yourdomain-subdomain-uploads
      オリジン: yourdomain-subdomain-uploads
      配信ドメイン名 (Cloudfront URL): AWS-assigned.cloudfront.net
      代替ドメイン名: s3-cdn.yourdomain.tld
  1. CloudFront > 配信 > 配信の作成
  2. CloudFront > 配信 > 配信の作成 > プランの選択 > 「従量課金」を選択 > 「次へ」を選択
  3. CloudFront > 配信 > 配信の作成 > 開始 > 配信オプション > 配信名 > 配信名を入力(例: s3-yourdomain-subdomain-uploads)
  4. CloudFront > 配信 > 配信の作成 > 開始 > 配信オプション > 説明 - オプション > 「s3-yourdomain-subdomain-uploads」を入力(オプションですが、可視性の向上に役立ちます)
  5. CloudFront > 配信 > 配信の作成 > 開始 > 配信オプション > 配信タイプ > 「単一のウェブサイトまたはアプリ」選択を確認 > 「次へ」を選択
  6. CloudFront > 配信 > 配信の作成 > オリジンの指定 > オリジンタイプ > 「Amazon S3」選択を確認
  7. CloudFront > 配信 > 配信の作成 > オリジンの指定 > オリジン > S3 オリジン > 「S3 を参照」を選択 > アップロードバケット「yourdomain-subdomain-uploads」を選択 > 「選択」を選択 > 「次へ」を選択
  8. CloudFront > 配信 > 配信の作成 > セキュリティの有効化 > 選択してください - このガイドでは > 「セキュリティ保護を有効化しない」を選択 > 「次へ」を選択
  9. CloudFront > 配信 > 配信の作成 > 確認と作成 > 「確認と作成: が正しいことを確認」> 「配信の作成」を選択 → 新しく作成された配信情報ページが CloudFront > 配信 > 配信 ID で開くはずです
  10. CloudFront > 配信 > 配信 ID > オリジン > オリジンを選択 > 「編集」を選択
  11. CloudFront > 配信 > 配信 ID > オリジンの編集 > オリジンアクセス制御 > ! このポリシーを使用して CloudFront へのアクセスを許可する必要があります… > 「ポリシーをコピー」を選択 > アップロードバケットの作成 9. Amazon S3 > バケット > yourdomain-subdomain-uploads > 権限 > バケットポリシーへ移動

未完了: 代替ドメイン名: s3-cdn.yourdomain.tld

Discourse 管理者

最新の Discourse バージョン: 2025.12.0-latest

Discourse 管理 UI で以下の変更を行ってください。

バックアップ設定 /admin/backups/settings

  1. 最大バックアップ数 > ローカルに保持するバックアップ数を入力
  2. アップロード付きバックアップ > 「スケジュールされたバックアップにアップロードを含める。これを無効化すると、データベースのみがバックアップされます」を選択

S3 設定 /admin/site_settings/category/all_results?filter=S3

  1. すべてのアップロードに CDN URL を使用 > 「画像のみではなく、S3 にアップロードされたすべてのファイルに CDN URL を使用する」を選択(Discourse はデフォルトで未選択です)

設定の編集 (app.yml) ブランドなし URL

ブランド付き URL またはブランドなし Cloudfront URL に対して、以下の変更を app.yml で行ってください。

Discourse ブランドなし URL

ブランドなし CloudFront 配信に使用します。DISCOURSE_S3_REGION は異なる場合があります。
DISCOURSE_CDN_URL: https://amazonassigned.cloudfront.net

S3 ストレージ設定 (ブランドなし)

  ## S3 ストレージ設定
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION:  us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: キーは伏せられています
  DISCOURSE_S3_SECRET_ACCESS_KEY: キーは伏せられています
  DISCOURSE_S3_CDN_URL: https://amazonassigned.cloudfront.net
  DISCOURSE_S3_BUCKET: your-bucket-name-uploads
  DISCOURSE_S3_BACKUP_BUCKET: your-bucket-name-backups
  DISCOURSE_BACKUP_LOCATION: s3

Discourse ブランド付き URL

DNS 設定

CDN に yourdomain.com ベースの URL を使用したい場合は、いくつかの DNS 変更を行い、CDN URL を調整する必要があります。

ヒント: 各 CloudFront 配信の「代替ドメイン名」に discourse-cdn.yourdomain.com および s3-cdn.yourdomain.com をドメイン名として追加することを忘れないでください。

ブランド付き CloudFront 配信を使用したい場合の DNS 設定。

DISCOURSE_CDN_URL

既存のレコード:	A   discourseinstance.yourdomain.com   インスタンス IP  注: これは既存の Discourse インストールの IP です。
新しいレコード:		A   discourse-cdn-cloudfront.yourdomain.com   インスタンス IP
新しいレコード: 		CNAME discourse-cdn.yourdomain.com  ->   amazonassigned.cloudfront.net

DISCOURSE_S3_CDN_URL

新しいレコード:		CNAME s3-cdn-cloudfront.yourdomain.com  ->   amazonassigned.cloudfront.net
新しいレコード: 	CNAME  s3-cdn.yourdomain.com  ->   s3-cdn-cloudfront.yourdomain.com

設定の編集 (app.yml) ブランド付き URL

DNS 変更が完了したら、以下の変更を app.yml で行ってください。

CloudFront 配信(amazonassigned.cloudfront.net)にドメイン CNAME を使用している場合は、DISCOURSE_CDN_URL および/または DISCOURSE_S3_CDN_URL を変更してください。

DISCOURSE_CDN_URL: https://discourse-cdn.yourdomain.com

S3 ストレージ設定 (ブランド付き)

## S3 ストレージ設定
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION:  us-east-1
DISCOURSE_S3_ACCESS_KEY_ID: キーは伏せられています
DISCOURSE_S3_SECRET_ACCESS_KEY: キーは伏せられています
DISCOURSE_S3_CDN_URL: https://s3-cdn.yourdomain.com
DISCOURSE_S3_BUCKET: your-bucket-name-uploads
DISCOURSE_S3_BACKUP_BUCKET: your-bucket-name-backups
DISCOURSE_BACKUP_LOCATION: s3

追加の設定編集 (app.yml)

ブランド付きまたは CloudFront URL のどちらのアプローチを使用する場合でも、後続のリビルド中に状態を最新に保つために、以下の after_assets_precompile セクションが必要です。

  hooks:
    after_code:
      - exec:
          cd: $home/plugins
          cmd:
            - git clone https://github.com/discourse/docker_manager.git
            -you may have more plugins
    after_assets_precompile:
      - exec:
          cd: $home
          cmd:
            - sudo -E -u discourse bundle exec rake s3:upload_assets
            - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

./launcher rebuild app でインスタンスをリビルドしてください。

./launcher rebuild app が正常に完了したら、以下の rake コマンドを実行してください。

./launcher enter app

rake posts:rebake
rake uploads:migrate_to_s3
rake posts:rebake_uncooked_posts

rake s3:upload_assets
rake s3:expire_missing_assets

rake コマンドがエラーなく完了すれば、準備完了です。

一部のサイトでは、初期リビルドが s3:upload_assets に関連するエラーで失敗することがあります。この場合、

アップロードバケットの「read」設定を確認してください。正しく設定されている場合は、

after_assets_precompile セクションをコメントアウトまたは削除してください:

  after_assets_precompile:
      - exec:
          cd: $home
          cmd:
            - sudo -E -u discourse bundle exec rake s3:upload_assets
            - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

その後、./launcher rebuild app を再度実行してください。次に「rake s3:upload_assets」と「rake s3:expire_missing_assets」を実行してください。

両方の rake コマンドがエラーなく完了したら、after_assets_precompile セクションを再度追加またはコメントアウトを解除し、再度リビルドして、上記のすべての rake コマンドを実行してください。

どちらかの rake コマンドでエラーが発生するか、リビルドが再度失敗する場合は、app.yml および/または AWS S3 設定および/または DNS レコードに問題があります。頑張ってください!:slight_smile:

s3-discourse-policy-your-iam-user.txt|添付ファイル (697 バイト)

「いいね!」 1

AWSサポートからの回答:クリーンアップルールの設計に関する確認

提案されたライフサイクルルールの設定を確認しましたが、バックアップバケット管理のためのAWSのベストプラクティスに沿った、非常によく設計された設定であることを喜んでお伝えします。

========== ライフサイクルルール評価 ==========

お客様の設定は優れており、バックアップクリーンアップの主要な領域に対応しています。

  • 非現行バージョンのクリーンアップ(92日間):これは、ストレージコストと復旧ニーズのバランスを取るための妥当な保持期間です。92日間の保持期間は、バックアップの検証に十分な時間を確保しつつ、無期限のストレージ蓄積を防ぎます。

  • 有効期限切れの削除マーカーの削除:孤立した削除マーカーを自動的にクリーンアップするように正しく設定されており、ストレージコストとバケットパフォーマンスの最適化に役立ちます。

  • 不完全なマルチパートアップロードのクリーンアップ(3日間):3日間の設定は最適です。失敗したアップロードによるストレージの無駄を防ぐのに十分短く、正当な大規模バックアップ操作に対応するのに十分な長さです。

  • スコープの適用:「バケット内のすべてのオブジェクト」への適用は、すべてのコンテンツが同じライフサイクルパターンに従う専用のバックアップバケットにとって適切です。

AWSサポートからの回答:バックアップバケットのライフサイクル設定

バックアップバケットのS3ライフサイクル設定のレビュー

完全なライフサイクル設定を分析した結果、お客様の「バックアップ保持」ルールが適切に構成されており、バックアップ管理のためのAWSのベストプラクティスに従っていることを確認できます。

私の調査からの主な所見:

  • お客様のバケットには、効果的に連携する2つの補完的なライフサイクルルールがあります。
  • 「バックアップ保持」ルールは、適切なタイムラインで現行バージョンと非現行バージョンを適切に処理します。
  • 設定には、非現行バージョンに対するコスト効率の高いストレージ移行が含まれています。
  • すべてのルールコンポーネントは、適切なタイミングパラメータで正しく設定されています。
  • バケットは、適切な権限とともにus-east-1で正しく設定されています。

設定評価:

お客様の「バックアップ保持」ルールは、バックアップオブジェクトのライフサイクルを効果的に管理しています。

  • 非現行バージョンを1日後にGlacier Instant Retrievalに移行(コスト最適化)
  • 現行バージョンを7日後に期限切れにする(定期的なバックアップに適切)
  • 非現行バージョンを91日後に完全に削除(適切な保持期間)

このルールは、「クリーンアップ」ルールを補完しており、そちらは以下を処理します。

  • 有効期限切れの削除マーカーの削除(孤立したマーカーの防止)
  • 不完全なマルチパートアップロードを3日後にクリーンアップ(ストレージの無駄の防止)
  • 非現行バージョンを92日後に削除(完全なクリーンアップの保証)

両方のルールはバケット内のすべてのオブジェクトに適用され、これはすべてのコンテンツが同じライフサイクルパターンに従う専用のバックアップストレージにとって適切です。

現行バージョンの7日間の有効期限は、定期的なバックアップシナリオには適切に見えますが、特定の保持要件(より長い保持が必要な場合は15日または30日)に基づいて調整できます。

お客様の実装は完了しており、S3ライフサイクル管理に関するAWSのベストプラクティスに従っています。


より効率的な方法があることがわかりました。

CloudFront > ディストリビューション > ディストリビューションの作成 > オリジンの指定 > オリジンの種類 > 「その他」を選択 公開解決可能な URL を使用して、任意の AWS または非 AWS オリジンを参照します。

CloudFront > ディストリビューション > ディストリビューションの作成 > オリジンの指定 > オリジン > カスタムオリジン > ドメイン名を入力 (例: subdomain.yourdomain.tld)

CloudFront > ディストリビューション > ディストリビューションの作成 > オリジンの指定 > 設定 > キャッシュ設定 > 「キャッシュ設定をカスタマイズ」を選択

CloudFront > ディストリビューション > ディストリビューションの作成 > オリジンの指定 > 設定 > キャッシュ設定 > キャッシュポリシー > ドロップダウンから「CachingOptimized」を選択 > 「次へ」を選択

セキュリティ設定に進み、元のステップ 10 ~ 14 は無視します。

CloudFront > ディストリビューション > ディストリビューションの作成 > 確認と作成 > 「ディストリビューションの作成」を選択