CloudinaryのデータをAmazon S3に自動バックアップする
画像配信・変換SaaSのCloudinaryでは、投稿された画像を自前のストレージにバックアップすることが可能です。
この記事では機能概要、実際の設定方法を紹介します。
機能概要
Cloudinaryに投稿された画像のバックアップを、自動かつ非同期で外部ストレージに保存します。
保存先は Amazon S3 もしくは Google Cloud Storage が選択できます。
設定方法
今回はS3を対象に試します。
Amazon S3バケットの設定
AWSで保存先バケットを作成します。
バケット命名のルールがあります。リージョンはどこでも構いません。
例: cloudinary-backup-classmethod-us-east-2
バケットポリシーを設定します。232482882421
はCloudinaryアカウントを指すため固定値です。
{
"Version": "2012-10-17",
"Id": "CloudinaryOriginPolicyId",
"Statement": [
{
"Sid": "CloudinaryBackupPolicySid",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::232482882421:root"
},
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::{YOUR_BUCKET_NAME}/*",
"arn:aws:s3:::{YOUR_BUCKET_NAME}"
]
}
]
}
作成したバケットに、下記オブジェクトを作成します。
.wellknown/cloudinary/{CLOUDINARY_CLOUD_NAME}
このファイルを追加することで、指定したバケットへのアクセス権があること、また Cloudinaryがバケットの中身にアクセス/変更することを許可します。
Cloudinary側の設定
アップロード&バックアップ設定ページに移動します。
デフォルトでは、バックアップが [Disabled] になっていますので [Enabled] に変更します。
バケット名を入力します。
これで設定を [Save] すると、今後登録されるアセットがバックアップされるようになります。設定以前のデータをバックアップしたい場合、[Request initial backup] を実行してください。
生成されたバックアップデータをみてみる
ほとんどタイムラグもなく、S3にバックアップファイルが送信されていました。
ただし、ファイルロケーションがオリジン(Cloudinary)とは多少異なるようです。
例えばCloudinaryに登録した下記の画像パスがあるとします。
/image/upload/v1738147895/2025/01/29/hpmecbf7mustk4kw8j4y.png
パス内の各プロパティ
v1738147895
... UNIXタイムスタンプによる画像のバージョン/2025/01/29/
... 画像を配置するディレクトリ。私の場合は投稿日でディレクトリを分割するようにしていますが、不要な場合は消すこともできますhpmecbf7mustk4kw8j4y.png
Cloudinary側で生成した画像のユニークファイル名
上記ファイルがS3に保存される場合、下記のようなパスに変わります。
/res/{CLOUDINARY_CLOUD_NAME}/image/upload/2025/01/29/hpmecbf7mustk4kw8j4y/1738147895.png
このあたりはCloudinary側のpresetなどの設定によっても変わってくるため、バックアップを別サービスに移行する際は注意が必要です。
注意点
利用にあたって他にもいくつか注意事項があります。
- S3バケットで利用非推奨の機能 ... バケットにはライフサイクルポリシー (アーカイブ/削除)、バージョン管理、オブジェクトロックを設定しないでください、とドキュメントには記載されています
- バックアップのトリガータイミング ... アセット自体が新しいバージョンに置き換えられた時に行われます。タグやメタデータの更新などではバックアップはトリガーされません
- 変換後の画像 ... 元のアセットのみバックアップが保持され、派生 (変換) バージョンはバックアップとして保持されません
- バックアップの削除 ... S3側のファイルは自分で削除できますが、別途Cloudinary側でバックアップのデータベースレコードを保持しており、そちらを更新するにはサポートチームに連絡する必要があります
最後に
Cloudinary側からAmazon S3へバックアップを行う方法について紹介しました。
ClassmethodではCloudinaryの契約・導入支援を行っています。ご興味のある方はフォームよりお問い合わせください。