aws_wafv2_web_acl_logging_configuration我正在尝试将该资源与aws_cloudwatch_log_groupTerraform 配置中的资源集成。但是,我遇到了一个错误,指出:
Error reason: The ARN isn't valid. A valid ARN begins with arn: and includes other information separated by colons or slashes
Run Code Online (Sandbox Code Playgroud)
根据错误aws_cloudwatch_log_group arn是不正确的。
但我根据 Terraform 文档遵循了正确的格式。 https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/wafv2_web_acl_logging_configuration
有人知道这个错误的原因吗?我的代码如下。
resource "aws_cloudwatch_log_group" "test_waf_log_group" {
name = var.waf_log_group_name
retention_in_days = 14
}
resource "aws_wafv2_web_acl_logging_configuration" "log_test_waf" {
depends_on = [aws_cloudwatch_log_group.test_waf_log_group]
log_destination_configs = [aws_cloudwatch_log_group.test_waf_log_group.arn]
resource_arn = aws_wafv2_web_acl.test_waf.arn
}
Run Code Online (Sandbox Code Playgroud) 我想设置 S3 存储桶的生命周期规则,以便存储桶中的每个文件在生成后 7 天将被删除。
如果我设置生命周期规则如下(下面是terraform代码,类似于控制台设置,所以我这里只用它),从今天起7天后,“test”桶中的所有文件是否会被删除,或者每个文件都将被删除因为它们是在不同的日期创建的,所以在不同的日期删除?我希望它们在不同的日期被删除,而不是一起被删除。
顺便说一句,我想我不需要配置:永久删除以前的版本,因为我的 s3 没有启用版本。如果我错了,请纠正我。
resource "aws_s3_bucket" "s3" {
bucket = "test"
lifecycle_rule {
id = "remove_after_7d"
enabled = true
expiration {
days = 7
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Terraform 创建一个网络负载平衡器,重要的是它与防止被破坏的弹性 IP 相关联。
我有如下代码:
resource "aws_lb" "balancer" {
name = "${var.name}-nlb"
internal = "${var.internal}"
load_balancer_type = "network"
subnets = ["${data.aws_subnet_ids.selected.ids}"]
subnet_mapping {
subnet_id = "someid"
allocation_id = "someid"
}
subnet_mapping {
subnet_id = "someid"
allocation_id = "someid"
}
subnet_mapping {
subnet_id = "someid"
allocation_id = "someid"
}
tags = "${merge(var.tags,
map("Terraform", "true"),
map("Environment", var.environment))}"
}
Run Code Online (Sandbox Code Playgroud)
我所追求的是subnet_mapping动态地制作块,因为这段代码位于一个模块中,我想根据传入的子网数量创建映射数量。要么是,要么是传入预定义的块。
有没有办法做到这一点?对我来说重要的是相关的弹性 IP 需要坚持下去。
我正在构建 Terraform 配置以将一些容器部署到 AWS ECS。显然,我必须将 Docker 镜像推送到 ECR。我在 ECR 中创建了一个存储库并推送了图像。
现在我正在自动化。如果我这样声明aws_ecr_repository:
data "aws_ecr_repository" "service" {
name = "myrepository"
}
Run Code Online (Sandbox Code Playgroud)
然后 Terraform 将管理它。我最终可以用类似的东西来引用它
image = "${aws_ecr_repository.myrepository.repository_url}"
Run Code Online (Sandbox Code Playgroud)
在构建 ECS 任务定义的过程中。
我的印象是,当我terraform destroy作为开发周期的一部分运行时,Terraform 会删除这个存储库——或者当它有图像时会失败。这会很糟糕,因为terraform destroy要么永远不会完成,要么我必须清除 ECR 存储库才能成功完成该命令。
如何最好地引用已经存在但我似乎不希望 Terraform 管理的 ECR 存储库,因为 Terraform 可能会破坏位于 Terraform 之外的数据,即发布 CI 作业上传的 Docker 图像?
我有一个变量 (var.http_proxy) 保存代理详细信息(IP 地址:端口)。我将 env 变量设置为 lambda 并且我有 2 个变量,主机和端口。现在我需要使用拆分变量并分配代理主机和端口,而不是定义 2 个新变量。我正在使用下面的代码,这是错误的 -
environment = {
variables = {
proxy_host = "${split(":", var.http_proxy)[0]}"
proxy_port = "${split(":", var.http_proxy)[1]}"
}
}
Run Code Online (Sandbox Code Playgroud) 使用 terraform 创建胶水表时,出现以下错误
at 'table.storageDescriptor.columns.5.member.type' failed to satisfy constraint: Member must satisfy regular expression pattern: [\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]*;
Run Code Online (Sandbox Code Playgroud)
terraform 列类型如下所示:
struct<
subscriber_id:string,
price_plan_id:string,
usage_rate_id:string,
entitlement_id:string,
charged_gl:string,
uncharged_gl:string,
audit_trail:array<
struct<
time:string,
outcome_details:array<
struct<balance_id:array<string>,
balance_delta:string,
event_type:string,
invoice_text:string>>>>>
Run Code Online (Sandbox Code Playgroud)
我一直关注可读性。当我将其更改为如下所示的缩小版本时,错误就会消失。
struct<subscriber_id:string,price_plan_id:string,usage_rate_id:string,entitlement_id:string,charged_gl:string,uncharged_gl:string,audit_trail:array<struct<time:string,outcome_details:array<struct<balance_id:array<string>,balance_delta:double,event_type:string,invoice_text:string>>>>>"
Run Code Online (Sandbox Code Playgroud)
AWS 文档还介绍了多个 api 的这种模式。以下是提到的 Glue 表的列类型。
类型 列中数据的数据类型。
类型:字符串
长度限制:最小长度为 0。最大长度为 131072。
图案:[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]*
要求:否
我想了解这个模式,这个模式是什么意思。我尝试搜索模式中提到的 unicode 字符,但无法识别此处表示的字符。我对正则表达式很熟悉,但从未遇到过这种模式。
regex terraform terraform-provider-aws aws-glue-data-catalog
我看到间歇性的 Terraform 故障在我看来就像是 Terraform 本身内部的竞争条件:
21:31:37 aws_s3_bucket.jar: Creation complete after 1s
(ID: automatictester.co.uk-my-bucket)
...
21:31:38 * aws_s3_bucket_object.jar: Error putting object in S3 bucket
(automatictester.co.uk-my-bucket): NoSuchBucket: The specified bucket
does not exist
Run Code Online (Sandbox Code Playgroud)
正如您在上面的日志中看到的那样,TF 首先声称它在 21:31:37 创建了一个存储桶,然后说它不能将对象放入该存储桶中,因为它在 21:31:38 不存在。
上述错误背后的代码:
resource "aws_s3_bucket" "jar" {
bucket = "${var.s3_bucket_jar}"
acl = "private"
}
...
resource "aws_s3_bucket_object" "jar" {
bucket = "${var.s3_bucket_jar}"
key = "my.jar"
source = "${path.module}/../target/my.jar"
etag = "${md5(file("${path.module}/../target/my.jar"))}"
}
Run Code Online (Sandbox Code Playgroud)
显然,这两者之间定义了一种隐式依赖关系,因此我想到的失败的唯一原因是 Amazon S3 的最终一致性。
如何处理此类错误?我相信显式定义的依赖depends-on不会为已经存在的隐式依赖提供任何价值。
amazon-s3 amazon-web-services terraform terraform-provider-aws
我正在尝试从远程状态调用数据以引用网络 acl 的 vpc_id。当我运行计划/应用时,我收到错误“此对象没有参数、嵌套块或名为“vpc_id”的导出属性。
我试过使用“data.terraform_remote_state.*.vpc_id”以及“${}”语法。我尝试在子模块和父模块的 variables.tf 中定义 data.remote 信息。
我最终需要能够为不同的 VPC/子网动态调用这个模块。
相关的 VPC 已经存在,并且所有模块都已初始化。
s3 存储桶阶段/网络/vpc/terraform.tfstate:
"outputs": {
"vpc_id": {
"value": "vpc-1234567890",
"type": "string"
}
},
enter code here
Run Code Online (Sandbox Code Playgroud)
模块/网络/acl/main.tf:
data "terraform_remote_state" "stage-network" {
backend = "s3"
config = {
bucket = "bucket"
key = "stage/network/vpc/terraform.tfstate"
}
}
resource "aws_network_acl" "main" {
vpc_id = data.terraform_remote_state.stage-network.vpc_id
# acl variables here
Run Code Online (Sandbox Code Playgroud)
阶段/网络/acl/main.tf:
data "terraform_remote_state" "stage-network" {
backend = "s3"
config = {
bucket = "bucket"
key = "stage/network/vpc/terraform.tfstate"
}
}
module "create_acl" …Run Code Online (Sandbox Code Playgroud) 我希望从自动缩放启动配置中创建一个新启动的 ec2 实例,其中 source_dest_check = disabled(默认情况下已启用)。
我知道我们可以使用 source_dest_check = false 来创建 ec2 资源,但是如何在从 ASG 管理实例时实现相同的目标。
Terraform 不接受下面的 (source_dest_check = false) ,还有其他替代方法可以实现吗?
我可以从用户数据中实现这一点吗?
resource "aws_launch_configuration" "launchconfig" {
name_prefix = "bastion-"
image_id = "${data.aws_ami.amazon-linux-2.id}"
instance_type = "${var.instance_type}"
placement_tenancy = "default"
enable_monitoring = true
#source_dest_check = false
security_groups = ["${aws_security_group. security_group.id}"]
iam_instance_profile = "${aws_iam_instance_profile.instance_profile.name}"
key_name = "${var. pem_key}"
#Include user-data
user_data = "${element(data.template_file.user_data.*.rendered, count.index)}"
lifecycle {
create_before_destroy = true
}
}
Run Code Online (Sandbox Code Playgroud) amazon-ec2 amazon-web-services boto3 terraform terraform-provider-aws
我正在尝试使用 python 更新 terraform 模板,尽管我在尝试查找模块时遇到了一些问题(例如 PyYAML 来更新 yml 文件)。
我的目标是更新 git 存储库中存在的 terraform 文件,并创建一个拉取请求,合并后将触发管道以实现更改。
示例 .tf 文件:
variable "variable_1" {}
variable "variable_2" {}
locals {
temp_locals = 0
}
resource "aws_iam_role" "MY_AWS_ACCOUNT" {
name = "MY_AWS_ACCOUNT"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
},
"Principal": {
"AWS": [
"arn:aws:iam::<AWS_ACCOUNT_ID>:user/user.name1"
]
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
resource "aws_iam_role_policy_attachment" "aws_iam_role_policy_attachment" {
}
Run Code Online (Sandbox Code Playgroud)
想在这个文件中添加 user.name2 的 arn。