我很想在 Terraform 的 count/for_each 函数方面得到一些帮助。
目标是将多个 json 文件(当前两个)读入映射列表,并使用特定命名约定创建特定数量的 aws_instances。
配置
cat test_service_1.json
{
"instance_name": "front",
"instance_count": "3",
"instance_type": "t2.micro",
"subnet_type": "private",
"elb": "yes",
"data_volume": ["no", "0"]
}
cat test_service_2.json
{
"instance_name": "back",
"instance_count": "3",
"instance_type": "t2.micro",
"subnet_type": "private",
"elb": "yes",
"data_volume": ["no", "0"]
}
cat main.tf
locals {
services = [jsondecode(file("${path.module}/test_service_1.json")),
jsondecode(file("${path.module}/test_service_2.json"))]
}
resource "aws_instance" "test_instance" {
ami = "amzn-ami-hvm-2018.03.0.20200206.0-x86_64-gp2"
instance_type = "t2.micro"
tags = merge(
map("Name", "prod-app-?"),
map("env", "prod")
)
}
Run Code Online (Sandbox Code Playgroud)
最终我希望代码遍历两个 json 文件并创建:
prod-front-1
prod-front-2
prod-front-3
prod-back-1
prod-back-2 …Run Code Online (Sandbox Code Playgroud) 亚马逊最近为他们的 api 网关产品发布了HTTP API,我想使用 Terraform 来启动一些。我看到Terraform具有文档的aws_apigatewayv2_api资源,这将创造网关本身,但我找不到路,阶段,或任何其他类型的资源,我会需要我的网关文档。
Terraform 还没有完全支持 HTTP API,还是我在某处遗漏了一些文档?
amazon-web-services terraform aws-api-gateway terraform-provider-aws
我正在使用 Terraform 0.12.26 并且我想构建一个 AWS Ubuntu 机器实例。
当我运行时terraform apply,一切看起来都正确……但我无法通过 ssh 连接到新的 EC2 机器。我的家庭防火墙允许 ssh 无处不在,我可以 ssh 到任何其他互联网资源。
如果我在同一个区域/az 中手动安装 EC2 实例,ssh 工作正常……这个问题似乎仅限于 Terraform。
$ terraform apply
...
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
aws_key_pair.mykeypair: Creating...
aws_vpc.main: Creating...
aws_key_pair.mykeypair: Creation complete after 2s [id=mykeypair-pub]
aws_vpc.main: Still creating... [10s elapsed]
aws_vpc.main: Creation complete after 14s [id=vpc-0396212cf58236e68]
aws_subnet.first_subnet: Creating...
aws_security_group.ingress-policy-example: Creating...
aws_subnet.first_subnet: …Run Code Online (Sandbox Code Playgroud) amazon-ec2 amazon-web-services terraform terraform-provider-aws
我正在尝试使用 terraform创建一个AWS 仪表板来显示 S3 指标。我正在考虑遍历存储在列表变量中的所有 S3 存储桶并生成仪表板 json。
for 循环能够添加指标,但我无法删除尾随逗号,这会导致错误的 json。
代码片段:-
dashboard_body = <<EOF
{
"start":"-P6M",
"widgets": [
{
"type":"metric",
"x":0,
"y":0,
"width":12,
"height":6,
"properties":{
"metrics":[
%{ for bucket in var.buckets }
[
"AWS/S3",
"BucketSizeBytes",
"StorageType",
"StandardStorage",
"BucketName",
"${bucket}"
]
%{ endfor }
],
"period":86400,
"stat":"Average",
"region":"us-east-1",
"title":"Storage usage"
}
}
]
}
EOF
Run Code Online (Sandbox Code Playgroud)
解决方法:- 我最终在“metrics”数组的末尾硬编码了一个额外的聚合。无论如何我都需要总数,这是一个简单的解决方法。@kharandziuk 是理想的实现方式,但即使如此,您也可能需要使用此解决方法。
最终代码:-
{
"start":"-P6M",
"widgets": [
{
"type":"metric",
"x":0,
"y":0,
"width":12,
"height":6,
"properties":{ …Run Code Online (Sandbox Code Playgroud) amazon-s3 amazon-web-services terraform terraform-provider-aws
升级后,我在运行 a 时收到如下消息terraform plan:
Error: Invalid resource instance data in state
on iam_server_backup.tf line 4:
4: resource "aws_iam_access_key" "backup" {
Instance aws_iam_access_key.backup data could not be decoded from
the state: unsupported attribute "ses_smtp_password".
Run Code Online (Sandbox Code Playgroud)
我修复它的方法是删除状态 ( terraform state rm aws_iam_access_key.backup)。但是,这在我运行时创建了新的访问密钥terraform apply,这很耗时,因为我必须更改所有应用程序中的所有访问密钥。有没有更好的方法来解决这个问题?
我是使用 AWS 学习 terraform 的新手,据我所知,我可以创建一个 EC2 实例并向其传递一些终端命令(通过“user_data”)以安装软件等……
我想知道我是否可以安装 Docker、下载存储库、构建映像并进行部署。
但是如果我有一个全栈应用程序,并且我有:
Instance_1:后端
Instance_2:前端
我如何捕获 Instance_1 的 IP(通过“输出”)并将其传递给存储在 Instance_2 上的前端应用程序的源代码,以使前端能够连接到 Instance_1 上的后端?。
我知道我可以通过 github 下载源代码并通过 Docker 构建它
如果我创建一个 EC2 实例
resource "aws_instance" "Mi_Primer_Servidor"{
#Verificar el 'id' de la ami y las configuraciones con AWS
ami="ami-056cb9ae6e2df09e8"
#Seleccionamos el tipo de maquina virtual
instance_type = "t2.micro"
#Asignamos una zona de disponibilidad (OPCIONAL)
availability_zone = "us-west-2a"
#Se recomienda crear previamente la llave en AWS y descargar el archivo
#O usar una llave ya existente
key_name …Run Code Online (Sandbox Code Playgroud) amazon-ec2 amazon-web-services user-data terraform terraform-provider-aws
我正在尝试使用 terraform 为 Aurora 扩展 RDS 集群。
我正在设置一个带有 3 个服务器的 RDS 实例 - 1 个写入器和 2 个只读副本。这是我的要求
当任何服务器出现故障时,添加一个新服务器,以便副本始终至少有 3 个服务器。
当任何主机的 CPU 使用率超过 50% 时,将新服务器添加到集群。服务器的最大数量为 4。
是否可以创建一个策略,以便当 3 个服务器中的任何一个出现故障时,然后为该 RDS 实例创建一个新服务器?如果是,如何监控服务器故障?
我是否需要使用 appAutoScaling 或使用 autoScaling 或两者兼而有之?这是与我的用例匹配的链接:https : //registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/appautoscaling_policy
我正在使用 Terraform 配置我的 Infracture,我正在使用 xyz.sh bash 脚本,该脚本包含我在 GPU 机器上的深度学习模型训练。
我的问题是,如何在没有 ssh 进入机器的情况下获取 xyz.sh bash 脚本的日志/完成时间?如果不可能,那么如果我将 ssh 进入机器,我如何检查脚本是否仍在运行或已完成
我正在使用 Terraform 配置 AWS CodeBuild。在环境部分,我配置了以下内容:
environment {
compute_type = "BUILD_GENERAL1_SMALL"
image = "aws/codebuild/standard:3.0"
type = "LINUX_CONTAINER"
image_pull_credentials_type = "CODEBUILD"
environment_variable {
name = "SOME_KEY1"
value = "SOME_VALUE1"
}
environment_variable {
name = "SOME_KEY2"
value = "SOME_VALUE2"
}
}
Run Code Online (Sandbox Code Playgroud)
我的 Codebuild 项目中有 20 多个环境变量需要配置。
是否可以创建一个列表并定义一个 environment_variable 参数来配置所有环境变量?
amazon-web-services terraform aws-codebuild terraform-provider-aws
当我尝试使用 terraform 创建子网时,我不断收到以下错误。使用 aws 控制台创建子网没有问题。有人可以帮助我吗?
Error: error creating subnet: InvalidSubnet.Range: The CIDR '192.168.1.0/24' is invalid.
status code: 400
Run Code Online (Sandbox Code Playgroud)
创建 VPC 的代码:
resource "aws_vpc" "vpc_worker" {
provider = aws.region-worker
cidr_block = "198.168.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "master-vpc-jenkins"
}
}
Run Code Online (Sandbox Code Playgroud)
创建子网的代码:
#Create subnet in us-west-2
resource "aws_subnet" "subnet_1_worker" {
provider = aws.region-worker
vpc_id = aws_vpc.vpc_worker.id
cidr_block = "192.168.1.0/24"
}
Run Code Online (Sandbox Code Playgroud)
地形版本:0.12.29
提前致谢。
amazon-web-services terraform terraform-provider-aws terraform0.12+