标签: terraform

通过terraform创建策略时出现MalformedPolicyDocument错误

运行terraform时出现以下错误:

* aws_iam_role_policy.rds_policy: Error putting IAM role policy my-rds-policy: MalformedPolicyDocument: The policy failed legacy parsing
Run Code Online (Sandbox Code Playgroud)

这是我对资源的定义:

resource "aws_iam_role_policy" "rds_policy" {
  name = "my-rds-policy"
  role = "${aws_iam_role.rds_role.id}"
  policy = <<EOF
  {
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListBucket",
              "s3:GetBucketLocation"
          ],
          "Resource": [
              "arn:aws:s3:::my-bucket"
          ]
      },
      {
          "Effect": "Allow",
          "Action": [
              "s3:GetObjectMetaData",
              "s3:GetObject",
              "s3:PutObject",
              "s3:ListMultipartUploadParts",
              "s3:AbortMultipartUpload"
          ],
          "Resource": [
              "arn:aws:s3:::my-bucket/backups/*"
          ]
      }
  ]
}
EOF
}
Run Code Online (Sandbox Code Playgroud)

JSON策略文档格式正确,我看不到任何明显的东西.

amazon-web-services terraform

10
推荐指数
2
解决办法
7312
查看次数

Terraform 错误 - 需要最终快照时需要 RDS Cluster FinalSnapshotIdentifier

我是 Terraform 的新手。我正在使用 Terraform 编写 AWS 脚本。执行Terraform Destroy时出现错误。Terraform 脚本是

resource "aws_rds_cluster" "aurora-cluster-ci" {
  cluster_identifier        = "aurora-cluster-ci"
  engine                    = "aurora-mysql"
  availability_zones        = ["us-east-1a", "us-east-1b", "us-east-1c"]
  database_name             = "${var.rds_dbname}"
  master_username           = "${var.rds_username}"
  master_password           = "${var.rds_password}"
  backup_retention_period   = 5
  engine_version            = "5.7.16"
  preferred_backup_window   = "07:00-09:00"
  apply_immediately         = true
  final_snapshot_identifier = "ci-aurora-cluster-backup"
  skip_final_snapshot       = true
}
Run Code Online (Sandbox Code Playgroud)

Terraform Destroy抛出错误“aws_rds_cluster.aurora-cluster-ci:需要最终快照时需要 RDS Cluster FinalSnapshotIdentifier”

我的脚本中有“final_snapshot_identifier”键。

amazon-web-services amazon-rds terraform terraform-provider-aws

10
推荐指数
3
解决办法
8627
查看次数

使用Terraform/CloudFormation/Something有效地部署lambda(仅部署那些已更改的)

到目前为止,我一直在使用CloudFormation来部署我的lambda.我发现这个过程非常缓慢且效率低下 - 例如.它可能需要几分钟但如果只是部署那个1功能它应该只需几秒钟?大多数功能都没有改变,但我相信CloudFormation无法区分,无论如何都会部署一切.有没有办法可以更有效地做到这一点?比如查看已更改的内容并仅部署更改?

另一个好处是我可能会有更少的版本?

lambda continuous-integration aws-cloudformation terraform

10
推荐指数
1
解决办法
626
查看次数

terraform-kubernetes-provider 如何从文件创建机密?

我正在使用 terraform kubernetes-provider,我想将此kubectl命令转换为 TF:

kubectl create secret generic my-secret --from-file mysecret.json
Run Code Online (Sandbox Code Playgroud)

然而,secret资源的data字段似乎只需要一个 TF map

我试过类似的东西

data "template_file" "my-secret" {
  template = "${file("${path.module}/my-secret.json")}"
}

resource "kubernetes_secret" "sgw-config" {
   metadata {
     name = "my-secret"
   }
   type = "Opaque"
   data = "{data.template_file.my-secret.template}"
}
Run Code Online (Sandbox Code Playgroud)

但它抱怨这不是一张地图。所以,我可以做这样的事情:

   data = {
      "my-secret.json" = "{data.template_file.my-secret.template}"
   }
Run Code Online (Sandbox Code Playgroud)

但这将使用名为的顶级字段写入机密,my-secret.json并且当我批量挂载它时,它将无法与其他资源一起使用。

这里的诀窍是什么?

kubernetes terraform terraform-template-file

10
推荐指数
2
解决办法
6772
查看次数

无法代入角色并验证指定的 targetGroupArn

我想使用 terraform ecs_service 创建和部署集群,但我无法这样做。我的terraform applys 总是在 IAM 角色上失败,我不太清楚。具体来说,错误信息是:

InvalidParametersException:无法代入角色并验证指定的 targetGroupArn。请验证传递的 ECS 服务角色是否具有适当的权限。

我发现:

  1. 当我iam_role在 ecs_service 中指定时,ECS 抱怨我需要使用服务相关角色。
  2. 当我iam_role在 ecs_service 中发表评论时,ECS 抱怨所担任的角色无法验证 targetGroupArn。

我的 terraform 跨越了一堆文件。我把感觉像下面的相关部分。尽管我已经看到发布了一些类似的问题,但没有一个为我提供解决上述困境的可行解决方案。

## ALB

resource "aws_alb" "frankly_internal_alb" {
    name = "frankly-internal-alb"
    internal = false
    security_groups = ["${aws_security_group.frankly_internal_alb_sg.id}"]
    subnets = ["${aws_subnet.frankly_public_subnet_a.id}", "${aws_subnet.frankly_public_subnet_b.id}"]
}

resource "aws_alb_listener" "frankly_alb_listener" {
    load_balancer_arn = "${aws_alb.frankly_internal_alb.arn}"

    port = "8080"
    protocol = "HTTP"

    default_action {
        target_group_arn = "${aws_alb_target_group.frankly_internal_target_group.arn}"
        type = "forward"
    }
}

## Target Group

resource …
Run Code Online (Sandbox Code Playgroud)

amazon-ecs amazon-iam terraform terraform-provider-aws

10
推荐指数
1
解决办法
3869
查看次数

Terraform v0.12 多行字符串 EOF shell 风格的“here doc”语法没有像 v0.11 那样解释

在 Octopus Deploy 中,我使用他们的 Apply a Terraform 模板设置了一个 Terraform Apply Step

在我的 Terraform main.tf 文件中,我想使用连接在 AWS 中的 Amazon Linux EC2 实例上运行 remote-exec

    resource "aws_instance" "nginx" {
      ami           = "${var.aws_ami}"
      instance_type = "t2.nano"
      key_name      = "${var.key_name}"

      connection {
        type        = "ssh"
        user        = "ec2-user"
        private_key = "${var.aws_key_path}"
      }

      provisioner "remote-exec" {
        inline = [
          "sudo amazon-linux-extras install epel -y",
          "sudo yum update -y",
          "sudo amazon-linux-extras install nginx1.12 -y",
          "sudo systemctl enable nginx.service",
          "sudo systemctl start nginx.service",
          "sudo systemctl status nginx.service"
        ] …
Run Code Online (Sandbox Code Playgroud)

octopus-deploy terraform

10
推荐指数
1
解决办法
2万
查看次数

将 S3 静态站点与应用程序负载均衡器结合使用

我有一个 ALB,它当前将流量路由到多个 url。如果我们需要执行维护,我希望能够将流量路由到静态 S3 站点。然后我们将显示一个静态的“维护”页面而不是我们的登录页面。

我创建了一个 CloudFront 分配,允许使用 SSL 证书加载 S3 站点,但我不确定如何连接该分配以将所有流量发送到 S3 维护站点。

这是我正在使用的 Terraform ALB 侦听器。我可以指定我的CloudFront的分布arntarget_group并将它路由所有流量的静态网站?

或者我可以简单地将我的 S3arn与允许 ALB 访问以获取存储桶对象的 S3 策略链接起来吗?

resource "aws_alb_listener" "ssl_alb_httpslistener" {
   load_balancer_arn = "${aws_alb.alb_lis.arn}"
   port = "443"
   protocol = "HTTPS"
   ssl_policy = "Sec-TLS"
   certificate_arn = "${var.ssl_cert_arn}"

    default_action {
     target_group_arn = "${data.terraform_remote_state.php.target_arn}"
     type = "forward"
   }
}
Run Code Online (Sandbox Code Playgroud)

我希望我可以将通过 ALB 的流量从target_group. 好奇这是否是解决此问题的最佳方法。

load-balancing amazon-s3 static-site terraform terraform-provider-aws

10
推荐指数
1
解决办法
2万
查看次数

带有 ALB 入口控制器的 Terraform AWS Kubernetes EKS 资源不会创建负载均衡器

我一直在尝试使用 Terraform 在 AWS 上创建一个具有自我管理节点的 EKS 集群,但我无法让我的 Kubernetes Ingress 创建负载均衡器。没有错误,但没有创建负载均衡器,它只是超时。

我确实首先在我的帐户中手动创建了一个负载均衡器,并验证了负载均衡器角色是否存在。AWSElasticLoadBalancingServiceRolePolicy当我的 Terraform 代码运行时访问该策略。

我非常依赖本教程

变量:

aws_region     = "ap-southeast-1"
domain         = "*.mydomain.com"
cluster_name   = "my-tf-eks-cluster"
vpc_id         = "vpc-0d7700e26db6b3e21"
app_subnet_ids = "subnet-03c1e8c57110c92e0, subnet-0413e8bf24cb32595, subnet-047dcce0b810f0fbd"
// gateway subnet IDs
Run Code Online (Sandbox Code Playgroud)

地形代码:

terraform {
}

provider "aws" {
 region  = var.aws_region
 version = "~> 2.8"
}

data "aws_acm_certificate" "default" {
  domain   = var.domain
  statuses = ["ISSUED"]
}

resource "kubernetes_service_account" "alb-ingress" {
  metadata {
    name = "alb-ingress-controller"
    namespace = "kube-system"
    labels = { …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services kubernetes terraform kubernetes-ingress amazon-eks

10
推荐指数
1
解决办法
2384
查看次数

Terraform 有条件地应用生命周期块

您能否有条件地将生命周期块应用于 Terraform 0.12 中的资源。

例如,如果我想根据传递给模块的参数将此块添加到 AWS ASG 资源。

    lifecycle {
      ignore_changes = [
       target_group_arns,
      ]
    }
Run Code Online (Sandbox Code Playgroud)

terraform

10
推荐指数
2
解决办法
3316
查看次数

GCP IAM绑定/成员的“权威”和“权威”是什么意思

我试图在https://www.terraform.io/docs/providers/google/r/google_service_account_iam.html上了解GCP terraform 提供程序之间google_service_account_iam_binding和之间的区别。google_service_account_iam_member

我知道 google_service_account_iam_binding 用于向成员列表授予角色,而 google_service_account_iam_member 用于向单个成员授予角色,但是我不清楚这些定义中“权威”和“非权威”的含义:

google_service_account_iam_binding:给定角色的权威。更新 IAM 策略以向成员列表授予角色。服务帐号的 IAM 策略中的其他角色将被保留。

google_service_account_iam_member:非权威。更新 IAM 策略以向新成员授予角色。保留服务帐户角色的其他成员。

谁能为我详细说明一下?

terraform terraform-provider-gcp

10
推荐指数
2
解决办法
815
查看次数