标签: terraform-provider-aws

是否可以通过 Terraform 为 AWS Transfer SFTP 设置自定义主机名

我正在尝试使用 AWS Transfer 设置具有自定义主机名的 SFTP 服务器。我正在使用 Terraform 管理资源。我目前已启动并运行资源,并且已使用 Terraform 创建一条 Route53 记录以指向 SFTP 服务器,但 SFTP 仪表板上的自定义主机名条目显示为空白。

当然,当我通过 AWS 控制台手动创建服务器并将 Route53 记录与其关联时,它看起来就像我所期望的那样:

我浏览了terraform 资源文档,并尝试了解如何通过 aws cli 或 cloudformation 完成它,但我没有任何运气。

我的服务器资源如下所示:

resource "aws_transfer_server" "sftp" {
  identity_provider_type = "SERVICE_MANAGED"
  logging_role           = "${aws_iam_role.logging.arn}"
  force_destroy          = "false"

  tags {
    Name = ${local.product}-${terraform.workspace}"
  }
}
Run Code Online (Sandbox Code Playgroud)

我的 Route53 记录如下所示:

resource "aws_route53_record" "dns_record_cname" {
  zone_id = "${data.aws_route53_zone.sftp.zone_id}"
  name    = "${local.product}-${terraform.workspace}"
  type    = "CNAME"
  records = ["${aws_transfer_server.sftp.endpoint}"]
  ttl = "300"
}
Run Code Online (Sandbox Code Playgroud)

从功能上讲,我可以继续使用现有的功能,我可以使用 DNS 连接到服务器,但我正在尝试了解完整的情况。

sftp terraform terraform-provider-aws

7
推荐指数
1
解决办法
4383
查看次数

在 aws 控制台中哪里可以找到 aws_iam_instance_profile?

由于超时问题,terraform 无法创建 ec2 实例。

为了从中恢复,我已从 aws 控制台手动删除了 ec2 实例以及 terraform 状态文件。

然而现在它试图重新创建

  + aws_iam_instance_profile.server
      id:                                        <computed>
      arn:                                       <computed>
      create_date:                               <computed>
      name:                                      "server-profile"
      path:                                      "/"
      role:                                      "server-role"
      roles.#:                                   <computed>
      unique_id:                                 <computed>
Run Code Online (Sandbox Code Playgroud)

因此我想在 aws 控制台中找到它并将其删除。然而我不知道在哪里可以找到它。

我可以在哪里找到aws_iam_instance_profile.server

amazon-web-services terraform terraform-provider-aws

7
推荐指数
2
解决办法
8884
查看次数

Terraform 可选资源的可选提供者

我有一个模块,我想在另一个区域有条件地创建 s3 存储桶。我尝试过这样的事情:

resource "aws_s3_bucket" "backup" {
   count = local.has_backup ? 1 : 0
   provider = "aws.backup"
   bucket = "${var.bucket_name}-backup"
   versioning { 
     enabled = true
   }
}
Run Code Online (Sandbox Code Playgroud)

但即使 count 为 0,我似乎也需要提供 aws.backup 提供程序。有什么办法解决这个问题吗?

注意:如果我可以使用单个提供程序在多个区域创建存储桶,这不会成为问题,请参阅https://github.com/terraform-providers/terraform-provider-aws/issues/8853

terraform terraform-provider-aws

7
推荐指数
1
解决办法
2412
查看次数

Mongodb Atlas 的 Terraform 提供程序:我的数据库在哪里?

我已经通过 Mongodb terraform 提供程序成功创建了项目、用户和集群,但是我希望看到在我的新集群下已经创建的数据库,但找不到该数据库。我不确定它缺少什么或不正确,并且我在文档中找不到任何与我自己实现的内容不同的示例/信息。以下是我的 main.tf 文件中的相关信息:

# Create a db user
resource "mongodbatlas_database_user" "mongodb_user" {
  username = "${var.database_username}"
  password = "${random_string.master_password.result}"
  project_id = "${mongodbatlas_project.mongodb.id}"
  database_name  = "admin"

  roles {
    role_name = "readWrite"
    database_name = "admin"
  }
}
Run Code Online (Sandbox Code Playgroud)

团体

resource "mongodbatlas_project" "mongodb"{
  org_id = "${var.mongodb_atlas_org_id}"
  name = "${var.project_name}-${var.stage}"
 }
Run Code Online (Sandbox Code Playgroud)

# Create a cluster
resource "mongodbatlas_cluster" "mongodb-cluster" {
  project_id = "${mongodbatlas_project.mongodb.id}"
  name = "${var.cluster_name}-${var.stage}"
  num_shards = 1

  replication_factor = 3
  backup_enabled = true
  auto_scaling_disk_gb_enabled = true
  mongo_db_major_version = "4.0"

  //Provider Settings …
Run Code Online (Sandbox Code Playgroud)

terraform mongodb-atlas terragrunt terraform-provider-aws

7
推荐指数
1
解决办法
3175
查看次数

如何仅在不存在时创建 terraform 资源

我正在使用 terraform 在 AWS 中创建一个角色。由于IAM是非区域服务,我只想创建一次角色。因此,每当我运行 terraform 时,它都应该检查该角色是否已经存在,如果不存在,它应该创建一个。

data "aws_iam_role" "iam_role_check" {
  name = "some_role"
}

resource "aws_iam_role" "iam_role" {
  count= "${data.aws_iam_role.iam_role_check != "null" ? 0 : 1}"
  name = "some_role"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
}
Run Code Online (Sandbox Code Playgroud)

data.aws_iam_role.iam_role_check:正在刷新状态...

错误:读取 IAM 角色 (some_role) 时出错:NoSuchEntity:找不到名为 some_role 的角色。状态码:404,请求ID:

amazon-web-services aws-lambda terraform terraform-provider-aws

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

更新在 Terraform 文件中创建的存储桶会导致 BucketAlreadyOwnedByYou 错误

我需要将策略添加到我之前在 Terraform 文件中创建的存储桶。

但是,这个错误与

创建 S3 存储桶时出错:BucketAlreadyOwnedByYou:您之前创建指定存储桶的请求已成功,并且您已拥有该存储桶。

如何修改 .tf 文件来创建存储桶,然后更新它?

resource "aws_s3_bucket" "bucket" {
  bucket = "my-new-bucket-123"
  acl    = "public-read"

  region = "eu-west-1"

  website {
    index_document = "index.html"
  }
}

data "aws_iam_policy_document" "s3_bucket_policy_document" {
  statement {
    actions   = ["s3:GetObject"]
    resources = ["${aws_s3_bucket.bucket.arn}/*"]
    principals {
      type        = "AWS"
      identifiers = ["*"]
    }
  }
}

resource "aws_s3_bucket" "s3_bucket_policy" {
  bucket = "${aws_s3_bucket.bucket.bucket}"
  policy = "${data.aws_iam_policy_document.s3_bucket_policy_document.json}"
}
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-aws

7
推荐指数
1
解决办法
8471
查看次数

terraform替换json中的变量

我正在使用 terraform 创建 rds 服务器。我使用列表变量传递选项组。选项将变量分组在variable.tf中,如下所示

options = [
   {
    option_name = "SQLSERVER_BACKUP_RESTORE"

    option_settings=[
      {
      name  = "IAM_ROLE_ARN"
      value = "${role_arn}"
    },
  ]
},
Run Code Online (Sandbox Code Playgroud)

我想替换 main.tf 中的“${role_arn}”变量。任何人都可以帮助解决语法问题吗?

amazon-rds terraform terraform-provider-aws

6
推荐指数
1
解决办法
9973
查看次数

如何通过 terrarform 为 lambda 生成 zip 文件?

我正在开发 aws 堆栈,并有一些 lambda 和 s3 存储桶(下面的示例代码)。如何通过 terrarform 为 lambda 生成 zip 文件。我见过不同的风格,可能也取决于 terraform 的版本。

resource "aws_lambda_function" "my_lambda" {
              filename = "my_lambda_func.zip"
              source_code_hash = filebase64sha256("my_lambda_func.zip")
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform terraform-provider-aws

6
推荐指数
2
解决办法
9891
查看次数

Terraform 数据过滤器:获取多个值

我想从另一个存储库获取子网值。为此,我添加了数据 aws_subnet 部分。但是我的过滤部分有问题。在值行的末尾,我需要计算每个子网。我尝试使用 count.index 和不同的东西。但我收到此错误:The "count" object can only be used in "module", "resource", and "data" blocks, and only when the "count" argument is set.那么我如何使用 * 作为过滤器值部分。例如:${var.vpcname}-Public-*

我的子网:

myvpc-Private-0
myvpc-Private-1
myvpc-Private-2
myvpc-Public-0
myvpc-Public-1
myvpc-Public-2
Run Code Online (Sandbox Code Playgroud)

我的数据部分:

data "aws_subnet" "public" {
  filter {
    name   = "tag:Name"    
    values = ["${var.vpcname}-Public-"]
  }
}

data "aws_subnet" "private" {
  filter {
    name   = "tag:Name"
    values = ["${var.vpcname}-Private-"]
  }
}
Run Code Online (Sandbox Code Playgroud)

想要查看具有以下输出部分的所有子网。

output "private" {
  value = data.aws_subnet.private.*.id
}

output "public" {
  value = data.aws_subnet.public.*.id …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform terraform-provider-aws

6
推荐指数
1
解决办法
9650
查看次数

将 Terraform 地图键转换为列表

我有一个 Terraform 帐户地图,如下所示。

 account_map  = {
      111111111111 = "DEV"
      222222222222 = "DEV"
      333333333333 = "STG"
      333333333333 = "PROD"
 }
Run Code Online (Sandbox Code Playgroud)

Dev如何根据上面的地图创建如下帐户 ID 列表?我厌倦了使用keys函数,但不知道如何搜索DEV键函数内的值。

dev_accounts = ["111111111111", "222222222222"]
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-aws

6
推荐指数
1
解决办法
4550
查看次数