我正在使用带有ansible配置器的打包器来构建一个ami,并使用这个ami作为源来设置基础设施 - 与本文有点类似:http://www.paulstack.co.uk/blog/2016/01/ 02 /建筑物-AN-elasticsearch群集式-AWS与-封隔器和terraform
当命令packer build pack.json成功完成时,我以这种格式获得输出ami id:
eu-central-1: ami-12345678
Run Code Online (Sandbox Code Playgroud)
在我的terraform变量中,variables.tf我需要指定源ami id,region等.这里的问题是我不想手动或多次指定它们.对于区域(我事先知道),因为我可以在两种情况下使用环境变量,所以很容易,但是输出ami呢?是否有内置的方式来链接这些产品或一些不那么hacky方法来做到这一点?
编辑: Hacky方法适用于任何可能感兴趣的人.在这个解决方案中,我是grep来自packer输出的aws region&ami,并在perl中使用正则表达式将结果写入terraform.tfvars文件:
vars=$(pwd)"/terraform.tfvars"
packer build pack.json | \
tee /dev/tty | \
grep -E -o '\w{2}-\w+-\w{1}: ami-\w+' | \
perl -ne '@parts = split /[:,\s]+/, $_; print "aws_amis." . $parts[0] ." = \"" . $parts[1] . "\"\n"' > ${vars}
Run Code Online (Sandbox Code Playgroud) 我能够使用此链接在亚马逊S3中创建一个桶.
我使用以下代码创建一个存储桶:
resource "aws_s3_bucket" "b" {
bucket = "my_tf_test_bucket"
acl = "private"
}
Run Code Online (Sandbox Code Playgroud)
现在我想在桶内创建文件夹,比方说Folder1.
我找到了创建S3对象的链接.但这有一个强制性参数source.我不确定这个值有什么,因为我的意图是在S3存储桶中创建一个文件夹.
我是 terraform 的新手,我在模块结构上创建了一个自定义的 azure 策略。每个策略代表一个自定义模块。我创建的模块之一是为创建的任何新 azure 资源启用诊断日志。但是,我需要一个存储帐户。(在启用诊断设置之前,我如何实现“depends_on”?或任何其他方法?
我想首先创建存储帐户,然后创建诊断设置模块。在main.tf(调用所有其他模块的地方)或资源内部(模块)?
谢谢您的帮助!!:)
下面的代码代表 main.tf 文件:
//calling the create storage account name
module "createstorageaccount" {
source = "./modules/module_create_storage_account"
depends_on = [
"module_enable_diagnostics_logs"
]
}
Run Code Online (Sandbox Code Playgroud)
这个代表创建存储帐户模块
resource "azurerm_resource_group" "management" {
name = "management-rg"
location = "West Europe"
}
resource "azurerm_storage_account" "test" {
name = "diagnostics${azurerm_resource_group.management.name}"
resource_group_name = "${azurerm_resource_group.management.name}"
location = "${azurerm_resource_group.management.location}"
account_tier = "Standard"
account_replication_type = "LRS"
tags = {
environment = "diagnostics"
}
}
depends_on = [
"module_enable_diagnostics_logs"
]
Run Code Online (Sandbox Code Playgroud) 首先 - 抱歉 - 我对使用 terraform 非常陌生(3 小时后!)。
我希望尝试在另一个变量的声明中使用变量的值。
下面是我的代码 - 我做错了什么?
变量.tf:
variable "EnvironmentName" {
type = "string"
}
variable "tags" {
type = "map"
default = {
Environment = "${var.EnvironmentName}"
CostCentre = "C1234"
Project = "TerraformTest"
Department = "Systems"
}
}
Run Code Online (Sandbox Code Playgroud)
变量-dev.tfvars:
EnvShortName = "Dev"
EnvironmentName = "Development1"
#Location
Location = "westeurope"
Run Code Online (Sandbox Code Playgroud)
主要.tf:
resource “azurerm_resource_group” “TestAppRG” {
name = “EUW-RGs-${var.EnvShortName}”
location = “${var.Location}”
tags = “${var.tags}”
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误:variables.tf 第 18 行,在变量
“tags”中不允许使用变量:18:Environment = “${var.EnvironmentName}”
此处不能使用变量。
我知道错误消息是不言自明的,这可能是我的方法错误 - …
我对使用 terraform 的 GCP 非常陌生,我想使用集中式工具部署我的所有模块。
有没有什么办法可以去掉每次启用google API的步骤,这样部署就不会中断?
有没有办法实现以下逻辑
variable "environment" {
description = "The environment this will be run in can only be set to [preprod|test|prod]"
type = string
default = "test"
validation {
condition = can(regex("^(prod|preprod|test)$", var.environment))
error_message = "The environment variable can only be set to [prod|preprod|test]."
}
}
variable "fet_code" {
description = "Set the feature code"
type = string
default = ""
validation {
condition = var.environment == "test" && length(var.fet_code) != 3
error_message = "The environment has been set to 'test' but …Run Code Online (Sandbox Code Playgroud) 我正在使用它terraform创建一个web-aclinaws并希望将其web-acl与 CloudFront 发行版关联起来。
所以,我的代码如下所示:
provider "aws" {
alias = "east1"
region = "us-east-1"
}
# -------------------------------------------
# -------------------------------------------
# Cloud Front
module "front_end_cloudfront" {
source = "./modules/front-end/CF"
# CF_ALIASES = ["terraformer-frontend.dev.effi.com.au"]
CF_LAMBDA_ARN = module.frontend_lambda.cf_lambda_qualified_arn
CF_BUCKET_DOMAIN_NAME = module.front_end_bucket.website_endpoint
CF_BUCKET_ORIGIN_ID = module.front_end_bucket.website_domain
CF_TAGS_LIST = { "Name" : "terraformer-front-end-cloudfrontv2" }
CF_CERTFICATE_ARN = var.CLOUDFRONT_US_EAST_1_ACM_ARN
# WEB_ACL = module.waf.web_acl_id
WEB_ACL = module.waf_cf.web_acl_id
depends_on = [module.waf_cf]
}
# -------------------------------------------
# -------------------------------------------
# WAF for CF
module "waf_cf" { …Run Code Online (Sandbox Code Playgroud) 我开始使用Terraform,我正在关注他的Github存储库上的项目更新.
我看到发布部分提供了新版本:https: //github.com/hashicorp/terraform/releases
我按照以下步骤安装了Terraform工具:https: //www.terraform.io/intro/getting-started/install.html
新版本是带有基本代码的zip文件,但我想知道如何在我的计算机(OSX)上安装它.我第一次安装时下载的是一个zip文件,只有一个"terraform"文件作为unix可执行文件.
我如何从github发布部分提供的zip中生成这个Unix可执行文件?
任何的想法?
谢谢!
我正在尝试将eu-central-1颁发的证书用于我的 apigateway,它是区域性的并且在同一区域工作。
我的地形代码如下:
//ACM Certificate
provider "aws" {
region = "eu-central-1"
alias = "eu-central-1"
}
resource "aws_acm_certificate" "certificate" {
provider = "aws.eu-central-1"
domain_name = "*.kumite.xyz"
validation_method = "EMAIL"
}
//Apigateway
resource "aws_api_gateway_rest_api" "kumite_writer_api" {
name = "kumite_writer_api"
endpoint_configuration {
types = ["REGIONAL"]
}
}
resource "aws_api_gateway_domain_name" "domain_name" {
certificate_arn = aws_acm_certificate.certificate.arn
domain_name = "recorder.kumite.xyz"
endpoint_configuration {
types = ["REGIONAL"]
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不断收到此错误:
错误:创建 API 网关域名时出错:BadRequestException:无法在 REGIONAL 处于活动状态时为 EDGE 导入证书。
我在这里缺少什么?我认为我的 ApiGateway 不是 EDGE 而是 REGIONAL,所以找不到错误的意义......
我正在为 编写某种包装模块azurerm_storage_account。
azurerm_storage_account有可选块
static_website {
index_document = string
error_404_document = string
}
Run Code Online (Sandbox Code Playgroud)
我想根据变量设置它,但我不太确定该怎么做?条件运算符实际上不适用于块(例如static_website = var.disable ? null : { .. })
或者块是否以这样的方式工作,如果我设置index_document和error_404_document,它与完全不设置块null相同?static_website
azurerm@2.x
TF@0.12.x