标签: terraform

在 terraform 销毁期间删除文本文件

我试图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 destroyhosts执行时删除文件的最简单方法是什么terraform destroy

感谢您的帮助,如果我的解释不够清楚,请告诉我。

delete-file terraform terraform-provider-aws

0
推荐指数
1
解决办法
2667
查看次数

使用 terraform 根据一组变量创建多个资源

我有一组变量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 terraform-provider-azure

0
推荐指数
1
解决办法
7109
查看次数

Terraform 在没有任何变化时检测到变化

我正在使用 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)

terraform

0
推荐指数
1
解决办法
1237
查看次数

如何使用AWS中的安全组规则将443路由到80?

我想将 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吗?

amazon-web-services terraform aws-security-group

0
推荐指数
1
解决办法
1375
查看次数

在 terraform 中使用 for_each 时缺少资源实例键

我正在 terraform 中使用 for_each 创建多个 s3 存储桶。这是我正在使用的代码

\n
resource "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}\n
Run Code Online (Sandbox Code Playgroud)\n

我想为创建的每个存储桶设置 ACL 属性,这是我尝试使用的代码

\n
resource "aws_s3_bucket_acl" "s3_private_acl" {\n  bucket = aws_s3_bucket.s3_private.bucket\n  acl    = "private"\n}\n
Run 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 设置了 …

terraform terraform-provider-aws

0
推荐指数
1
解决办法
1365
查看次数

如何跨多个可用区启用AWS EBS Volume?

如何从多个可用区访问 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)

amazon-web-services terraform persistent-volumes amazon-eks

0
推荐指数
1
解决办法
3049
查看次数

使用 Function App 部署 API 管理 - Terraform

我已经通过 Terraform 部署了 Azure HTTP 函数应用程序,我想通过 API 管理来管理对 HTTP 函数的访问。我可以看到如何通过 Terraform 创建 API 管理,但是我看不到如何将我的函数应用程序与 API 管理结合起来。通过控制台,这非常简单。我如何通过 terraform 做到这一点?

azure-api-management terraform

0
推荐指数
1
解决办法
2114
查看次数

替换地图中的单个值

我有这样的地图,需要在本地分配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)

terraform

0
推荐指数
1
解决办法
4886
查看次数

Terraform 模块 s3 生命周期规则不起作用

我有一个 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

0
推荐指数
1
解决办法
2078
查看次数

访问其他 for 循环 Terraform 中 for_each 创建的所有资源

我想创建多个 acm 证书和 Route53 记录以进行验证,只是无法弄清楚如何引用 Route53 资源块中的 for_each 创建的所有 ACM 资源,该资源块在 ACM 资源中循环以获取所有 DNS _validation 属性,代码正在运行如果我在变量中设置一个证书并直接使用名称引用它,那很好,但是如何循环到所有域名以在 for 循环中引用它?\n问题是这一行

\n

for dvo in aws_acm_certificate.web[for i in keys(var.certificates) : i]

\n

正在返回

\n

The index operator must end with a closing bracket ("]").

\n

像这样添加第二个括号

\n

for dvo in aws_acm_certificate.web[[for i in keys(var.certificates) : i]]

\n

返回错误

\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)

amazon-web-services terraform terragrunt

0
推荐指数
1
解决办法
675
查看次数