[小ネタ]TerraformでEC2作成とAWS Backupの設定を同時にやってみた
EC2のBackupは何かとやっておいたほうが安心です。TerraformでEC2作成のタイミングでAWS Backupの設定もやってみました。
はじめに
こんばんわ。コンサル部の島川です。
EC2のBackupは何かとやっておいたほうが安心だと思います。初期のタイミングのほうが良いということで、今回はTerraformを使ってEC2の作成とAWS Backupの設定を同時にやってみました。なお初期設定のみでリストアについては触れておりません。
Terraformのコード
本来であればec2.tf、backup.tfのようにコードを分けたほうが見やすいですが、同時にやってる感を出すために今回は1つのファイルにまとめました。各セクションに分けて説明します。
//---------- //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しておくが叶えられます。誰かの参考になれば幸いです。