我试图hosts在执行时从本地计算机中删除生成的 Ansible 库存文件terraform destroy。
当我运行时,terraform apply我用来provisioner "local-exec"创建hosts文件,稍后由部署期间调用的 ansible playbook 使用。
provisioner "local-exec" {
command = "echo master ansible_host=${element((aws_instance.kubeadm-node.*.public_ip),0)} >> hosts"
}
Run Code Online (Sandbox Code Playgroud)
hosts当我删除所有资源时是否可以确保文件被删除terraform destroy?hosts执行时删除文件的最简单方法是什么terraform destroy?
感谢您的帮助,如果我的解释不够清楚,请告诉我。
我有一组变量terraform.tfvars:
resource_groups = {
cow = {
name = "Cow"
location = "eastus"
},
horse = {
name = "Horse"
location = "eastus"
},
chicken = {
name = "Chicken"
location = "westus2"
},
}
Run Code Online (Sandbox Code Playgroud)
我的main.tf样子是这样的:
...
module "myapp" {
source = "./modules/myapp"
resource_groups = var.resource_groups
}
variable "resource_groups" {}
...
Run Code Online (Sandbox Code Playgroud)
./modules/myapp.main.tf看起来像这样:
module "resource_group" {
source = "../myapp.resource_group"
resource_groups = var.resource_groups
for_each = {
for key, value in try(var.resource_groups, {}) : key => value
if …Run Code Online (Sandbox Code Playgroud) 我正在使用 terraform v1.1.3,每当我运行terraform plan它时,它都会声明我已进行更改,即使本地或远程没有任何更改。例如,如果我立即运行terraform applythen terraform plan,它会声明对象已在 Terraform 之外发生更改,并强制替换我的实例。
# module.database.oci_core_instance.instance[0] has changed
~ resource "oci_core_instance" "minstance" {
+ extended_metadata = {}
id = "ocid1.instance.oc1.me-jeddah-1.anvgkljrnghkmsacizo3ubuejydotfi7qz45if32x2e3b55mhirvrvpiw7nq"
Run Code Online (Sandbox Code Playgroud)
为什么?
resource "oci_core_instance" "instance" {
availability_domain = random_shuffle.compute_ad.result[count.index % length(random_shuffle.compute_ad.result)]
compartment_id = var.compartment_id
shape = var.instance_shape
freeform_tags = var.freeform_tags
shape_config {
memory_in_gbs = 16
ocpus = 1
}
source_details {
source_type = "image"
source_id = lookup(data.oci_core_images.compute_images.images[0], "id")
}
metadata = {
ssh_authorized_keys = file(var.ssh_public_key)
user_data = data.template_cloudinit_config.nodes.rendered
}
count = …Run Code Online (Sandbox Code Playgroud) 我想将 ALB 443 端口设置为具有 Terraform 安全组规则的 EC2 80 端口。
resource "aws_security_group_rule" "allow_https" {
security_group_id = aws_security_group.ec2.id
type = "ingress"
protocol = "tcp"
from_port = 443
to_port = 80
source_security_group_id = data.aws_ssm_parameter.alb.value
}
Run Code Online (Sandbox Code Playgroud)
申请的时候报错:
Error: Error authorizing security group rule type ingress: InvalidParameterValue: Invalid TCP/UDP port range(443:80)
Run Code Online (Sandbox Code Playgroud)
不是可以把443路由到80吗?
我正在 terraform 中使用 for_each 创建多个 s3 存储桶。这是我正在使用的代码
\nresource "aws_s3_bucket" "s3_private" {\n for_each = var.git_repo_branch_env\n bucket = each.value.override_domain_name == "" ? each.value.sitename_prefix == "" ? each.value.domain_name : join(".", [each.value.sitename_prefix, each.value.domain_name]) : each.value.sitename_prefix == "" ? each.value.override_domain_name : join(".", [each.value.sitename_prefix, each.value.override_domain_name])\n force_destroy = true\n}\nRun Code Online (Sandbox Code Playgroud)\n我想为创建的每个存储桶设置 ACL 属性,这是我尝试使用的代码
\nresource "aws_s3_bucket_acl" "s3_private_acl" {\n bucket = aws_s3_bucket.s3_private.bucket\n acl = "private"\n}\nRun Code Online (Sandbox Code Playgroud)\n我收到以下错误消息
\n\n\xe2\x94\x82 错误:缺少资源实例密钥 \xe2\x94\x82 \xe2\x94\x82 位于\n../../modules/cloudfront-edge-auth-acp/main.tf 第 149 行,位于resources\n"aws_s3_bucket_acl" "s3_private_acl": \xe2\x94\x82 149: bucket =\naws_s3_bucket.s3_private.bucket \xe2\x94\x82 \xe2\x94\x82 因为 aws_s3_bucket.s3_private\n 设置了 …
如何从多个可用区访问 AWS EBS 卷?
我的案例详细:
我有一个跨多个可用区的 VPC:
data "aws_availability_zones" "available" {}
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "3.10.0"
name = "${local.project_slug}-main-vpc"
cidr = "10.0.0.0/16"
azs = data.aws_availability_zones.available.name
...
Run Code Online (Sandbox Code Playgroud)
在此集群中,我有一个 max_capacity 为 n 的托管节点组:
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "17.22.0"
cluster_name = "${local.project_slug}-main-eks"
cluster_version = "1.19" # K8s version
vpc_id = module.vpc.vpc_id
subnets = module.vpc.public_subnets
# managed nodes
node_groups = {
grey = {
desired_capacity = 1
min_capacity = 1
max_capacity = 10
instance_types = ["t3.medium"] …Run Code Online (Sandbox Code Playgroud) 我已经通过 Terraform 部署了 Azure HTTP 函数应用程序,我想通过 API 管理来管理对 HTTP 函数的访问。我可以看到如何通过 Terraform 创建 API 管理,但是我看不到如何将我的函数应用程序与 API 管理结合起来。通过控制台,这非常简单。我如何通过 terraform 做到这一点?
我有这样的地图,需要在本地分配resource_id_tomonitor。因为地图位于我的 tfvars 文件中,而 locals 位于我的 main.tf 文件中
alerts_settings = {
alert1 = {
alert_name = "My First Alert"
resource_group_name = "my-rg"
alert_criteria_settings = [
{
metric_namespace = "Microsoft.Network/networkWatchers/connectionMonitors"
metric_name = "ChecksFailedPercent"
metric_aggregation = "Average"
metric_operator = "GreaterThanOrEqual"
metric_threshold = "50.0"
}
]
resource_id_tomonitor = [] # to be replaced at runtime
alert_description = "from POC One fo the VM is Down but THis is not high priotiry as we have multiple VM serving Traffic"
action_group_name = "POC-Monitor-AG"
severity = 3 …Run Code Online (Sandbox Code Playgroud) 我有一个 s3 生命周期规则,应该使用生命周期规则在 n 天后删除失败的分段上传。我想用lookup而不是try
resource "aws_s3_bucket_lifecycle_configuration" "default" {
count = length(var.lifecycle_rule) != 0 ? 1 : 0
bucket = aws_s3_bucket.bucket.bucket
dynamic "rule" {
for_each = try(jsondecode(var.lifecycle_rule), var.lifecycle_rule)
content {
id = lookup(rule.value, "id", "default")
status = lookup(rule.value, "status", "Enabled")
dynamic "abort_incomplete_multipart_upload" {
for_each = lookup(rule.value, "abort_incomplete_multipart_upload", null) != null ? [rule.value.abort_incomplete_multipart_upload] : []
content {
days_after_initiation = abort_incomplete_multipart_upload.value.days_after_initiation
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在子模块中使用此模块资源时,它不起作用
module "test" {
source = "./s3"
bucket_name = "test"
lifecycle_rule = [ …Run Code Online (Sandbox Code Playgroud) amazon-s3 amazon-web-services terraform terraform-provider-aws
我想创建多个 acm 证书和 Route53 记录以进行验证,只是无法弄清楚如何引用 Route53 资源块中的 for_each 创建的所有 ACM 资源,该资源块在 ACM 资源中循环以获取所有 DNS _validation 属性,代码正在运行如果我在变量中设置一个证书并直接使用名称引用它,那很好,但是如何循环到所有域名以在 for 循环中引用它?\n问题是这一行
\nfor dvo in aws_acm_certificate.web[for i in keys(var.certificates) : i]
正在返回
\n The index operator must end with a closing bracket ("]").
像这样添加第二个括号
\nfor dvo in aws_acm_certificate.web[[for i in keys(var.certificates) : i]]
返回错误
\n\xe2\x94\x82\n\xe2\x94\x82 on main.tf line 21, in resource "aws_route53_record" "domain_validation":\n\xe2\x94\x82 21: for dvo in aws_acm_certificate.web[[for i in keys(var.certificates) : i]].domain_validation_options : dvo.domain_name => {\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n\xe2\x94\x82 …Run Code Online (Sandbox Code Playgroud)