为什么我的 webapp.sh 不是 运行 并且磁盘没有连接到我的 GCP 实例?
Why does my webapp.sh not run and disk not attach to my GCP instance?
我正在尝试创建一个带有引导磁盘和额外磁盘的 GCP 实例,还尝试使用 shell 脚本文件安装一些软件包。
我已尝试使用 file 配置器将文件传输到实例,但它不起作用(存在超时错误)。附加磁盘也没有附加到实例。
当我删除预配器时,基础架构设置工作正常并且额外的磁盘附加到实例。
main.tf
data "google_compute_zones" "available" {
region = var.gcp_region
project = var.gcp_project
}
#Create boot disk
resource "google_compute_disk" "os-disk" {
name = format("os-disk-%s", var.instance_name)
type = "pd-ssd"
image = var.image
size = var.os_pd_ssd_size
zone = "us-central1-c"
}
#Create attached disk to instance size 30 GB
resource "google_compute_disk" "test-disk" {
name = format("test-disk-%s", var.instance_name)
type = "pd-ssd"
size = var.test_pd_ssd_size
zone = "us-central1-c"
}
#Main test instance
resource "google_compute_instance" "test" {
name = var.instance_name
machine_type = var.machine_type
tags = ["http-server", "https-server"]
zone = "us-central1-c"
boot_disk {
source = google_compute_disk.os-disk.name
auto_delete = false
}
network_interface {
network = "default"
access_config {
// Ephemeral IP
}
}
lifecycle {
ignore_changes = [attached_disk]
}
provisioner "file" {
source = "./scripts/webapp.sh"
destination = "/home/webapp.sh"
}
provisioner "remote-exec" {
inline = [
"chmod +x /home/webapp.sh",
"./webapp.sh",
]
}
}
#Attached additional disk to instance
resource "google_compute_attached_disk" "default" {
disk = google_compute_disk.test-disk.id
instance = google_compute_instance.test.id
}
附加磁盘未附加,webapp.sh 也未传输到实例或在实例上执行。
为什么我的 webapp.sh 没有 运行 并且磁盘没有连接到我的 GCP 实例?
你不需要file或remote-exec provisioner,你可以直接执行webapp.sh 在带有 metadata_startup_script 的实例上如下:
resource "google_compute_instance" "test" {
name = var.instance_name
machine_type = var.machine_type
tags = ["http-server", "https-server"]
zone = "us-central1-c"
boot_disk {
source = google_compute_disk.os-disk.name
auto_delete = false
}
network_interface {
network = "default"
access_config {
// Ephemeral IP
}
}
lifecycle {
ignore_changes = [attached_disk]
}
metadata_startup_script = file("${path.module}/scripts/webapp.sh")
}
Terraform 无法解决 OS 级别的问题,例如安装卷。当您附加一个额外的磁盘时,它作为硬件附加,而不是在 OS 配置中。这就像通过计算机塔内的 SATA 附加一个额外的磁盘。您必须显式 安装 实例 OS 中的磁盘才能被识别。
在此处阅读有关在 GCP 中装载永久性磁盘的更多信息:
https://cloud.google.com/compute/docs/disks/add-persistent-disk
我正在尝试创建一个带有引导磁盘和额外磁盘的 GCP 实例,还尝试使用 shell 脚本文件安装一些软件包。
我已尝试使用 file 配置器将文件传输到实例,但它不起作用(存在超时错误)。附加磁盘也没有附加到实例。
当我删除预配器时,基础架构设置工作正常并且额外的磁盘附加到实例。
main.tf
data "google_compute_zones" "available" {
region = var.gcp_region
project = var.gcp_project
}
#Create boot disk
resource "google_compute_disk" "os-disk" {
name = format("os-disk-%s", var.instance_name)
type = "pd-ssd"
image = var.image
size = var.os_pd_ssd_size
zone = "us-central1-c"
}
#Create attached disk to instance size 30 GB
resource "google_compute_disk" "test-disk" {
name = format("test-disk-%s", var.instance_name)
type = "pd-ssd"
size = var.test_pd_ssd_size
zone = "us-central1-c"
}
#Main test instance
resource "google_compute_instance" "test" {
name = var.instance_name
machine_type = var.machine_type
tags = ["http-server", "https-server"]
zone = "us-central1-c"
boot_disk {
source = google_compute_disk.os-disk.name
auto_delete = false
}
network_interface {
network = "default"
access_config {
// Ephemeral IP
}
}
lifecycle {
ignore_changes = [attached_disk]
}
provisioner "file" {
source = "./scripts/webapp.sh"
destination = "/home/webapp.sh"
}
provisioner "remote-exec" {
inline = [
"chmod +x /home/webapp.sh",
"./webapp.sh",
]
}
}
#Attached additional disk to instance
resource "google_compute_attached_disk" "default" {
disk = google_compute_disk.test-disk.id
instance = google_compute_instance.test.id
}
附加磁盘未附加,webapp.sh 也未传输到实例或在实例上执行。
为什么我的 webapp.sh 没有 运行 并且磁盘没有连接到我的 GCP 实例?
你不需要file或remote-exec provisioner,你可以直接执行webapp.sh 在带有 metadata_startup_script 的实例上如下:
resource "google_compute_instance" "test" {
name = var.instance_name
machine_type = var.machine_type
tags = ["http-server", "https-server"]
zone = "us-central1-c"
boot_disk {
source = google_compute_disk.os-disk.name
auto_delete = false
}
network_interface {
network = "default"
access_config {
// Ephemeral IP
}
}
lifecycle {
ignore_changes = [attached_disk]
}
metadata_startup_script = file("${path.module}/scripts/webapp.sh")
}
Terraform 无法解决 OS 级别的问题,例如安装卷。当您附加一个额外的磁盘时,它作为硬件附加,而不是在 OS 配置中。这就像通过计算机塔内的 SATA 附加一个额外的磁盘。您必须显式 安装 实例 OS 中的磁盘才能被识别。
在此处阅读有关在 GCP 中装载永久性磁盘的更多信息: https://cloud.google.com/compute/docs/disks/add-persistent-disk