我将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}"
}
我得到的错误是:
我试图像上面那样对disk_id进行硬编码或使用一个变量。对于变量,我不知道它是否已返回或存在,因此可能是新问题。
答案 0 :(得分: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}"
}
如果您使用的是两个磁盘(一个用于上载,一个cahce),请使用相同的代码,但将默认值设置为cache_disk_path =“ / dev / sdc”
答案 1 :(得分: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中的值传递似乎无效。