1

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

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

但是,一旦创建了网关,我就会尝试使用 Terraform 添加磁盘,并且似乎无法让代码工作,或者很可能不明白如何让它工作。

尝试使用 aws_storagegateway_cache 资源,但我在 disk_id 上收到错误,并且不知道如何让它从网关创建的代码中返回。

可能有人有一个工作示例,说明如何在创建网关后使用 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}"
}

我得到的错误是:

  • aws_storagegateway_cache.sgwdisk:添加 Storage Gateway 缓存时出错:InvalidGatewayRequestException:指定的磁盘不存在。状态码:400,请求ID:fda602fd-a47e-11e8-a1f4-b383e2e2e2f6

我试图像上面那样对 disk_id 进行硬编码或使用变量。在变量上,我不知道它是返回还是存在,所以这可能是新问题。

4

3 回答 3

2

在创建资源“aws_storagegateway_cache”之前,使用 data 获取磁盘 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}"
        }

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

于 2018-11-19T08:57:14.427 回答
0

如果您使用 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”。但是,将“1”作为 Terraform 中的值传递似乎不起作用。

于 2018-10-08T21:02:09.463 回答
0

这也可以:

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
}
于 2022-02-10T14:40:48.820 回答