我正在 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 设置了 …
我有一个 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
我目前有一段代码,我一直在安静地使用它,该代码调用自定义 S3 模块。今天,我尝试运行相同的代码,但开始收到有关提供程序的错误。
\n\n\n\xe2\x95\xb7 \xe2\x94\x82 错误: 无法查询可用的提供程序包 \xe2\x94\x82 \xe2\x94\x82 无法\n检索提供程序 hashicorp/s3 的可用版本列表:\n提供程序注册表registry.terraform.io 没有名为\n\xe2\x94\x82 的提供程序registry.terraform.io/hashicorp/s3 \xe2\x94\x82 \xe2\x94\x82 所有模块都应指定\n其 required_providers,以便外部消费者在使用模块时将获得\n正确的提供者。要查看 \xe2\x94\x82 当前依赖于 hashicorp/s3 的模块,请运行以下命令: \xe2\x94\x82
\n
\nterraformproviders
进行一些挖掘似乎 terraform 正在寻找模块registry.terraform.io/hashicorp/s3,该模块不存在。
\n到目前为止,我已经尝试了以下方法:
\n进一步阅读,它指的是 terraform 模块的缓存问题。我尝试运行terraformproviderslock并收到此错误。
\n\n错误:无法检索用于锁定 \xe2\x94\x82 \xe2\x94\x82 的提供程序 …
我正在尝试使用 terraform 将以下策略添加到 iam 用户。如何在 upload_user_user 的策略中添加帐户 ID?
resource "aws_iam_user" "product_upload_user" {
name = "cc-${terraform.workspace}-product-upload-user"
}
resource "aws_iam_user_policy" "allow_upload" {
user = aws_iam_user.product_upload_user.name
policy = data.aws_iam_policy_document.allow_upload.json
}
data "aws_iam_policy_document" "allow_upload" {
statement {
sid = "STSToken"
effect = "Allow"
actions = ["sts:GetFederationToken"]
# resources = ["arn:aws:sts::${aws_iam_user.product_upload_user.<account_id>}:federated-user/S3UploadWebToken"]
}
}
Run Code Online (Sandbox Code Playgroud)
尝试实施本教程中的策略:https://next-s3-upload.codingvalue.com/setup
amazon-web-services amazon-iam terraform terraform-provider-aws
您好,我正在尝试使用 terraform 模块导入现有资源 terraform-aws-modules/vpc/aws
这是我的模块定义
\nmodule "vpc" {\n source = "terraform-aws-modules/vpc/aws"\n\n name = "eks-dev"\n cidr = "10.0.0.0/16"\n\n azs = ["us-east-1b", "us-east-1a"]\n public_subnets = ["10.0.2.0/24", "10.0.1.0/24"]\n\n enable_nat_gateway = false\n enable_vpn_gateway = false\n\n tags = {\n Terraform = "true"\n Environment = "dev"\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n当我执行计划时
\n # module.vpc.module.vpc.aws_vpc.this[0] will be created\n + resource "aws_vpc" "this" {\n + arn = (known after apply)\n + cidr_block = "10.0.0.0/16"\n + default_network_acl_id = (known after apply)\n + default_route_table_id = (known after apply)\n + default_security_group_id …Run Code Online (Sandbox Code Playgroud) 我正在构建一个 Cloudwatch 触发器,以在工作周(周一至周五)的 9 点至 17 点(上午 9 点至下午 5 点)之间每小时触发一次
Terraform 向我抛出此错误:
ValidationException: Parameter ScheduleExpression is not valid.
Run Code Online (Sandbox Code Playgroud)
这是我的时间表表达式:schedule_expression = "cron(0 9-17 * * MON-FRI *)"
有谁知道为什么无效?
我想根据 .tfvars 文件的条件创建 Spot 实例。否则我想要一个常规的 ec2 实例。我知道有一个三元条件,但不确定如何正确使用它。
spot = var.spot_instance ? instance_market_options {
market_type = "spot"
} :
Run Code Online (Sandbox Code Playgroud)
resource "aws_launch_template" "foo" {
name = "foo"
iam_instance_profile {
name = "test"
}
image_id = "ami-test"
instance_market_options {
market_type = "spot"
}
instance_type = "t2.micro"
}
Run Code Online (Sandbox Code Playgroud)
或者可能是这个?
instance_market_options = var.spot_instance ? {
market_type = "spot"
} :
Run Code Online (Sandbox Code Playgroud) amazon-ec2 amazon-web-services terraform terraform-provider-aws
谁能解释一下这一行。
subnet_id = "${element(aws_subnet.public.*.id, count.index)}"
Run Code Online (Sandbox Code Playgroud)
我在 terraform 代码中使用它来创建一个堆栈
我找不到 terraform 模块来创建 AWS SNS 主题订阅。例如:我使用“terraform-aws-modules/sns/aws”来创建 SNS 主题。有人可以指出我要订阅的源模块吗?
如何将实例名称指定为 aws_instance 的一部分,正在启动的实例没有与其关联的显示名称,并且在 EC2 控制台中显示为空。注意:instance_id 正确显示
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance
需要使用 terraform 创建 cloudfront 公钥,这里公钥是根据环境单独的,并以 {env_name}.pem 形式存储在目录名称 public-key-cf 中。env_name 可以是 dev、stage、prod。
为了实现这一点,使用了以下 terraform 块:
resource "aws_cloudfront_public_key" "documents-signing-key" {
name = "cf-public-key"
comment = "Public Key"
encoded_key = file("${path.module}/public-key-cf/"${var.environment}".pem)"
}
Run Code Online (Sandbox Code Playgroud)
我收到错误如下:
This character is not used within the language.
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
谢谢。