标签: terraform

BucketRegionError:不正确的区域,存储桶不在“eu-west-2”中 - terraform

我需要 terraform 来访问我的 S3 存储桶,但它无法在指定区域找到存储桶。

我的主要.tf:

provider "aws" {
region = "eu-west-2"
}

terraform {
backend "s3" {
bucket = "xyz-state-blog"
key    = "dev/terraform"
region = "eu-west-2"
}
}

 locals {
  azs       = ["eu-west-2a", "eu-west-2b", "eu-west-2c"]
  environment            = "dev"
  kops_state_bucket_name = "${local.environment}-kops-state"
 // Needs to be a FQDN
 kubernetes_cluster_name = "k8s-dev0.domain.com"
 ingress_ips             = ["10.0.0.100/32", "10.0.0.101/32"]
 vpc_name                = "${local.environment}-vpc"

  tags = {
  environment = "${local.environment}"
  terraform   = true
  }
  }

  data "aws_region" "current" {}
Run Code Online (Sandbox Code Playgroud)

以下是我收到terraform init命令的错误:

   Error inspecting states …
Run Code Online (Sandbox Code Playgroud)

terraform

15
推荐指数
1
解决办法
7735
查看次数

Terraform抛出"groupName不能与参数子网一起使用"或"VPC安全组不能用于非VPC启动"

在尝试了解如何aws_instance使用AWS VPC 配置时,会发生以下错误:

* Error launching source instance: InvalidParameterCombination: The parameter groupName cannot be used with the parameter subnet
    status code: 400, request id: []
Run Code Online (Sandbox Code Playgroud)

要么

* Error launching source instance: InvalidParameterCombination: VPC security groups may not be used for a non-VPC launch
    status code: 400, request id: []
Run Code Online (Sandbox Code Playgroud)

vpc amazon-web-services amazon-vpc terraform

14
推荐指数
2
解决办法
8252
查看次数

如何使用Terraform配置启动远程服务?

我希望我的Terraform配置通过调用命令来配置服务器并在最后启动服务并继续运行它.我尝试使用nohup和屏幕使用remote-exec:

nohup的:

provisioner "remote-exec" {
 inline = "nohup sudo command &"
}
Run Code Online (Sandbox Code Playgroud)

屏幕:

provisioner "remote-exec" {
 inline = "screen -d -m sudo command"
}
Run Code Online (Sandbox Code Playgroud)

我通过手动登录来检查命令是否正在运行.但他们没有保持流程运行.如果我手动尝试这些命令并且使用ssh调用它们也可以.

如何在返回控制流时使用Terraform配置来启动命令并使其保持运行?

gnu-screen nohup terraform

14
推荐指数
1
解决办法
2534
查看次数

terraform刷新真正做了什么?

使用terraform在AWS中部署相当大的基础架构时,我们的遥控器tfstate已损坏并被删除.

从文档中,我收集到terraform refresh应该查询AWS以获取基础结构的真实状态并按顺序更新tfstate,但这不会发生:我的tfstate未受影响而plan + apply会产生很多Already existing错误.

什么是terraform refresh真的?

amazon-web-services terraform

14
推荐指数
1
解决办法
5684
查看次数

Terraform Fargate任务定义请求执行角色

我正在使用Terraform在AWS中创建一些服务.其中一项服务是ECS任务定义.我按照文档操作,并不断收到以下错误:

aws_ecs_task_definition.github-backup: ClientException: Fargate requires task definition to have execution role ARN to support ECR images.
status code: 400, request id: 84df70ec-94b4-11e8-b116-97f92c6f483f
Run Code Online (Sandbox Code Playgroud)

首先task_role_arn是可选的,我可以看到创建了一个新角色.我还尝试使用任务定义所需的权限创建一个角色.

这就是我所拥有的:

任务定义:

resource "aws_ecs_task_definition" "github-backup" {
  family                   = "${var.task_name}"
  requires_compatibilities = ["FARGATE"]
  network_mode             = "awsvpc"
  cpu                      = "${var.fargate_cpu}"
  memory                   = "${var.fargate_memory}"
  task_role_arn            = "${aws_iam_role.github-role.arn}"

  container_definitions = <<DEFINITION
[
    {
        "cpu": ${var.fargate_cpu},
        "image": "${var.image}",
        "memory": ${var.fargate_memory},
        "name": "github-backup",
        "networkMode": "awsvpc"
    }
]
DEFINITION
}
Run Code Online (Sandbox Code Playgroud)

IAM政策:

resource "aws_iam_policy" "access_policy" {
  name = "github_policy"

  policy = <<EOF
{ …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-ecs terraform

14
推荐指数
1
解决办法
5449
查看次数

Terraform GCP 启动脚本本地文件而不是内联

网上有很多例子展示了如何在部署在 GCP/GCE 上的虚拟机上使用 Terraform 运行启动脚本,但它们都使用内联启动脚本,所有启动脚本代码都包含在 terraform compute.tf 文件中。这可以通过启动脚本的单行或多行的 <<SCRIPT[script code]SCRIPT 来完成。我还没有找到一个示例来展示如何将启动脚本参数分配给本地磁盘上的另一个文件,可能与 compute.tf 位于同一目录中。用数百行启动脚本将compute.tf 弄得一团糟。没有更好的方法来做到这一点吗?

我意识到我可以编写一个包装脚本,将一个 compute.tf 和一个单独的启动文件组合到一个 compute.tf 中,然后运行 ​​terraform,但我正在寻找一条更直接的路线,假设存在。

谢谢你。

startup google-cloud-platform terraform

14
推荐指数
2
解决办法
7745
查看次数

Terraform lambda 函数验证异常

我正在尝试在 Terraform (v 0.13.0) 中设置我当前的基础设施。我只是从迁移现有的 lambda 函数开始。我已使用以下代码尝试将 .net core 3.1 中的现有 lambda 函数上传到 AWS(provider v.3.0)。我手动部署没有问题,但这显然不是目标。

这是 IAM 角色:

resource "aws_iam_role" "role_lambda" {
  name = "roleLambda"

  assume_role_policy = <<POLICY
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": "sts:AssumeRole",
        "Principal": {
          "Service": "lambda.amazonaws.com"
        },
        "Effect": "Allow",
        "Sid": ""
      }
    ]
  }
  POLICY
  }
Run Code Online (Sandbox Code Playgroud)

在函数下方(注意我混淆了一些值):

resource "aws_lambda_function" "lambda_tf" {
  function_name     = "LambdaTFTest"
  role              = aws_iam_role.role_lambda.arn
  handler           = "Lambda::Lambda.Function::FunctionHandler"
  runtime           = "dotnetcore3.1"
  s3_bucket         = "arn:aws:s3:::xxxx-xxxxxx"
  s3_key            = "Lambda.zip"
  s3_object_version = "XxXxXxXxXxXxXxXxXxXxXxXxXxXx"
}
Run Code Online (Sandbox Code Playgroud)

但是,我不断收到此错误作为输出,但没有更多详细信息:

Error: Error …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda terraform terraform-provider-aws

14
推荐指数
3
解决办法
3万
查看次数

如何在应用期间使用 terraform 创建 ec2 后运行 scriptps?

在 terraform 中有一个在 aws 中创建 EC2 机器的示例。

# Create a new instance of the latest Ubuntu 20.04 on an
# t3.micro node with an AWS Tag naming it "HelloWorld"
provider "aws" {
  region = "us-west-2"
}

data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  owners = ["099720109477"] # Canonical
}

resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t3.micro"

  tags = { …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform terraform-provider-aws

14
推荐指数
1
解决办法
2万
查看次数

引用在不同文件夹中创建的 Terraform 资源

我有以下文件夹结构:

\n
infrastructure\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80security-groups\n\xe2\x94\x82   \xe2\x94\x82   main.tf\n\xe2\x94\x82   \xe2\x94\x82   config.tf\n\xe2\x94\x82   \xe2\x94\x82.  security_groups.tf\n\xe2\x94\x82   \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80instances\n    \xe2\x94\x82   main.tf\n    \xe2\x94\x82   config.tf\n    \xe2\x94\x82   instances.tf\n
Run Code Online (Sandbox Code Playgroud)\n

我想通过引用来引用 security-groups 文件夹中实例化的安全组 ID。\n我尝试使用以下命令在 security_groups.tf 文件中输出所需的 ID

\n
output "sg_id" {\n  value = "${aws_security_group.server_sg.id}"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

然后在实例文件中将其添加为模块:

\n
module "res" {\n  source = "../security-groups"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这种方法的问题是,当我在实例文件夹中执行 terraform apply 时,它也会尝试创建安全组(我已经通过在安全组文件夹中执行 terraform apply 创建了安全组),但它失败了,因为 SG 是现存的。

\n

在不更改代码结构的情况下引用在不同文件夹中创建的资源的最简单方法是什么?

\n

谢谢。

\n

terraform terraform-provider-aws

14
推荐指数
2
解决办法
2万
查看次数

Terraform - 如果在 for_each 内。我可以过滤 for_each 吗?

通过以下内容,我可以循环遍历资源块,轻松地将路由表关联添加到“所有”子网。但是,我只需要为我的公共子网创建关联。

我怎样才能使这个“if”语句起作用?或者任何其他方式来过滤each.value.class == "pub"此事。

resource "aws_route_table_association" "rtb-pub" {
  for_each =  local.subnets_map 
  if each.value.class == "pub"    ## <---- how?

  route_table_id = aws_route_table.rtb-pub.id
  subnet_id      = aws_subnet.map["${each.value.subnet}"].id
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

amazon-web-services terraform terraform-provider-aws

14
推荐指数
1
解决办法
1万
查看次数