🐼
「このインスタンスは3秒後に消滅する」
何の役に立つのか分からんが、Terraformを使ったお遊び半分で。
- インスタンスを1つ用意する
- インスタンスは時限式で、作って3時間後にTerminateされる
という条件のEC2インスタンスを作ってみた。
前提として、IAM role instance_killer
を以下のポリシーで作っておく必要がある。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:TerminateInstances",
"Resource": "arn:aws:ec2:<region>:<account-id>:instance/*"
}
]
}
また、Terraformを実行するプロファイルはこのRoleをPassRoleする権限が必要。
provider "aws" {}
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~>5.0"
}
}
}
data "aws_caller_identity" "self" { }
data "aws_ami" "arch" {
owners = ["647457786197"]
filter {
name = "name"
values = ["arch-linux-ec2-hvm-????.??.??.x86_64-ebs"]
}
}
variable "lifespan" {
type = string
default = "3h"
}
resource "aws_instance" "workspace" {
ami = data.aws_ami.arch.id
instance_type = "t3.micro"
}
resource "aws_scheduler_schedule" "timeout_instance" {
target {
arn = "arn:aws:scheduler:::aws-sdk:ec2:terminateInstances"
role_arn = "arn:aws:iam::${data.aws_caller_identity.self.account_id}:role/instance_killer"
input = jsonencode({
"InstanceIds": [aws_instance.workspace.id]
})
}
flexible_time_window {
mode = "OFF"
}
schedule_expression = "at(${formatdate("YYYY-MM-DD'T'hh:mm:ss", timeadd(timestamp(), var.lifespan))})"
}
無駄に寿命を変数にしてるので、
$ terraform apply -var "lifespan=3m"
みたいにいじれる。
実用性は謎。
Discussion