我正在将 Terraform 与 AWS 配合使用,并且能够使用 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:添加存储网关缓存时出错:无效网关请求异常:指定的磁盘不存在。 状态代码:400,请求 ID:FDA602FD-A47E-11E8-A1F4-B383E2E2E2F6
我尝试像上面一样对disk_id进行硬编码或使用变量。在变量上,我不知道它是返回还是存在,所以这可能是问题所在,对此很陌生。
在创建资源"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}"
}
如果您使用两个磁盘(一个用于上传,一个用于 cahce(,请使用相同的代码,但设置默认值 cache_disk_path = "/dev/sdc">
如果您使用 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"作为值似乎不起作用。
这也行得通:
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
}