我正在尝试使用 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 连接到服务器,但我正在尝试了解完整的情况。
由于超时问题,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?
我有一个模块,我想在另一个区域有条件地创建 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
我已经通过 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 在 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
我需要将策略添加到我之前在 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 创建 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}”变量。任何人都可以帮助解决语法问题吗?
我正在开发 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) 我想从另一个存储库获取子网值。为此,我添加了数据 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) 我有一个 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)