MinioのバックエンドをAzure Blob Storageに移行する作業メモ
ご注意
- Azure Blob Storage は S3 互換ではありません
- Multipart-upload には対応できません。(要するに Mastodon には使えません)
はじめに
移行の動機は以下の通り
- Mastodon の運用に使っている Minio(自鯖)が存在しているがクラウドに出したくなった
- 普通に考えると Wasabi あたりに移行するところだが、Azure の無料枠があったので Azure Blob Storage をバックエンドにしたかった
設計
- Azule Blob Storage は S3 API でアクセスできないので、ゲートウェイを設置する必要がある。
- Minio を Azure gateway モードで動かすことで実現できる。
事前作業
minio のセットアップ
https://az.minio.io/ に従うと、Azure 上に VM を立てて、その上で Minio を動かす手順になっていますが、
そんなことをしたら課金額が大変な事になってしまうので、VPS で動かすことにします。
https://docs.min.io/docs/minio-gateway-for-azure.html こちらの手順では Docker を使っていますが、
Minio はそもそもバイナリ 1 個なので docker にする必要もないので、直接いれることにします。
・バイナリをダウンロード ( wget https://dl.min.io/server/minio/release/linux-amd64/minio
)
・実行権限付与 ( chmod +x minio
)
Azure Blob Container 側の設定
ポータルから実施した。
IAM でストレージ管理者権限をつけておくこと
ストレージの作成と、コンテナの作成はポータルが十分にわかりやすいので省略。
移行作業
minio を停止
バックアップ中にファイルが増えるとそのファイルを転送するのが困難なので停止。
Minio 自体を止めるとバックアップできないのでここは悩みどころ。外部からのアクセスは停止しつつ、
内部 IP にたいしてバックアップするようにして回避したが、よく考えれば書込アクセスを停止すればよいので、
HTTP PUT,POST,PATCH,UPDATE あたりを拒否すればよかったのではないかとも思う。
バックアップ
mc mirror を使った (mc = minio client)
Azure に転送
転送方法は複数考えられる。
Azure Blob Storage が S3 互換のストレージからのデータコピーが可能なのでそれを使う(今回未使用)
Microsoft Azure Storage Explorer を使う https://azure.microsoft.com/ja-jp/features/storage-explorer/
AzCopy を使う
今回は Azure Storage Explorer を使用した。
ここでの注意点は、兎にも角にも、azcopy を裏で使うツールを使うこと。Azure Storage Explorer を使用すると GUI で
操作できて楽だが、必ずメニューの Preview -> Use Azcopy for improved upload and download にチェックを入れること
(起動時に、黄色いバーで有効にするか聞いてくるのでそこで Enable ボタン を押しても可能)
Mastodon 設定変更
(本筋と関係ない手順です)
env.production
で、AWS_ACCESS_KEY_ID =ストレージ名、AWS_SECRET_ACCESS_KEY =キー をセットする。
Minio 再開
転送完了後、minio を再開する。
アクセスポリシー設定
minio client をダウンロードしておく
# azuregw は自分の好きな名前で良い
mc config host add azuregw http://[server] storage名 キー
# azure blob storageを使う場合、download以外の値を指定すると Not implementedになる
mc policy --recursive download azuregw/コンテナ名/
トラブル事例
権限がつかない
ストレージ管理者権限が IAM についていない場合にこうなりました。
MinIO へのアクセスが minio/ にリダイレクトされる
アクセスポリシーが設定されていないので認証が必要 →minio ブラウザにリダイレクトされる。
Discussion