Terraform - 创建 EBS 的快照,然后将快照转换为 EBS 并附加到 EC2

Posted

技术标签:

【中文标题】Terraform - 创建 EBS 的快照,然后将快照转换为 EBS 并附加到 EC2【英文标题】:Terraform - Create Snapshot of EBS and then convert Snapshot to EBS and attach to an EC2 【发布时间】:2018-09-04 10:02:09 【问题描述】:

是否可以创建 EBS 卷的快照、获取该快照并将其转换回 EBS 卷并通过 Terraform 将其附加到 EC2?

我目前正在考虑在 AWS 中自动化我们的生产和测试环境,因此它们是相同的,我发现使用 Terraform 非常有用,但我找不到任何关于如何实现这一点的文档。

【问题讨论】:

你能说清楚一点吗? @Nihal 抱歉,让我快速概述一下我的要求,我目前有一个由 SQL Server、终端服务器和应用程序服务器组成的生产环境,我们目前手动克隆 Prod环境,所以我想知道是否可以使用 Terraform 自动生成 Prod EBS 卷的快照,然后将快照转换为 EBS 卷,然后附加到空 EC2 Shell,如果您需要其他任何内容,请告诉我。 【参考方案1】:

您可以使用 aws_ebs_volumeaws_volume_attachment 资源从快照创建 EBS 卷并将其附加到实例,而不会有太大困难。

您还可以使用aws_ebs_snapshot 资源创建快照或使用aws_ebs_snapshot 数据源动态获取快照ID。

一个简单的例子可能是这样的:

data "aws_ebs_volume" "production_volume" 
  most_recent = true

  filter 
    name   = "volume-type"
    values = ["gp2"]
  

  filter 
    name   = "tag:Name"
    values = ["Production"]
  


resource "aws_ebs_snapshot" "production_snapshot" 
  volume_id = "$data.aws_ebs_volume.prod_volume.id"

  tags 
    Name = "Production"
  


resource "aws_ebs_volume" "from_production_snapshot" 
  availability_zone = "us-west-2a"
  snapshot_id       = "$aws_ebs_snapshot.production_snapshot.id"
  size              = 40

  tags 
    Name = "Non-Production"
  


resource "aws_instance" "non_production" 
  ami               = "ami-21f78e11"
  availability_zone = "us-west-2a"
  instance_type     = "t2.micro"

  tags 
    Name = "Non-Production"
  


resource "aws_volume_attachment" "non_production" 
  device_name = "/dev/xvdf"
  volume_id   = "$aws_ebs_volume.from_production_snapshot.id"
  instance_id = "$aws_instance.non_production.id"

【讨论】:

谢谢你,只是一个简单的问题,我如何引用现有的 EBS 卷,它是通过卷 ID 吗?谢谢 答案中给出的示例从标记为Name = "Production" 的卷创建快照。显然,您需要更改它以便正确标记您的卷。或者您可以跳过 aws_ebs_volume 数据源,而只是在其下方的 aws_ebs_snapshot 资源中硬编码快照 ID。 嗨@Muhammed_Khan 如果这个或任何答案已经解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。

以上是关于Terraform - 创建 EBS 的快照,然后将快照转换为 EBS 并附加到 EC2的主要内容,如果未能解决你的问题,请参考以下文章

使用 Cloud Watch 和 Terraform 获取计划的 EBS 快照

如果找不到要从中恢复的快照,如何在 terraform 中创建 ebs 卷

从快照重建现有的 EC2 实例?

Terraform - 在可用时使用 rds 快照

利用lambda函数自动创建EBS快照和删除快照

Amazon AMI 和 EBS 快照有啥区别