繁体   English   中英

使用Terraform旋转具有一定有效性的AWS EC2 Spot实例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM