Terraform找不到在引用所在的文件中声明的资源。
看来这行正在引起麻烦:role_arn = "${aws_iam_role.newsapi_lambda_codepipeline.arn}"。它找不到newsapi_lambda_codepipeline哪个声明为resource "aws_iam_role" "newsapi_lambda_codepipeline" { ... }。
这是我的main.tf:
resource "aws_s3_bucket" "newsapi_lambda_builds" {
bucket = "newsapi-lambda-builds"
acl = "private"
}
resource "aws_iam_role" "newsapi_lambda_codebuild" {
name = "newsapi-lambda-codebuild"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketVersioning"
],
"Resource": "arn:aws:s3:::newsapi_lambda_builds",
"Effect": "Allow"
},
{
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::newsapi_lambda_builds"
],
"Effect": "Allow"
},
{
"Action": [
"lambda:invokefunction",
"lambda:listfunctions"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Effect": "Allow", …Run Code Online (Sandbox Code Playgroud) amazon-web-services terraform devops-services hcl terraform-provider-aws
我有一个Terraform脚本,它创建启动配置,自动缩放组,单个ALB,一个目标组和一个侦听器。使用自动扩展组启动实例。
如何在同一脚本中通过Terraform在目标组中添加新启动的实例?
resource "aws_launch_configuration" "CF2TF-LC" {
name = "CF2TF-LC"
depends_on = ["aws_iam_role_policy_attachment.CF2TF-IAM-PA", "aws_security_group.CF2TF-SG-Web"]
image_id = "ami-14c5486b"
instance_type = "t2.micro"
iam_instance_profile = "${aws_iam_instance_profile.CF2TF-IAM-IP.id}"
key_name = "CF2TF"
security_groups = ["${aws_security_group.CF2TF-SG-Web.id}"]
user_data = "${template_file.CF2TF-UserData.rendered}"
}
resource "aws_autoscaling_group" "CF2TF-ASG" {
name = "CF2TF-ASG"
depends_on = ["aws_launch_configuration.CF2TF-LC"]
vpc_zone_identifier = ["${aws_subnet.CF2TF-Subnet-1a.id}", "${aws_subnet.CF2TF-Subnet-1d.id}"]
max_size = 3
min_size = 2
health_check_grace_period = 300
health_check_type = "EC2"
desired_capacity = 2
force_delete = true
launch_configuration = "${aws_launch_configuration.CF2TF-LC.id}"
}
resource "aws_lb" "CF2TF-ALB" {
name = "CF2TF-ALB"
subnets = ["${aws_subnet.CF2TF-Subnet-1a.id}", "${aws_subnet.CF2TF-Subnet-1d.id}"]
internal …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用公共和私有子网以及 Aurora mysql 集群和实例在同一个 vpc 中创建一个带有 RDS 自定义安全组的 vpc。
我在一个模块中创建了 vpc(公共/私有子网,自定义安全组)。还有不同模块中的 aurora-mysql。
我在模块文件中的 vpc 配置
resource "aws_vpc" "main" {
cidr_block = "${var.vpc_cidr}"
instance_tenancy = "${var.tenancy}"
enable_dns_support = "true"
enable_dns_hostnames = "true"
tags {
Name = "${var.tag_name}"
}
}
resource "aws_subnet" "main-public-1" {
vpc_id = "${var.vpc_id}"
cidr_block = "${var.subnet_cidr_1}"
availability_zone = "${var.region}a"
map_public_ip_on_launch = true
tags {
Name = "${var.tag_name}-subnet1"
}
}
resource "aws_subnet" "main-private-1" {
count = "${var.create_private_subnet}"
vpc_id = "${var.vpc_id}"
cidr_block = "${var.private_subnet_cidr_1}"
map_public_ip_on_launch = false
availability_zone = "${var.region}a" …Run Code Online (Sandbox Code Playgroud) amazon-web-services terraform amazon-aurora terraform-provider-aws
我似乎无法从 ACM 使用 terraform 在 API-Gateway、Route53 上获得 SSL 证书。似乎存在相互依赖的问题。
data "aws_route53_zone" "root_domain" {
name = "${var.route53_root_domain_name}"
private_zone = false
}
# The domain name to use with api-gateway
resource "aws_api_gateway_domain_name" "domain_name" {
domain_name = "${var.route53_sub_domain_name}"
certificate_arn = "${aws_acm_certificate.cert.arn}"
}
resource "aws_route53_record" "sub_domain" {
name = "${var.route53_sub_domain_name}"
type = "A"
zone_id = "${data.aws_route53_zone.root_domain.zone_id}"
alias {
name = "${aws_api_gateway_domain_name.domain_name.cloudfront_domain_name}"
zone_id = "${aws_api_gateway_domain_name.domain_name.cloudfront_zone_id}"
evaluate_target_health = false
}
}
resource "aws_acm_certificate" "cert" {
# api-gateway / cloudfront certificates need to use the us-east-1 region …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-route53 terraform aws-api-gateway terraform-provider-aws
我刚刚运行了 Terraform 升级。我的代码已更新,但现在显示一些错误。第一个是:
variable "s3_bucket_name" {
type = list(string)
default = [
"some_bucket_name",
"other_bucket_name",
...
]
}
Run Code Online (Sandbox Code Playgroud)
它不喜欢list(string)。我回到第一个并重新编写了整个入门教程。它说我可以显式声明type = list,也可以通过省略类型并仅使用 [方括号] 来隐式声明它。
我在这里看到:Unknown token IDENT list error for IP address variable that I can use "list"(quotes) but I can't find any information on list(string).
所以我注释掉了我的list(string),将错误移到了下一部分。
provider "aws" {
region = var.aws_region
}
Run Code Online (Sandbox Code Playgroud)
该教程指出这是创建区域标签的正确方法(实际上教程的一部分包含该确切代码)。
任何人都可以帮助我理解Unknown token IDENT它在我的代码中的含义,但这并不能帮助我理解我应该做什么来修复它。
我需要将策略添加到我之前在 Terraform 文件中创建的存储桶。
但是,这个错误与
创建 S3 存储桶时出错:BucketAlreadyOwnedByYou:您之前创建指定存储桶的请求已成功,并且您已拥有该存储桶。
如何修改 .tf 文件来创建存储桶,然后更新它?
resource "aws_s3_bucket" "bucket" {
bucket = "my-new-bucket-123"
acl = "public-read"
region = "eu-west-1"
website {
index_document = "index.html"
}
}
data "aws_iam_policy_document" "s3_bucket_policy_document" {
statement {
actions = ["s3:GetObject"]
resources = ["${aws_s3_bucket.bucket.arn}/*"]
principals {
type = "AWS"
identifiers = ["*"]
}
}
}
resource "aws_s3_bucket" "s3_bucket_policy" {
bucket = "${aws_s3_bucket.bucket.bucket}"
policy = "${data.aws_iam_policy_document.s3_bucket_policy_document.json}"
}
Run Code Online (Sandbox Code Playgroud) 地形版本:0.11
我正在运行多个 eks 集群并尝试按照此文档在所有集群中启用基于 IAM 角色的服务帐户:https : //www.terraform.io/docs/providers/aws/r/eks_cluster.html#enabling-iam-roles -for-service-accounts
当我在策略语句中对集群名称进行硬编码并创建多个语句时,这会起作用
data "aws_iam_policy_document" "example_assume_role_policy" {
# for cluster 1
statement {
actions = ["sts:AssumeRoleWithWebIdentity"]
effect = "Allow"
condition {
test = "StringEquals"
variable = "${replace(aws_iam_openid_connect_provider.example1.url, "https://", "")}:sub"
values = ["system:serviceaccount:kube-system:aws-node"]
}
principals {
identifiers = ["${aws_iam_openid_connect_provider.example1.arn}"]
type = "Federated"
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于我有多个集群,我希望能够动态生成语句,因此我进行了以下更改:
我创建了一个count变量并更改了主体和条件中的值
count = "${length(var.my_eks_cluster)}"
condition {
test = "StringEquals"
variable = "${replace(element(aws_iam_openid_connect_provider.*.url, count.index), "https://", "")}:sub"
values = ["system:serviceaccount:kube-system:aws-node"]
}
principals {
identifiers = ["${element(aws_iam_openid_connect_provider.*.url, count.index)}"] …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-iam terraform terraform-provider-aws terraform0.11
找不到使用官方 aws_db_instance 资源激活 PostGIS 扩展的方法,是否还有其他选项可以使用 Terraform 激活它?
我有一个 terraform 脚本,可以在 VPC 中创建 lambda 函数。由于 lambda 部署到 VPC,因此它会创建一个 ENI 并将其与我的安全组关联。但是,当我去更改该安全组(destroy)时,由于正在使用的 ENI 超时而失败。
我假设发生的情况是,Terraform 认识到 ENI 依赖于安全组,但没有认识到 lambda 函数依赖于 ENI,因此在尝试删除 ENI 之前不会尝试删除 lambda 函数。
期望的结果是能够更改安全组的名称和描述,而无需手动删除 lambda 函数和 ENI。
我尝试过创建各种“ depends_on ”,并设置 lambda 函数的生命周期,以便在安全组发生更改时销毁,但都不起作用。我正在使用 Terraform 版本 1.3.3 和 AWS 提供商版本 4.37.0。
错误:使用安全组 (sg-01ba40a4b03c5ddd2) 删除 ENI:发生 2 个错误:
等待 Lambda ENI (eni-02cd7771540d50f8e) 可用于分离:等待状态变为“可用”时超时(最后状态:“使用中”,超时:45m0s)
等待 Lambda ENI (eni-030c34234a51be116) 可用于分离:等待状态变为“可用”时超时(最后状态:“使用中”,超时:45m0s)
# ----------------------------------------------------------------------
# Security group
# ----------------------------------------------------------------------
resource "aws_security_group" "public" {
name = "test-sg"
vpc_id = var.vpc_id
description = "Security group …Run Code Online (Sandbox Code Playgroud) AWS 的新建议是默认禁用 ACL,以便对象所有权默认为存储桶所有者。如何使用 Terraform 通过 aws_s3_bucket 资源实现此目的?
我尝试执行以下操作但没有成功
resource "aws_s3_bucket_acl" "example_bucket_acl" {
bucket = aws_s3_bucket.s3-bucket.id
acl = "private"
expected_bucket_owner = data.aws_caller_identity.current.account_id
}
data "aws_caller_identity" "current" {}
Run Code Online (Sandbox Code Playgroud)
此代码设置 ACL,以便只有存储桶所有者才能读取和写入存储桶以及存储桶中的对象,但对象所有权配置仍设置为“对象写入者”。此外,ACL 不会因设置而被禁用。
从Terraform 关于 S3 ACL 的文档来看,它没有说明任何示例,也没有提供任何支持禁用 ACL 的参数。
在手动更改 AWS 中的设置后,我尝试通过运行 terraform plan 来暴力破解该解决方案,看看我会从该计划中得到什么差异,但它说我的基础设施与配置匹配。
有谁知道如何做到这一点?我目前正在使用 Terraform CLI v1.3.5 和 AWS 提供商 v4.40.0。
amazon-s3 amazon-web-services terraform terraform-provider-aws