![](/img/trans.png)
[英]Problems creating simple terraform script to spin up an AWS EC2 instance
[英]Spin an AWS EC2 Spot instance with some validity using Terraform
我正在尝试旋转具有一定有效性的AWS EC2 Spot实例(例如,创建的Spot应该可以访问2小时或3小时,并且Spot实例应该终止)。 我可以使用以下代码旋转竞价型实例,但无法设置创建的竞价型实例的持续时间/有效性。
我正在共享我的Terraform代码(main.tf和variable.tf),通过它们尝试旋转竞价型实例。 我尝试使用main.tf文件中的以下两行代码来设置Spot实例的到期时间,但没有用
valid_until = "${var.spot_instance_validity}"
terminate_instances_with_expiration = true
对于valid_until
,我无法提供RFC3339格式或YYYY-MM-DDTHH:MM:SSZ-从旋转Spot实例开始计算2小时。 所以从我的main.tf文件中删除了以上两行代码
以下是用于旋转竞价型实例的my main.tf文件
provider "aws" {
access_key = "${var.access_key}"
secret_key = "${var.secret_key}"
region = "${var.region}"
}
resource "aws_spot_instance_request" "dev-spot" {
ami = "${var.ami_web}"
instance_type = "t3.medium"
subnet_id = "subnet-xxxxxx"
associate_public_ip_address = "true"
key_name = "${var.key_name}"
vpc_security_group_ids = ["sg-xxxxxxx"]
spot_price = "${var.linux_spot_price}"
wait_for_fulfillment = "${var.wait_for_fulfillment}"
spot_type = "${var.spot_type}"
instance_interruption_behaviour = "${var.instance_interruption_behaviour}"
block_duration_minutes = "${var.block_duration_minutes}"
tags = {
Name = "dev-spot"
}
}
下面是变量文件“ variable.tf”
variable "access_key" {
default = ""
}
variable "secret_key" {
default = ""
}
variable "region" {
default = "us-west-1"
}
variable "key_name" {
default = "win-key"
}
variable "windows_spot_price" {
type = "string"
default = "0.0309"
}
variable "linux_spot_price" {
type = "string"
default = "0.0125"
}
variable "wait_for_fulfillment" {
default = false
}
variable "spot_type" {
type = "string"
default = "one-time"
}
variable "instance_interruption_behaviour" {
type = "string"
default = "terminate"
}
variable "block_duration_minutes" {
type = "string"
default = "0"
}
variable "ami_web" {
default = "ami-xxxxxxxxxxxx"
}
创建的Spot实例的有效性应设置为1小时或2小时,我可以从variable.tf文件中调用它,因此Spot实例应在1小时或2小时后终止(或应该取消Spot实例请求)
有什么办法可以使AWS ec2 Spot实例到期吗?
无法安排实例终止。 但是,您可以使用CloudWatch Events和Lambda创建自己的实例终止逻辑。 您需要根据变量(valid_until)在Terraform中创建一个计划事件 ,该事件将调用Lambda函数来终止实例。
AWS还提供了一个名为Instance Scheduler的解决方案。 您只需将标签附加到竞价型实例即可创建开始/停止时间表。 但是,在这种情况下,应更改实例停止行为(默认情况下为关机)以终止。 因此,实例将在停止时终止。 这可以通过在Terraform中使用aws_instance.instance_initiated_shutdown_behavior参数来实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.