S3のバージョニングの機能は知っていたのですが、
古いバージョンをリストアする方法をちゃんと調べていませんでした。
バックアップとっててリストアできないなんて、最低ですね。
バージョニングが有効なバケットを作成する
まずはバージョニングが有効なS3バケットを作成しましょう。
今回もTerraformでお手軽に作っていきます。
1
2
3
4
5
6
7
| resource "aws_s3_bucket" "version-test" {
bucket = "gside-version-test"
acl = "private"
versioning {
enabled = true
}
}
|
ファイルをアップロードする。
適当なファイルを作ってS3にアップします。
1
2
| $ echo "hoge" > ~/hoge.txt
$ aws s3 cp ~/hoge.txt s3://gside-version-test/
|
aws s3api コマンドでバージョン情報を見てみます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| $ aws s3api list-object-versions --bucket gside-version-test
{
"Versions": [
{
"VersionId": "i4ngO7osXqV4GrFoXpHzblnWD7y3jIRa",
"Owner": {
"DisplayName": "foobar",
"ID": "2614e1fe5abbd1f85bc3c9b930b22f8f4f6eced59986b995b5e38cf655d7a7e0"
},
"LastModified": "2016-12-11T13:16:50.000Z",
"StorageClass": "STANDARD",
"ETag": "\"c59548c3c576228486a1f0037eb16a1b\"",
"Key": "hoge.txt",
"IsLatest": true,
"Size": 5
}
]
}
|
ファイルを更新して、バージョン情報を見てみます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| $ echo "fuga" > ~/hoge.txt
$ aws s3 cp ~/hoge.txt s3://gside-version-test/
$ aws s3api list-object-versions --bucket gside-version-test
{
"Versions": [
{
"LastModified": "2016-12-11T13:18:01.000Z",
"VersionId": "URhALfhfq69Zdqoh_z.b6j4ac5XR43oK",
"ETag": "\"11c9c5d7c37e614b4d99eea11672227e\"",
"StorageClass": "STANDARD",
"Key": "hoge.txt",
"Owner": {
"DisplayName": "foobar",
"ID": "2614e1fe5abbd1f85bc3c9b930b22f8f4f6eced59986b995b5e38cf655d7a7e0"
},
"IsLatest": true,
"Size": 5
},
{
"LastModified": "2016-12-11T13:16:50.000Z",
"VersionId": "i4ngO7osXqV4GrFoXpHzblnWD7y3jIRa",
"ETag": "\"c59548c3c576228486a1f0037eb16a1b\"",
"StorageClass": "STANDARD",
"Key": "hoge.txt",
"Owner": {
"DisplayName": "foobar",
"ID": "2614e1fe5abbd1f85bc3c9b930b22f8f4f6eced59986b995b5e38cf655d7a7e0"
},
"IsLatest": false,
"Size": 5
}
]
}
|
ファイルをリストアする。
ファイルをアップロードするにはaws s3api get-objectコマンドを利用して、上記のversion-idを指定してファイルを取得します。
1
2
3
4
5
6
7
8
9
10
11
12
| $ aws s3api get-object --bucket gside-version-test --key hoge.txt --version-id i4ngO7osXqV4GrFoXpHzblnWD7y3jIRa /tmp/hoge.txt
{
"AcceptRanges": "bytes",
"ContentType": "text/plain",
"LastModified": "Sun, 11 Dec 2016 13:16:50 GMT",
"ContentLength": 5,
"VersionId": "i4ngO7osXqV4GrFoXpHzblnWD7y3jIRa",
"ETag": "\"c59548c3c576228486a1f0037eb16a1b\"",
"Metadata": {}
}
$ cat /tmp/hoge.txt
hoge
|
まとめ
復旧するファイルが少ない場合は、コマンドラインで淡々とリストアする方法で行けそうです。
ファイルが多くなると、もうちょっと工夫が必要そうですね。
ちなみにファイルが消した場合でも aws s3api list-object-versions の情報は消えないので、復旧することができます。