在使用 Terraform 和 AWS Storage Gateway 磁盘时遇到问题

Having trouble with Terraform and AWS Storage Gateway disks

我正在将 Terraform 与 A​​WS 结合使用,并且能够使用 aws_storagegateway_gateway 资源创建 AWS Storage Gateway 文件网关。

网关将创建并且状态将为 'online' 但是控制台中尚未添加缓存磁盘,这是正常的,因为它必须在创建网关后完成。 VM 确实有一个磁盘,可以将其添加到控制台中,并且在控制台中这样做可以完美地工作。

但是,我正在尝试在创建网关后使用 Terraform 添加磁盘,但似乎无法使代码工作,或者很可能不了解如何使其工作。

尝试使用 aws_storagegateway_cache 资源,但我在 disk_id 上遇到错误,并且不知道如何从网关创建代码将其获取到 return。

可能有人有一个工作示例,说明如何在创建网关后使用 Terraform 添加缓存磁盘,或者知道如何获取 disk_id 以便我可以添加它?

添加代码

provider "aws" {
  access_key = "${var.access-key}"
  secret_key = "${var.secret-key}"
  token      = "${var.token}"
  region     = "${var.region}"
}

resource "aws_storagegateway_gateway" "hmsgw" {
  gateway_ip_address = "${var.gateway-ip-address}"
  gateway_name       = "${var.gateway-name}"
  gateway_timezone   = "${var.gateway-timezone}"
  gateway_type       = "${var.gateway-type}"

  smb_active_directory_settings {
    domain_name = "${var.domain-name}"
    username    = "${var.username}"
    password    = "${var.password}"
  }


}

resource "aws_storagegateway_cache" "sgwdisk" {
  disk_id     = "SCSI"
  gateway_arn = "${aws_storagegateway_gateway.hmsgw.arn}"
}

output "gatewayid" {
  value = "${aws_storagegateway_gateway.hmsgw.arn}"
}

我得到的错误是:

我曾尝试像上面那样对 disk_id 进行硬编码或使用变量。关于变量,我不知道它是否被 returned 或存在,所以这可能是问题所在,这是新问题。

如果您使用 AWS cli 运行:aws storagegateway list-local-disks --gateway-arn [your gateway's arn] --region [gateway's region],您将获得包含磁盘 ID 的返回数据。

然后,在您的示例代码中,将 SCSI 替换为 "${gateway_arn}:[diskID from command above]",您的缓存卷将被创建。

不过我注意到一件事 - 当我完成此操作然后尝试再次应用相同的 Terraform 代码时,在某些情况下,即使在我的 Terraform 中有针对性地部署特定资源,它也想重新部署缓存卷,因为 Terraform 检测到磁盘 ID 正在更改为值“1”。然而,在 Terraform 中将“1”作为值传递似乎不起作用。

在创建资源"aws_storagegateway_cache"之前,使用数据获取磁盘ID。我正在使用以下脚本,它工作正常。

   variable "upload_disk_path" {
      default = "/dev/sdb"
    }

   data "aws_storagegateway_local_disk" "upload_disk" {
          disk_path   = "${var.upload_disk_path}"
          gateway_arn = "${aws_storagegateway_gateway.this.arn}"
        }

   resource "aws_storagegateway_upload_buffer" "stg_upload_buffer" {
          disk_id     = "${data.aws_storagegateway_local_disk.upload_disk.disk_id}"
          gateway_arn = "${aws_storagegateway_gateway.this.arn}"
        }

如果您使用两个磁盘(一个用于上传,一个用于存储),请使用相同的代码但设置默认值 cache_disk_path = "/dev/sdc"

这也适用:

variable "disk_path" {
  default = "/dev/sdb"
}

provider "aws" {
  alias  = "primary"
  access_key = var.access-key
  secret_key = var.secret-key
  token      = var.token
  region     = var.region
}

resource "aws_storagegateway_gateway" "hmsgw" {
  gateway_ip_address = var.gateway-ip-address
  gateway_name       = var.gateway-name
  gateway_timezone   = var.gateway-timezone
  gateway_type       = var.gateway-type

  smb_active_directory_settings {
    domain_name = var.domain-name
    username    = var.username
    password    = var.password
  }
}
 
data "aws_storagegateway_local_disk" "sgw_disk" {
  disk_path   = var.disk_path
  gateway_arn = aws_storagegateway_gateway.hmsgw.arn
  provider    = aws.primary
}

resource "aws_storagegateway_cache" "sgw_cache" {
  disk_id     = data.aws_storagegateway_local_disk.sgw_disk.id
  gateway_arn = aws_storagegateway_gateway.hmsgw.arn
  provider    = aws.primary
}