我需要使用 Terraform 导入事件源映射,文档显示:
terraform 导入 aws_lambda_event_source_mapping.event_source_mapping 12345kxodurf3443
我在任何地方都找不到我的资源的 UUID,它在哪里?
谢谢
遇到一个问题,我有一个空资源,该资源运行脚本来创建一段配置。整个 TF 需要在帐户的每个区域中运行,因此我已将所有内容设置为使用区域作为变量。
这导致 terraform 在区域 2 中创建新配置之前销毁区域 1 中的原始空资源配置。其他 terraform 资源仅在区域 2 中创建新资源,并将区域 1 中的资源保留在原处。有没有办法让空资源的行为与其他资源相同?
resource "null_resource" "config-s3-remediation" {
triggers = {
account_name = var.account_name
region = var.region
}
depends_on = [
aws_config_config_rule.s3_access_logging_rule,
aws_ssm_document.s3_access_logging_ssm
]
provisioner "local-exec" {
command = "python3 ${path.module}/remediation_config.py add ${self.triggers.region}
}
provisioner "local-exec" {
when = destroy
command = "python3 ${path.module}/remediation_config.py remove ${self.triggers.region}"
}
}
Run Code Online (Sandbox Code Playgroud) 我通过for_each在 Terraform 中使用创建了多个子网 [私有/公共],如下所示
resource "aws_subnet" "public" {
for_each = toset(data.aws_availability_zones.azs.names)
vpc_id = aws_vpc.vpc.id
cidr_block = cidrsubnet(var.private_ranges,1 ,index(data.aws_availability_zones.azs.names, each.value))
availability_zone = each.value
map_public_ip_on_launch = true
tags = merge(local.common_tags, map("Name", join("-", [local.prefix, index(data.aws_availability_zones.azs.names,each.value )]),
"Availibility Zone", each.value, "Type", "Public"))
lifecycle {
prevent_destroy = false
}
}
resource "aws_subnet" "private" {
for_each = toset(data.aws_availability_zones.azs.names)
vpc_id = aws_vpc.vpc.id
cidr_block = cidrsubnet(var.private_ranges,1 ,index(data.aws_availability_zones.azs.names, each.value))
availability_zone = each.value
tags = merge(local.common_tags, map("Name", join("-", [local.prefix, index(data.aws_availability_zones.azs.names,each.value )]),
"Availibility Zone", each.value, "Type", "Private"))
lifecycle { …Run Code Online (Sandbox Code Playgroud) 使用 Terraform 11.14 我的 terraform 文件包含以下资源:
resource "google_storage_bucket" "assets-bucket" {
name = "${local.assets_bucket_name}"
storage_class = "MULTI_REGIONAL"
force_destroy = true
}
Run Code Online (Sandbox Code Playgroud)
并且这个存储桶已经被创建(它存在于基于先前的基础设施上apply)但是状态(远程上gcs)不一致并且似乎不包括这个存储桶。结果,terraform apply失败并出现以下错误:
google_storage_bucket.assets-bucket: googleapi: Error 409: You already own this bucket. Please select another name., conflict
Run Code Online (Sandbox Code Playgroud)
我该如何协调国家?(terraform refresh没有帮助)
编辑
根据 @ydaetskcoR 的回应,我做了:
terraform import module.bf-nathan.google_storage_bucket.assets-bucket my-bucket
Run Code Online (Sandbox Code Playgroud)
输出:
module.bf-nathan.google_storage_bucket.assets-bucket: Importing from ID "my-bucket"...
module.bf-nathan.google_storage_bucket.assets-bucket: Import complete! Imported google_storage_bucket (ID: next-assets-bf-nathan-botfront-cloud)
module.bf-nathan.google_storage_bucket.assets-bucket: Refreshing state... (ID: next-assets-bf-nathan-botfront-cloud)
Error: module.bf-nathan.provider.kubernetes: 1:11: unknown variable accessed: var.cluster_ip in: …Run Code Online (Sandbox Code Playgroud) 这是 TF V0.12 中的内容(如果有帮助的话) 在一个目录中,我有数量可变的单行文件。
我需要以某种方式读取它们的内容,将它们与换行符连接起来,并将结果存储到单个变量中。(不是字符串数组)我知道我可以使用以下方法获取要读取的文件列表:
locals{
my files=tolist(fileset("${var.file_path}", "**")) }
Run Code Online (Sandbox Code Playgroud)
如果我只有一个文件,我知道我可以使用以下方式读取内容
locals {
file_value=file("${var.file_path}\\${local.my_files}") # if there was only a single file
}
Run Code Online (Sandbox Code Playgroud)
但我的大脑只是变成了棉絮,我如何才能进行多个读取,我觉得我应该在空资源中使用计数和连接,但似乎无法解决逻辑。这是正确的道路还是我应该怎么做?
我有一个地图变量,我想将其简化为单个字符串。
我的变量看起来像:
my_map = {
key1 = "value1"
key2 = "value2"
key3 = "value3"
}
Run Code Online (Sandbox Code Playgroud)
我希望将其减少到key1:value1,key2:value2,key3:value3。
检查 terraform 文档,我找不到任何缩小地图的功能,但可能我遗漏了一些东西。
任何帮助,将不胜感激。
我想知道是否有人可以通过 GCP 中存在的数据存储来处理 GCS 上的 Terraform 锁定状态文件,就像在 AWS 中使用 S3 后端和 DynamoDB 表一样。
如果是这样,请举例说明如何操作。
地形版本:0.12.24
这真的很奇怪,因为我TF_VAR_之前使用过替换语法并且效果很好。
提供商.tf
# Configure the AWS Provider
provider "aws" {
version = "~> 2.0"
region = "ap-southeast-2"
access_key = var.aws_access_key_id
secret_key = var.aws_secret_access_key
}
Run Code Online (Sandbox Code Playgroud)
变量.tf
variable "aws_access_key_id" {
description = "Access Key for AWS IAM User"
}
variable "aws_secret_access_key" {
description = "Secret Access Key for AWS IAM User"
}
variable "terraform_cloud_token" {
description = "Token used to log into Terraform Cloud via the CLI"
}
Run Code Online (Sandbox Code Playgroud)
terraform 云的backend.tf
terraform {
backend "remote" {
organization = …Run Code Online (Sandbox Code Playgroud) 我正在尝试找到一种方法来改善 GCP 中的基础设施即代码情况。我的希望是我可以
我希望通过在部署中添加标签,我可以让它自动将这些标签应用到它创建的任何计算资源或负载均衡器。这样,terraform 就可以创建适用于这些标签的防火墙规则。
我是否以错误的方式处理这个问题,或者有什么办法可以做到这一点?这既涉及自动化防火墙规则管理,也涉及清理可能干扰操作的不必要规则。
yaml google-kubernetes-engine terraform kubectl infrastructure-as-code
我使用 Terraform 建立了基础设施,包括批处理服务作业队列、计算环境和作业定义。
对 Terraform 进行更改后,我运行terraform apply并收到以下错误:
Error: error deleting Batch Compute Environment (data-load): : Cannot delete, found existing JobQueue relationship
status code: 400, request id: 25449415-9c36-4748-95e6-925647bd716a
Run Code Online (Sandbox Code Playgroud)
作业队列中没有作业。我假设它将与与批处理服务相关的其他资源一起被删除/替换,而不是在替换时暂停计算环境的显示。
在过去,我能克服这个问题的唯一方法是破坏我的状态文件并重新开始,但我认为一定有更好的方法。我怎样才能解决这个问题?