2023/2 本ブログをサーバレス化する際にやらかして学んだもう1つの事
サーバーレスへの移行で失敗したことについて学んだことを紹介しましたが、もう1つ学んだことがあります。
それはS3のバージョニングは大事だということです。
S3のバージョニングとは
バージョニングとは、S3にアップロードしたファイルを上書きしたり削除しても、過去のファイルはバックアップされており元に戻すことができるという設定です。
図のように最初にアップロードした時は同じですが、削除しても過去ファイルが履歴的に残っていることがわかっていただけると思います。
デフォルトでは無効になっているので有効化しなければいけませんが、バックアップ処理を自前で実装する必要がなく、自動でバックアップしてくれるので便利で安心です。
今回の失敗について
全ての記事画像ファイルが消えてしまうという やらかしをしてしまいましたが、 移行元のサーバーを削除する前でしたので、サルベージすることができました。
しかし、サーバーを消した後に発覚していたら、、、
そう思うと、S3バージョニングを活用しておくことは、大事なことであるとご理解いただけると思います。
CDKでのバージョニング設定
CDKでバージョニングを有効するために、以下のように有効化とライフサイクルの設定を行いました。
const bucket = new Bucket(scope, bucketName, {
// バージョニング有効
versioned: true,
});
// 記事画像(古いバージョンは念の為1年残す)
bucket.addLifecycleRule({
prefix: 'public_read/images/articles/',
noncurrentVersionExpiration: Duration.days(365),
abortIncompleteMultipartUploadAfter: Duration.days(1),
});
バージョニングでバックアップされたファイルにも同等の料金がかかります。 今回はあくまで誤操作時のサルベージ目的として、S3費用を抑えるよう1年限定で過去画像を残すようにしました。
最後に
できるだけシンプルな構成にしようとあまり何も考えずに構成しましたが、バックアップの重要性を痛感しました。このやらかしを参考に、皆様がS3のバージョニングの是非を一考されたり、活用する後押しになればと思います。