我正在尝试为弹性beantalk资源创建可重用的terraform模块。我一直在努力弄清楚如何传递应用程序环境变量。我想做这样的事情:
./api.tf
module "eb" {
source = "./eb"
name = "api"
vpc_id = "${var.vpc_id}"
...
environment = {
VAR1 = "${var.var1}"
VAR2 = "${var.var2}"
VAR3 = "${var.var3}"
...
}
}
Run Code Online (Sandbox Code Playgroud)
./eb/eb.tf
variable "name" { }
variable "vpc_id" { }
variable "environment" { type = "map" }
resource "aws_elastic_beanstalk_environment" "api" {
name = "${var.name}"
...
setting {
namespace = "aws:ec2:vpc"
name = "VPCId"
value = "${var.vpc_id}"
}
# application environment variables
# Here's where I'm stuck:
# I would like to …Run Code Online (Sandbox Code Playgroud) 在terraform中创建rds和elastic缓存后,我想调整优先级,以便设置ec2。
这对 terraform 可行吗?
准确地说,我在 ec2 上运行 docker。我想将弹性缓存的端点,由 terraform 创建的 RDS 传递给具有环境变量的 docker。
感谢您阅读我的问题。
我正在尝试在VMWare Hypervisor中为虚拟机创建一个实验室,以便在RHEL中安装集群; 我已经看到Packer和Terraform非常有趣,但是我找不到关于他们工作流程的清晰和/或详细的样本,特别是如何在Packer中创建图像然后让Terraform使用它.我已经看到Packer具有构建功能,但即使是某些类型的部署,我也不明白这些是否与Terraform重叠; 我已经读过可以通过另一个HashiCorp产品Atlas实现某种类型的自动化,但我不想使用它,至少在这个软件的研究和试用阶段.所以我想做的是使用Packer(RHEL base以及其他功能)创建与VMWare兼容的虚拟机映像,将它们传递给在我的esxi中创建vm的Terraform工件.
希望能找到指导.
错误:“cognito_identity_providers.0.client_id 必须仅包含字母数字字符和下划线”
此问题来自 aws_cognito_identity_pool 资源上的 client_id 和 provider_name。我们从哪里得到这些值。Terraform 不遵循 AWS 命名。我已经尝试过 Pool id 和 Pool ARN。但那些不起作用我也试过应用程序客户端ID
下面文档中提供的示例不清楚
cognito_identity_providers {
client_id = "6lhlkkfbfb4q5kpp90urffae"
provider_name = "cognito-idp.us-east-1.amazonaws.com/us-east-1_Tv0493apJ"
server_side_token_check = false
}
Run Code Online (Sandbox Code Playgroud) 我试图部署多个EC2实例,每个实例使用相同的aws_instance资源块在不同的子网中。
当我将count参数设置为多个服务器时,它将在同一子网中全部建立它们。
有没有办法通过Terraform做到这一点?
在下面,您将找到我的Terraform块:
resource "aws_instance" "ec2-instance" {
ami = "${var.ec2_ami}"
instance_type = "${var.instance_type}"
key_name = "${var.key_name}"
vpc_security_group_ids = ["${var.security_group}"]
subnet_id = "${var.subnet_id}"
count = "${var.count}"
root_block_device {
volume_size = "${var.root_volume_size}"
volume_type = "${var.root_volume_type}"
}
tags {
Name = "${var.app_name}"
}
}
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控制台获取子字符串。
> echo 'element(split (".", "10.250.3.0/24"), 2)' | terraform console
> 3
Run Code Online (Sandbox Code Playgroud)
我的子网是10.250.3.0/24,我希望我的虚拟机在此子网掩码10.250.3.6中获得私有IP地址。我希望通过查看子网地址来自动分配该地址。我尝试过的
测试文件
variable subnet {
type = "string"
default = "10.250.3.0/24"
description = "subnet mask myTestVM will live"
}
variable myTestVM_subnet {
type = "string"
default = "10.250." ${element(split(".", var.trusted_zone_onpremises_subnet), 2)} ".6"
}
Run Code Online (Sandbox Code Playgroud)
然后我通过测试
terraform console
>Failed to load root config module: Error parsing /home/anum/test/test.tf: At 9:25: illegal char
Run Code Online (Sandbox Code Playgroud)
我想这只是简单的语法问题。但不知道是什么!
我正在使用"google_sql_database_instance"资源来创建仅具有私有IP的云实例,并从变量文件或命令行参数中获取_private_network_的值,或者根本不提供任何值.
所有我想要实现的是,创建只有私有IP实例private_network提供,包括_private_network_参数仅如果提供了它的价值.这里的问题是这个变量不接受空字符串(""),因为它验证了下面的正则表达式.
"projects/((?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)))/global/networks/((?:[a-z](?:[-a-z0-9]*[a-z0-9])?))$".
我如何创建一个可配置的模块(仅在提供private_network时创建私有IP实例,否则完全忽略该参数)并且不强制要求_private_network_变量的值?
使用terraform,我能够创建启用KMS加密的S3存储桶。但是,当我尝试从启用了S3 KMS的存储桶中下载任何文件时,它无法下载Access Denied
错误日志:
download failed: s3://services-1234567890-cicd-storage/jars/jdbc-0.211.jar to utilities/jdbc-0.211.jar An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
Run Code Online (Sandbox Code Playgroud)
主文件
resource "aws_s3_bucket" "s3_bucket_two" {
bucket = "dev-analytics-data"
# bucket = "services-${lookup(var.aws_account_id, terraform.workspace)}-cicd-storage"
acl = "${var.acl}"
versioning {
enabled = "${var.enable_versioning}"
}
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = "${data.terraform_remote_state.kms_s3.key_arn}"
sse_algorithm = "aws:kms"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用的IAM政策:-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::12345678910:role/iam_role_devops_engineer",
"arn:aws:iam:: 12345678910:role/EMR_AutoScaling_DefaultRole",
"arn:aws:iam:: 12345678910:role/EMR_DefaultRole",
"arn:aws:iam:: 12345678910:user/iam_user_cng_jenkins",
"arn:aws:iam:: …Run Code Online (Sandbox Code Playgroud)