使用“terraform import”语法可以直接从 Terraform 导入资源。然而, terraspace没有关于此事的文档。他们的文档仅讨论如何通过将现有的 Terraform 状态文件移动到 S3 并配置后端来将其导入 Terraspace,以便 Terraspace 可以无缝地获取已经存在的 tfstate 文件。
有谁知道如何将现有基础设施导入 Terraspace?我在 AWS 中有一些现有的基础设施,我希望今后将其导入并由 Terraspace 管理。
在此示例中,我尝试创建 3 个 EC2 实例,每个实例都分配有一个弹性 IP。我想通过以下内容来实现这一目标。
resource "aws_instance" "web_servers" {
ami = "ami-09e67e426f25ce0d7"
instance_type = "t3.micro"
...
count = 3
}
Run Code Online (Sandbox Code Playgroud)
并且,与其他网络实例一起,
resource "aws_eip" "elastic_ip" {
for_each = aws_instance.web_servers
instance = each.key
vpc = true
}
Run Code Online (Sandbox Code Playgroud)
然而,这说明了以下几点:
The given "for_each" argument value is unsuitable: the "for_each" argument must be a map, or set of strings, and you have provided a value of type tuple.
Run Code Online (Sandbox Code Playgroud)
我尝试将其包装for_each在 a 中toset(),其中还表示存在未知数量的实例的问题 - 但我知道有 3 个。count我在&关键字周围遗漏了什么吗for_each?
我正在尝试使用Terraform创建AWS RDS 数据库实例。我正在尝试使用PostgreSQL 12作为数据库。除了监控部分之外,一切似乎都很好,我无法在脚本中指定“ monitoring_role_arn ”。
\n以下是我用于创建 PostgreSQL 数据库实例的 Terraform 脚本:
\nrds.tf
\n# AWS PSQL RDS Instance \nresource "aws_db_instance" "test-DB" {\n\n depends_on = [aws_security_group.test-PSQL-DB-SG, aws_iam_role.test-IAM-Role-RDS]\n\n // General Configurations\n name = "testdb"\n identifier = "am-poc-spoke1-db"\n engine = "postgres"\n engine_version = "12.5"\n instance_class = "db.t2.micro" \n parameter_group_name = "default.postgres12"\n port = "5432"\n\n // Authentication\n username = "postgres"\n password = "postgres"\n\n // Storage Configurations\n storage_type = "gp2"\n allocated_storage = 20\n max_allocated_storage = 100\n\n // …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-rds amazon-iam terraform terraform-provider-aws
我已按照 hashCorp 教程进行部署和 EKS 集群。当使用他们的 tf 文件时,它会成功初始化。如果我使用下面的 tf 文件,它会引发 terraform-aws-modules/eks 错误,并且它为什么这样做是没有意义的。
\nvariable "region" {\n default = "us-west-2"\n description = "AWS region"\n}\n\nprovider "aws" {\n region = "us-west-2"\n}\n\nprovider "kubernetes" {\n host = data.eks_cluster.cluster.endpoint\n cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority.0.data)\n token = data.eks_cluster_auth.cluster.token\n load_config_file = false\n}\n\ndata "aws_availability_zones" "available" {}\n\ndata "eks_cluster" "cluster" {\n name = module.eks.cluster_id\n}\n\ndata "eks_cluster_auth" "cluster" {\n name = module.eks.cluster_id\n}\n\nlocals {\n cluster_name = "development-eks-${random_string.suffix.result}"\n}\n\nresource "random_string" "suffix" {\n length = 8\n special = false\n}\n\n\nmodule "eks" {\n source = "terraform-aws-modules/eks/aws"\n cluster_name = local.cluster_name\n cluster_version = "1.17"\n …Run Code Online (Sandbox Code Playgroud) 我正在编写一个脚本,负责运行 terraform 文件并创建基础设施。我有一个要求,我需要将 terraform 的输出放入同一脚本中以创建数据库架构。我需要获取端点、用户名、密码和数据库名称,并将其作为脚本的输入来登录数据库并创建架构。我需要从已创建的 terraform 中获取 aws_db_instance 的输出,并将其作为输入推送到 bash 脚本中。任何有关我们如何实现这一目标的帮助将不胜感激。提前致谢。下面是我将在脚本中使用的架构代码,并且需要来自 terraform 的这些输入。
RDS_MYSQL_USER="Username";
RDS_MYSQL_PASS="password";
RDS_MYSQL_BASE="DB-Name";
mysql -h $RDS_MYSQL_ENDPOINT -P $PORT -u $RDS_MYSQL_USER -p $RDS_MYSQL_PASS -D $RDS_MYSQL_BASE -e 'quit';```
Run Code Online (Sandbox Code Playgroud) 我想将 Terraform 中的资源“数据”用于 sns 主题,但我不想在 aws-account 中寻找资源,因为我正在为其部署其他资源。它应该查找我的其他 aws 帐户(在同一组织中)并在那里找到资源。有办法实现这一点吗?
data "aws_sns_topic" "topic_alarms_data" {
name = "topic_alarms"
}
Run Code Online (Sandbox Code Playgroud) 我的管道构建、计划和应用都很好地适合我的开发分支。当我推送到主分支时,我收到“刷新状态错误:HTTP 远程状态端点需要身份验证”。查看管道日志:(既然有人会问,令牌“$onbaord_cloud_account_into_monitoring”对范围内的项目 API 具有完整的读/写访问权限。)...
Running with gitlab-runner 13.4.1 (REDACTED)
on runner-gitlab-runner-REDACTED-REDACTED REDACTED
Resolving secrets
00:00
Preparing the "kubernetes" executor
00:00
Using Kubernetes namespace: gitlab-managed-apps
Using Kubernetes executor with image my-gitlab.io:5005/team-cloud-platform-team/terraform-modules/root-module-deployment/python-terraform14 ...
Preparing environment
00:03
Waiting for pod gitlab-managed-apps/runner-REDACTED-project-REDACTED-concurrent-REDACTED to be running, status is Pending
Running on runner-REDACTED-project-REDACTED-concurrent-REDACTED via runner-gitlab-runner-REDACTED-REDACTED...
Getting source from Git repository
00:02
Fetching changes with git depth set to 50...
Initialized empty Git repository in /builds/team-cloud-platform-team/teamcloudv2/workers/onboard-cloud-account-into-monitoring/.git/
Created fresh repository.
Checking out REDACTED as master...
Skipping Git submodules …Run Code Online (Sandbox Code Playgroud) ACM 证书验证从未完成,大约 45 分钟后超时,查看该域的 AWS 托管区域,它有一个 cname 记录。它永远不会到达创建 Api 网关域部分。
主.tf
resource "aws_acm_certificate" "cert_api" {
domain_name = var.api_domain
validation_method = "DNS"
tags = {
Name = var.api_domain
}
}
resource "aws_acm_certificate_validation" "cert_api" {
certificate_arn = aws_acm_certificate.cert_api.arn
validation_record_fqdns = aws_route53_record.cert_api_validations.*.fqdn
}
resource "aws_route53_zone" "api" {
name = var.api_domain
}
resource "aws_route53_record" "cert_api_validations" {
allow_overwrite = true
count = length(aws_acm_certificate.cert_api.domain_validation_options)
zone_id = aws_route53_zone.api.zone_id
name = element(aws_acm_certificate.cert_api.domain_validation_options.*.resource_record_name, count.index)
type = element(aws_acm_certificate.cert_api.domain_validation_options.*.resource_record_type, count.index)
records = [element(aws_acm_certificate.cert_api.domain_validation_options.*.resource_record_value, count.index)]
ttl = 60
}
resource "aws_route53_record" "api-a" …Run Code Online (Sandbox Code Playgroud) 有没有办法找出可能使用哪个版本的 Terraform 来编写多个 terraform 配置文件?
我的 terraform 版本是v1.0.11. 我刚刚克隆了一个存储库来使用,并且 terraform 配置语法看起来很旧。
我尝试搜索是否required_version已在任何地方设置,但没有任何结果。
有某种方法可以解决这个问题吗?
如果我单独运行以下命令,我会得到预期的结果 -
这 :
aws cloudfront list-cloud-front-origin-access-identities | jq -r ' .CloudFrontOriginAccessIdentityList.Items[] | select(.Comment == "Created for Nackle Shared CF in pprd").Id'
Run Code Online (Sandbox Code Playgroud)
返回这个:
E1P6ZIBDB6I6FZ
Run Code Online (Sandbox Code Playgroud)
如何使用 Terraform 外部数据源获得相同的结果?
我试过这个:
data "external" "json" {
program = ["sh", "-c", "aws cloudfront list-cloud-front-origin-access-identities | jq -r ' .CloudFrontOriginAccessIdentityList.Items[] | select(.Comment == "Created for Nackle Shared CF in pprd").Id'"]
}
output "map" {
value = ["${values(data.external.json.result)}"]
}
Run Code Online (Sandbox Code Playgroud)
但当我运行 Terraform apply 时它返回此错误 -
Expected a comma to mark the beginning of the next item.
Run Code Online (Sandbox Code Playgroud)
我假设正确写入时“值”将是 E1P6ZIBDB6I6FZ …
terraform ×9
amazon-iam ×1
amazon-rds ×1
bash ×1
gitlab ×1
gitlab-ci ×1
loops ×1
shell ×1
terraspace ×1