我在使用Terraform(v0.9.2)向ELB添加服务时遇到了问题(我正在使用:https://github.com/segmentio/stack/blob/master/s3-logs/main.tf).
当我运行时,terraform apply我收到此错误:
* module.solr.module.elb.aws_elb.main: 1 error(s) occurred:
* aws_elb.main: Failure configuring ELB attributes:
InvalidConfigurationRequest: Access Denied for bucket: my-service-
logs. Please check S3bucket permission
status code: 409, request id: xxxxxxxxxx-xxxx-xxxx-xxxxxxxxx
Run Code Online (Sandbox Code Playgroud)
我的服务如下:
module "solr" {
source = "github.com/segmentio/stack/service"
name = "${var.prefix}-${terraform.env}-solr"
environment = "${terraform.env}"
image = "123456789876.dkr.ecr.eu-west-2.amazonaws.com/my-docker-image"
subnet_ids = "${element(split(",", module.vpc_subnets.private_subnets_id), 3)}"
security_groups = "${module.security.apache_solr_group}"
port = "8983"
cluster = "${module.ecs-cluster.name}"
log_bucket = "${module.s3_logs.id}"
iam_role = "${aws_iam_instance_profile.ecs.id}"
dns_name = ""
zone_id = "${var.route53_zone_id}"
} …Run Code Online (Sandbox Code Playgroud) amazon-s3 amazon-web-services terraform elastic-load-balancer
我正在使用 terraform 创建 RDS 实例,为此我需要有一个aws_db_subnet_group资源。我可以使用 Amazon 网站创建的 aws_db_subnet_group 创建 RDS,但是当我尝试从 terraform 脚本创建 aws_db_subnet_group 时,我收到错误 InvalidParameterValue。
这是地形脚本:
resource "aws_db_subnet_group" "default" {
name = "cse-cr"
description = "Private subnets for RDS instance"
subnet_ids = ["subnet-0c8764fcb28b04c8c", "subnet-0ca53ff9b621e2c89"]
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
Error: Error applying plan:
1 error(s) occurred:
* aws_db_subnet_group.default: 1 error(s) occurred:
* aws_db_subnet_group.default: Error creating DB Subnet Group: InvalidParameterValue: Some input subnets in :[subnet-0ca53ff9b621e2c89, subnet-0c8764fcb28b04c8c] are invalid.
status code: 400, request id: 66166ec8-9b79-41d3-bdf7-a5cdb66f5f95
Terraform does not automatically rollback in the face …Run Code Online (Sandbox Code Playgroud) 我有一组 Terraform 文件,特别是一个 Variables.tf 文件,它保存了我的变量,如 aws 访问密钥、aws 访问令牌等。我现在想使用 GitLab CI / CD 在 AWS 上自动创建资源。
我的计划如下:
编写 .gitlab-ci-yml 文件
在 .gitlab-ci.yml 文件中进行 terraform 调用
我知道我可以在 GitLab 中拥有秘密环境变量,但我不确定如何将这些变量推送到我的 Terraform Variables.tf 文件中,现在看起来像这样!
# AWS Config
variable "aws_access_key" {
default = "YOUR_ADMIN_ACCESS_KEY"
}
variable "aws_secret_key" {
default = "YOUR_ADMIN_SECRET_KEY"
}
variable "aws_region" {
default = "us-west-2"
}
Run Code Online (Sandbox Code Playgroud)
在我的 .gitlab-ci.yml 中,我可以访问如下秘密:
- 'AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}'
- 'AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}'
- 'AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}'
Run Code Online (Sandbox Code Playgroud)
如何将其传送到我的 Terraform 脚本?有任何想法吗?我需要从 GitLab 环境中读取秘密并将其传递给 Terraform 脚本!
我想在 Terraform 0.12 中连接两个数组。在我的示例中,有公共和私有子网。我想将它们分配给相同的网络访问列表。以下代码缩短:
data "aws_subnet_ids" "private" {
vpc_id = aws_vpc.main.id
tags = {
subnet-type = "private"
}
}
data "aws_subnet_ids" "public" {
vpc_id = aws_vpc.main.id
tags = {
subnet-type = "public"
}
}
resource "aws_network_acl" "networks" {
vpc_id = aws_vpc.main.id
subnet_ids = concat(data.aws_subnet_ids.private.ids, data.aws_subnet_ids.public.ids)
[...]
}
Run Code Online (Sandbox Code Playgroud)
如果我使用以下输出:
output "private_subnets" {
value = data.aws_subnet_ids.private.ids
}
output "public_subnets" {
value = data.aws_subnet_ids.public.ids
}
Run Code Online (Sandbox Code Playgroud)
生成以下输出:
private_subnets = [
"subnet-243zr427rhhfjseb9",
"subnet-we789rh2438fchb6e",
"subnet-092rz7g82fhhkui74",
]
public_subnets = [
"subnet-12230qegvg764e9d",
"subnet-123465svgvgf0d7e",
]
Run Code Online (Sandbox Code Playgroud)
所以一切都应该有效。但是给出了以下错误:
iptizer@machine:~/src/infra$ terraform12 apply …Run Code Online (Sandbox Code Playgroud) 我收到这个奇怪的错误信息
PlatformTaskDefinitionIncompatibilityException: 指定的平台不满足任务定义所需的功能
我怀疑这与这条线有关,虽然不太确定
file_system_id = aws_efs_file_system.main.id
这是我的脚本:
provider "aws" {
region = "us-east-1"
profile = var.profile
}
### Network
# Fetch AZs in the current region
data "aws_availability_zones" "available" {}
resource "aws_vpc" "main" {
cidr_block = "172.17.0.0/16"
}
# Create var.az_count private subnets, each in a different AZ
resource "aws_subnet" "private" {
count = "${var.az_count}"
cidr_block = "${cidrsubnet(aws_vpc.main.cidr_block, 8, count.index)}"
availability_zone = "${data.aws_availability_zones.available.names[count.index]}"
vpc_id = "${aws_vpc.main.id}"
}
# Create var.az_count public subnets, each in a different AZ
resource "aws_subnet" …Run Code Online (Sandbox Code Playgroud) 运行时terraform plan或terraform apply使用提供给for_each错误的列表时,说
Error: Invalid for_each argument
on main.tf line 2, in resource "aws_ssm_parameter" "foo":
2: for_each = ["a", "b"]
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)
重现此错误的最小示例如下:
resource "aws_ssm_parameter" "foo" {
for_each = ["a", "b"]
name = "foo-${each.value}"
type = "String"
value = "bar-${each.value}"
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Terraform 资源创建一个带有 ALB 入口的 AWS EKS 集群。
该文档表明入口将自动创建一个带有关联侦听器和目标组的负载均衡器。
Kubernetes Ingress 创建 ALB 负载均衡器、安全组和规则,但不创建目标组或侦听器。我曾尝试使用网关或应用程序子网,但没有任何区别。我尝试设置安全组,但 ALB 设置并使用了它自己的自我管理的安全组。
我依赖本指南
ALB 的卷曲让我感到
无法连接到 de59ecbf-default-mainingre-8687-1051686593.ap-southeast-1.elb.amazonaws.com 端口 80:连接被拒绝
我分别创建了 IAM 角色和 ACM 证书,因为 AWS 对这些有配额限制。我的 EKS 集群和节点角色是标准的,节点角色附加了最新的策略。
我曾经kubectl单独应用 kubernetes 入口,但结果相同。它创建 ALB 和一个安全组,其中包含端口规则,但没有目标组或侦听器。
当我将集群端点粘贴aws eks describe-cluster --name my-tf-eks-cluster --query "cluster.endpoint"到浏览器中时,我得到以下信息:
{ "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "forbidden: User "system:anonymous" cannot get path "/ "", "reason": "Forbidden", "details": { }, "code": 403 }
此外,入口没有 IP 地址。 …
terraform kubernetes-ingress terraform-provider-aws amazon-eks
Terraform v0.12.12
+ provider.aws v3.0.0
+ provider.template v2.1.2
Run Code Online (Sandbox Code Playgroud)
在我这样做之前:
resource "aws_route53_record" "derps" {
name = aws_acm_certificate.mycert[0].resource_record_name
type = aws_acm_certificate.mycert[0].resource_record_type
zone_id = var.my_zone_id
records = aws_acm_certificate.mycert[0].resource_record_value
ttl = 60
}
Run Code Online (Sandbox Code Playgroud)
大约一周前,这对我来说效果很好。
我刚刚做了一个计划,却出现了错误:
records = [aws_acm_certificate.mycert.domain_validation_options[0].resource_record_value]
This value does not have any indices.
Run Code Online (Sandbox Code Playgroud)
现在我不固定提供者版本,所以我假设我拉了一个更新的版本并且资源发生了变化。
在与这个斗争并意识到它不是一个列表(即使这样做show state时看起来确实像一个列表)我现在这样做是为了使它成为一个列表:
resource "aws_route53_record" "derps" {
name = sort(aws_acm_certificate.mycert.domain_validation_options[*].resource_record_name)[0]
type = sort(aws_acm_certificate.mycert.domain_validation_options[*].resource_record_type)[0]
zone_id = var.my_zone_id
records = [sort(aws_acm_certificate.mycert.domain_validation_options[*].resource_record_value)[0]]
ttl = 60
}
Run Code Online (Sandbox Code Playgroud)
这导致没有变化,这是好的。但是,如果我使用他们现在使用 for_each 的文档中的示例来执行此操作:https : //registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/acm_certificate_validation
resource "aws_route53_record" "example" {
for_each = {
for …Run Code Online (Sandbox Code Playgroud) 我在远程 terraform-cloud 中管理状态
我已经下载并安装了最新的 terraform 0.13 CLI
然后我删除了.terraform。
然后我跑terraform init了,没有错误
然后我做了
? terraform apply -var-file env.auto.tfvars
Error: Provider configuration not present
To work with
module.kubernetes.module.eks-cluster.data.null_data_source.node_groups[0] its
original provider configuration at provider["registry.terraform.io/-/null"] is
required, but it has been removed. This occurs when a provider configuration
is removed while objects created by that provider still exist in the state.
Re-add the provider configuration to destroy
module.kubernetes.module.eks-cluster.data.null_data_source.node_groups[0],
after which you can remove the provider configuration again.
Releasing state lock. …Run Code Online (Sandbox Code Playgroud)