この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんばんわ。コンサル部の島川です。
EC2のBackupは何かとやっておいたほうが安心だと思います。初期のタイミングのほうが良いということで、今回はTerraformを使ってEC2の作成とAWS Backupの設定を同時にやってみました。なお初期設定のみでリストアについては触れておりません。
Terraformのコード
本来であればec2.tf、backup.tfのようにコードを分けたほうが見やすいですが、同時にやってる感を出すために今回は1つのファイルにまとめました。各セクションに分けて説明します。
main.tf
//----------
//variable
//----------
variable ec2_name {
default = "hoge-server"
}
//----------
//EC2 config
//----------
data aws_ssm_parameter amzn2_ami_latest {
name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
}
module "hoge-server" {
source = "terraform-aws-modules/ec2-instance/aws"
version = "~> 2.0"
name = var.ec2_name
instance_count = 1
ami = data.aws_ssm_parameter.amzn2_ami_latest.value
instance_type = "t3.micro"
key_name = "ec2testkey"
monitoring = false
vpc_security_group_ids = ["sg-***"]
subnet_id = "subnet-***"
//private_ip = ""
ebs_optimized = true
root_block_device = [
{
delete_on_termination = true
encrypted = true
iops = 60
kms_key_id = ""
volume_size = 20
volume_type = "gp2"
},
]
tags = {
Name = var.ec2_name
}
}
//----------
//AWS Backup config
//----------
resource "aws_backup_vault" "this" {
name = var.ec2_name
kms_key_arn = "arn:aws:kms:ap-northeast-1:123456789012:key/***"
}
resource "aws_backup_plan" "this" {
name = format("%s-backup-plan", var.ec2_name)
rule {
rule_name = format("%s-backup-rule", var.ec2_name)
target_vault_name = aws_backup_vault.this.name
schedule = "cron(0 12 * * ? *)"
lifecycle {
delete_after = 7
}
}
}
resource "aws_backup_selection" "this" {
iam_role_arn = "arn:aws:iam::123456789012:role/service-role/AWSBackupDefaultServiceRole"
name = format("%s-backup-selection", var.ec2_name)
plan_id = aws_backup_plan.this.id
resources = [
module.hoge-server.arn.0
]
}
variable
- ec2の名前やbackup planなど複数回使いまわすためここで変数を作成
EC2 config
- セキュリティグループとサブネットは既に作成済みでIDを直接指定
- AMIはパラメータストアから取得
- AmazonLinux2の最新版
- EC2はTerraform Module Registoryのterraform-aws-ec2-instanceを使用
AWS Backup config
- バックアップボールト
- KMSはAWS マネージドキーを指定
- バックアッププラン
- cron式で毎日12:00(UTC)で実行するように設定
- 作成後1週間で有効期限を切れるように設定
- リソースの割り当て
- ロールはデフォルトのものを指定「AWSBackupDefaultServiceRole」
- 作成したEC2を指定(複数のインスタンスを作成した場合は追加する必要あり)
実行
「terraform apply」コマンドで実行します。
作成されました。
さいごに
Terraformで作成することによりBackupの設定をすぐに変更することも可能です。またこれをテンプレートとして使うことでとりあえずBackupしておくが叶えられます。誰かの参考になれば幸いです。