有人有尝试在 cloudwatch 日志上设置指标过滤器的经验吗?想知道我是否发现 Terraform 中的错误?
这就是我正在尝试做的事情;
resource "aws_cloudwatch_log_metric_filter" "AWS_Console_Login" {
name = "${var.aws_account_id}_Console_Login_Failure"
pattern = "{ ($.eventName = ConsoleLogin) && ($.errorMessage = "Failed authentication") }"
log_group_name = "${var.aws_cloudtrail_name}"
metric_transformation {
name = "${var.aws_account_id}_Console_Login_Failure"
namespace = "AccountMonitoring${var.aws_account_id}"
value = "1"
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行 Terraform apply 或 validate 时,我收到此响应;
错误:解析 cloudwatch.tf 时出错:157:19:预期嵌套对象:LBRACE 得到:ASSIGN
需要明确的是,157:19 与包含 log_group_name 的代码行相关,其中 19 位于 = 符号之前。
不过,我认为这与我的模式有关,如果我删除日志组..并运行我得到的验证;
aws_cloudwatch_log_metric_filter.AWS_Console_Login::无效或未知密钥:失败
我对 AWS 过滤模式的要求是否过高?
谢谢斯蒂芬
我使用工作区、本地文件和 -backend-config 使用 terraform 创建了不同环境(测试/产品)的基础设施,因此只有两个不同的文件,其他文件对于这两种环境都是通用的。
不幸的是,我没有找到一种方法以相同的方式破坏特定环境(无需为每个环境创建大量特定文件)。
我错过了什么吗?有办法做到吗?
任何帮助,将不胜感激。
提前致谢 !
问候,
弗洛朗
编辑:感谢您的回答,我设法使用工作区、本地变量和后端配置来做我想做的事情!
我是 terraform 的新手,并试图解决测试模块时遇到的一个小问题。
以下是我本地计算机中的文件夹结构。
我在存储文件夹级别有以下代码
#-------storage/main.tf
provider "aws" {
region = "us-east-1"
}
resource "aws_s3_bucket" "my-first-terraform-bucket" {
bucket = "first-terraform-bucket"
acl = "private"
force_destroy = true
}
Run Code Online (Sandbox Code Playgroud)
以下是引用存储模块的 main_code 级别的片段
#-------main_code/main.tf
module "storage" {
source = "../storage"
}
Run Code Online (Sandbox Code Playgroud)
当我从存储文件夹发出 terraform init / plan / apply 时,它工作得非常好,并且 terraform 创建了 s3 存储桶。
但是当我从 main_code 文件夹中尝试相同的操作时,我收到以下错误 -
main_code@DFW11-8041WL3: terraform init
Initializing modules...
- module.storage
Error downloading modules: Error loading modules: module storage: No Terraform configuration files found in directory: .terraform/modules/0d1a7f4efdea90caaf99886fa2f65e95
Run Code Online (Sandbox Code Playgroud)
我已经阅读了 Stack Overflow …
我想知道如何停止错误消息中的无限循环,以便它创建 AWS EC2 实例?
地形代码如下:
provider "aws" {
region = "${var.location}"
}
resource "aws_instance" "ins1_ec2" {
ami = "${var.ami}"
instance_type = "${var.inst_type}"
tags = {
Name = "cluster"
}
provisioner "remote-exec" {
inline = [
"hostnamectl set-hostname centos-76-1",
]
}
}
resource "aws_eip" "ins1_eip" {
instance = "${aws_instance.ins1_ec2.id}"
vpc = false
}
resource "aws_instance" "ins2_ec2" {
ami = "${var.ami}"
instance_type = "${var.inst_type}"
provisioner "remote-exec" {
inline = [
"hostnamectl set-hostname centos-76-2",
]
}
tags = {
Name = "cluster"
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 API Gateway\xe2\x80\x99s VPC 链接将流量路由到 HTTPS 上的内部 API。\n但是,VPC 链接迫使我将 API\xe2\x80\x99s 负载均衡器从“应用程序”更改为“网络”。
\n\n据我所知,网络负载均衡器位于第 4 层,因此不知道 HTTPS。
\n\n我习惯使用第 7 层应用程序负载均衡器。因此,我不确定应该如何在 terraform 中配置或使用网络负载均衡器。
\n\n以下是我在 Terraform 中配置网络负载均衡器的尝试。\n健康检查失败,我不确定我做错了什么。
\n\nresource "aws_ecs_service" \xe2\x80\x9capp\xe2\x80\x9d {\n name = "${var.env}-${var.subenv}-${var.appname}"\n cluster = "${aws_ecs_cluster.cluster.id}"\n task_definition = "${aws_ecs_task_definition.app.arn}"\n desired_count = "${var.desired_app_count}"\n deployment_minimum_healthy_percent = 50\n deployment_maximum_percent = 200\n iam_role = "arn:aws:iam::${var.account}:role/ecsServiceRole"\n\n load_balancer {\n target_group_arn = "${aws_lb_target_group.app-lb-tg.arn}"\n container_name = "${var.env}-${var.subenv}-${var.appname}"\n container_port = 9000\n }\n depends_on = [\n "aws_lb.app-lb"\n ]\n}\n\nresource "aws_lb" \xe2\x80\x9capp-lb" {\n name = "${var.env}-${var.subenv}-${var.appname}"\n internal = false\n load_balancer_type = …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-elb terraform aws-api-gateway terraform-provider-aws
我正在开发 terraform rds 集群来构建 aurora,有人可以帮助我如何将 aws 提供程序版本固定到 2.0 吗?
这是正确的方法吗?
provider "aws" {
region = "us-east-1"
version = "<= 2.0"
}
Run Code Online (Sandbox Code Playgroud)
另外,我的模块之前使用的是 2.46 版本,我在尝试降级时是否应该遵循任何步骤?
使用terraform 0.12.6版本
我已按照 StackOverflow 上这篇文章的第一个答案进行操作,但收到此错误:
配置 LB 属性失败:InvalidConfigurationRequest:存储桶:myproject-log 的访问被拒绝。请检查S3bucket权限状态码:400
这是我的代码:
s3_bucket
data "aws_elb_service_account" "main" {}
resource "aws_s3_bucket" "bucket_log" {
bucket = "${var.project}-log"
acl = "log-delivery-write"
policy = <<POLICY
{
"Id": "Policy",
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::${var.project}-log/AWSLogs/*",
"Principal": {
"AWS": [
"${data.aws_elb_service_account.main.arn}"
]
}
}
]
}
POLICY
}
Run Code Online (Sandbox Code Playgroud)
负载均衡器
resource "aws_lb" "vm_stage" {
name = "${var.project}-lb-stg"
internal = false
load_balancer_type = "application"
subnets = [aws_subnet.subnet_1.id, aws_subnet.subnet_2.id, aws_subnet.subnet_3.id]
security_groups = [aws_security_group.elb_project_stg.id]
access_logs {
bucket …Run Code Online (Sandbox Code Playgroud) 我在使用 Terraform 部署 EKS 集群中的节点组时遇到问题。该错误看起来像是一个插件有问题,但我不知道如何解决它。
如果我在 AWS 控制台(Web)中看到 EC2,我可以看到集群的实例,但集群中出现此错误。
该错误显示在我的管道中:
错误:等待 EKS 节点组 (UNIR-API-REST-CLUSTER-DEV:node_sping_boot) 创建:NodeCreationFailure:实例未能加入 kubernetes 集群。资源 ID:[i-05ed58f8101240dc8]
在 EKS.tf 第 17 行,资源“aws_eks_node_group”“nodes”中:
17:资源“aws_eks_node_group”“nodes”
2020-06-01T00:03:50.576Z [DEBUG]插件:插件进程退出:路径=/home/ubuntu/.jenkins/workspace/shop_infraestucture_generator_pipline/shop-proyect-dev/.terraform/plugins/linux_amd64/terraform-provider-aws_v2.64.0_x4 pid=13475
2020-06-01T00:03:50.576Z [DEBUG]插件:插件已退出
并且错误打印在AWS控制台中:
这是我用来创建项目的 Terraform 中的代码:
EKS.tf用于创建集群和节点
resource "aws_eks_cluster" "CLUSTER" {
name = "UNIR-API-REST-CLUSTER-${var.SUFFIX}"
role_arn = "${aws_iam_role.eks_cluster_role.arn}"
vpc_config {
subnet_ids = [
"${aws_subnet.unir_subnet_cluster_1.id}","${aws_subnet.unir_subnet_cluster_2.id}"
]
}
depends_on = [
"aws_iam_role_policy_attachment.AmazonEKSWorkerNodePolicy",
"aws_iam_role_policy_attachment.AmazonEKS_CNI_Policy",
"aws_iam_role_policy_attachment.AmazonEC2ContainerRegistryReadOnly",
]
}
resource "aws_eks_node_group" "nodes" {
cluster_name = "${aws_eks_cluster.CLUSTER.name}"
node_group_name = "node_sping_boot"
node_role_arn = "${aws_iam_role.eks_nodes_role.arn}" …Run Code Online (Sandbox Code Playgroud) amazon-web-services kubernetes terraform terraform-provider-aws amazon-eks
使用 terraform 或 eksctl 生成新的 AWKS EKS 集群有什么好处吗?
与另一种相比,是否有一些长期维护的好处?
我正在尝试实现某种机制,让某人可以填写一个变量,该变量定义是要部署 Amazon Linux 机器还是自行创建的打包机。但由于某种原因,它在找到我自己的 AMI 的同时却没有找到 AWS AMI。这是代码:
模块的Main.tf:
data "aws_ami" "latest" {
most_recent = true
owners = [var.owner]
filter {
name = "name"
values = [lookup(var.default_ami, var.ami)]
}
}
resource "aws_instance" "test-ec2deployment" {
ami = data.aws_ami.latest.id
Run Code Online (Sandbox Code Playgroud)
变量.tf:
variable "default_ami" {
type = map
description = "Choose windows 2016 or 2019"
default = {
"2016" = "WIN2016-CUSTOM*"
"2019" = "WIN2019-CUSTOM*"
"linux" = "ami-0fb02dcdd38048fb9"
}
}
#Above are the options, here you need to make a decision.
variable "ami" {
description …Run Code Online (Sandbox Code Playgroud) amazon-web-services terraform terraform-provider-aws terraform0.12+