Amazon ElastiCache for RedisはAWSが提供するRedis互換の高性能なインメモリデータストアサービスです。
この記事では、Amazon ElastiCache for Redisのバックアップ・リストアの方法を Terraform の設定を交えてご紹介します。
バックアップ
Terraform にて Amazon ElastiCache for Redis を構築する例を交えてバックアップ方法について記載します。
クラスターモード無効のレプリケーショングループで作成します。
以下は Terraform の例です。
resource "aws_elasticache_replication_group" "sample" {
replication_group_id = "${var.base_name}-sample"
description = "Redis cluster for ${var.base_name}-sample."
automatic_failover_enabled = var.sample_elasticache_param["automatic_failover_enabled"]
engine = "redis"
engine_version = var.sample_elasticache_param["engine_version"]
multi_az_enabled = var.sample_elasticache_param["multi_az_enabled"]
node_type = var.sample_elasticache_param["node_type"]
num_cache_clusters = var.sample_elasticache_param["number_cache_clusters"]
parameter_group_name = aws_elasticache_parameter_group.sample.id
subnet_group_name = aws_elasticache_subnet_group.sample.name
security_group_ids = [aws_security_group.sample_elasticache.id]
port = 6379
maintenance_window = var.sample_elasticache_param["maintenance_window"]
snapshot_window = var.sample_elasticache_param["snapshot_window"]
snapshot_retention_limit = 35
final_snapshot_identifier = "${var.base_name}-sample-final-snapshot"
apply_immediately = false
auto_minor_version_upgrade = true
at_rest_encryption_enabled = true
transit_encryption_enabled = true
kms_key_id = aws_kms_key.sample_elasticache.arn
auth_token = var.sample_elasticache_param["auth_token"]
lifecycle {
ignore_changes = [
number_cache_clusters,
apply_immediately
]
}
tags = merge(tomap({ "Service" = "sample" }), tomap({ "Name" = "${var.base_name}-sample" }))
}
定期的にスナップショットを取得する
aws_elasticache_replication_group
リソースに対して以下の設定を行なってください。
snapshot_retention_limit
- バックアップの保存期間です(単位:日)
- このパラメータが 0 設定されている場合、日次自動バックアップがオフになります
snapshot_window
- 自動バックアップが実行される日々の時間範囲です
snapshot_retention_limit
の設定が有効であることが前提となります- UTC で
15:00-16:00
のような形式で設定します
以上の設定で日次バックアップが取得されます。( ElastiCache コンソール -> ナビゲーション「バックアップ」にあります。「フィルタ」に注意してください。)
ただし、 terraform destroy
などにより ElastiCache を削除してしまった場合、 スナップショットも削除されます のでご注意ください。
削除時にスナップショットを取得する
前節で紹介したスナップショットの取得では、 ElastiCache を削除してしまった場合スナップショットも削除されます 。
ここでは、 ElastiCache を削除時に自動バックアップが走る設定をご紹介します。
aws_elasticache_replication_group
リソースに対して以下の設定を行なってください。
final_snapshot_identifier
- ElastiCache が削除されたときに作成されるスナップショットの名前です
- この値が有効であることで最終的なスナップショットが作成されます
手動でスナップショットを取得する
マネージメントコンソールにて以下の手順でスナップショットを取得します。( 参考 )
- AWS Management Console にサインインして、ElastiCache コンソール を開きます
- ナビゲーションペインで、[Redis] を選択すると、[Redis clusters] 画面が表示されます
- バックアップする Redis クラスターの名前の左にあるチェックボックスをオンにします
- [Backup] を選択します
- [Create Backup] ダイアログで、[Backup Name] ボックスにバックアップの名前を入力します
- [Create Backup] を選択します
- クラスターのステータスが snapshotting に変わり、ステータスが [available] に戻ると、バックアップの作成が完了です
リストア
ElastiCache は稼働中のサービスにスナップショットをリストアすることはできません 。
リストアする際は再構築することが前提になります。
Terraformでリストア
Terraform での設定例は以下のようになります。
resource "aws_elasticache_replication_group" "sample" {
...省略
final_snapshot_identifier = "${var.base_name}-sample-final-snapshot"
snapshot_name = "${var.base_name}-sample-final-snapshot"
lifecycle {
ignore_changes = [
...省略
"final_snapshot_identifier",
"snapshot_name",
]
}
...省略
}
aws_elasticache_replication_group
リソースに対して以下の設定を行なってください。
snapshot_name
- スナップショットから ElastiCache を作成する際にスナップショットの名前を設定します
lifecycle
->ignore_changes
final_snapshot_identifier
とsnapshot_name
を設定しますterraform apply
で再構築完了後にsnapshot_name
を削除しましょう
手動でリストア
マネージメントコンソールにて以下の手順でリストア・復元を行います。( 参考 )
- AWS Management Console にサインインして、 ElastiCache コンソール を開きます
- ナビゲーションペインで、[Backups] を選択します
- バックアップのリストで、復元元のバックアップ名の左にあるチェックボックスをオンにします
- [復元] を選択します
- [Restore Cluster] ダイアログボックス、および、すべての [Required] フィールドとデフォルト値から変更するその他のフィールドに入力します
- すべての設定が正しいことを確認したら、[作成] を選択します