标签: terraform

使用 terraform 关联公共 IP 而不是 EIP

我正在尝试将公共 IP 地址与我的实例而不是 EIP 相关联,但 terraform 中没有“aws_public_ip”资源。

我已经达到了 EIP 的限制,我真的不需要 EIP - 我可以利用公共 IP 地址。

这是否意味着还不可能在 terraform 中附加 public_ip?有没有人成功地使用 terraform 将公共 ip 附加到实例/接口?

谢谢

amazon-web-services eip terraform

0
推荐指数
1
解决办法
722
查看次数

terraform:source_security_group_id的语法

我需要使用terraform source_security_group_id指示符将另一个安全组设置为当前安全组的源.但是,当我尝试使用明显语法的变体时,比如

resource "aws_security_group" "foo-sg" {

    "ingress" = {
    "from_port" = 443
    "to_port" = 443
    "protocol" = -1
    "source_security_group_id" = "sg-9115bae1"
  }
}
Run Code Online (Sandbox Code Playgroud)

......我收到一个错误:

aws_security_group.foo-sg:ingress.0:无效或未知密钥:source_security_group_id


有没有人使用这个结构的例子?

terraform

0
推荐指数
1
解决办法
1141
查看次数

如何在 terraform 中定义“assume_role_policy”?

这是我在 terraform 中的 aws_iam_role 定义

resource "aws_iam_role" "server_role" {
  name = "server-role"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "sts:AssumeEnvironment",
        "sqs:ChangeMessageVisibility",
        "sqs:ReceiveMessage",
        "sqs:SendMessage",
        "s3:GetObject*",
        "s3:ListBucket*",
        "s3:PutBucket*",
        "s3:PutObject*"
      ],
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行时出现此错误terraform plan

错误:应用计划时出错:

发生了 1 个错误:

  • aws_iam_role.server_role:发生 1 个错误:

  • aws_iam_role.server_role:创建 IAM 角色服务器角色时出错:MalformedPolicyDocument:AssumeRole 策略只能指定 STS AssumeRole 操作。状态代码:400,请求 ID:55f1bfaf-a121-11e9-acaf-bb57d635757b

我基本上想让服务器读/写 S3 存储桶和读/写 SQS 队列。

显然,我不能添加这些sqs:*,并s3:*在同一个地方。我怎样才能在 terraform 中做到这一点?

terraform terraform-provider-aws

0
推荐指数
1
解决办法
2230
查看次数

如何通过 Terraform 创建多个 VM?

我请求为不同的服务器创建多个 VM,例如:

{
  "type"   = "ansibleserver"
  "size"   = "Standard_DC2s"
  "count" = 2
},
{
  "type"   = "frontendserver"
  "size"   = "Standard_DC2s"
  "count" = 2
},
{
  "type"   = "backendserver"
  "size"   = "Standard_L8s_v2"
  "count" = 3
}
Run Code Online (Sandbox Code Playgroud)

对于所有 3 种服务器,我必须以不同的大小和数量创建它们,现在我只能以一种非常糟糕的方式来做到这一点:

resource "azurerm_virtual_machine" "ansibleserver" {
  count = "${lookup(var.ansibleserver, "count")}"

  name  = 
  ......
}

resource "azurerm_virtual_machine" "frontendserver" {
  count = "${lookup(var.frontendserver, "count")}"

  name  = 
  ......
}
Run Code Online (Sandbox Code Playgroud)

然后如果有新的需求进来,我不仅需要改变变量,还要改变脚本,太复杂了。有什么办法可以更体面地改变整个创建过程,比如代码中的for循环?

azure terraform

0
推荐指数
1
解决办法
6900
查看次数

遍历文件函数的映射

我有一个使用 terraform 将多个文件上传到 s3 的用例。我想使用计数功能上传多个对象。为此需要使用 file("${path.module}/path/to/file") 遍历源代码。

有没有办法利用count.index使文件函数成为映射变量?

terraform

0
推荐指数
1
解决办法
3004
查看次数

Terraform as Docker 按计划返回错误

我正在尝试将 Terraform 作为 Docker。我已从以下位置提取图像:

Docker 回购镜像

我有简单的main.tf

输出“问候”{ value =“Hello World!” }

提供者“随机”{}

现在,在与main.tf相同的目录中,我运行:

docker run -i -t hashicorp/terraform:light plan main.tf

正如该页面所建议的那样。但我收到错误:

stat main.tf: 没有这样的文件或目录

所以我想我需要创建一个 Dockerfile 来创建一个包含main.tf的图像,对吗?

谢谢。

docker terraform

0
推荐指数
1
解决办法
622
查看次数

terraform 计划错误“功能”:未设置必填字段

terraform init 初始化成功,下面是我的main.tf

############################################################################
# VARIABLES
#############################################################################

variable "resource_group_name" {
  type  = string
}

variable "location" {
  type    = string
  default = "eastus"
}


variable "vnet_cidr_range" {
  type    = string
  default = "10.0.0.0/16"
}

variable "subnet_prefixes" {
  type    = list(string)
  default = ["10.0.0.0/24", "10.0.1.0/24"]
}

variable "subnet_names" {
  type    = list(string)
  default = ["web", "database"]
}

#############################################################################
# PROVIDERS
#############################################################################

provider "azurerm" {

}

#############################################################################
# RESOURCES
#############################################################################

module "vnet-main" {
  source              = "Azure/vnet/azurerm"
  resource_group_name = var.resource_group_name
  location            = var.location …
Run Code Online (Sandbox Code Playgroud)

terraform infrastructure-as-code

0
推荐指数
1
解决办法
4663
查看次数

如何在 Windows 10 linux 子系统上卸载 terraform 并安装较新版本的 terraform?

我想在 Windows 10 linux 子系统上安装较新版本的 terrafrom 0.12.24。我是使用这个界面的新手,我不知道该怎么做

我使用这些命令在 Windows 10 linux 子系统上安装了 terraform

wget https://releases.hashicorp.com/terraform/0.11.13/terraform_0.11.13_linux_amd64.zip -O 
terraform.zip; 
unzip terraform.zip; 
sudo mv terraform /usr/local/bin; 
rm terraform.zip;
Run Code Online (Sandbox Code Playgroud)

但是这安装了旧版本..当我运行一些脚本时,它给了我这个错误。

无法加载根配置模块:解析 terraform/local/terraform.tf 时出错:在 119:12:未知令牌:119:12 IDENT 文件

为了解决这个问题,我计划从 0.12.24 升级到较新版本的 terra。有人可以向我提供卸载和安装较新版本 terraform 的命令吗?

linux terraform

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

有没有办法从 Terraform 脚本创建 WAFv2

我设法使用 Terraform 脚本在 AWS 上构建了一个 WAF(v1) 基础设施组件。自 2019 年 11 月起,AWS 建议改用 WAFv2,但我不知道如何使用 Terraform 编写此脚本。

terraform amazon-waf terraform-provider-aws

0
推荐指数
1
解决办法
2318
查看次数

为 docker 注册表创建 kubernetes 秘密 - Terraform

使用kubectl我们可以创建docker registry authentication secret如下

kubectl create secret docker-registry regsecret \
--docker-server=docker.example.com \
--docker-username=kube \
--docker-password=PW_STRING \
--docker-email=my@email.com \
Run Code Online (Sandbox Code Playgroud)

我如何secret使用创建它terraform,我看到了这个链接,它在实例data流中创建,我从那里获取所需的数据,我创建了如下所示的内容terraformkubernetesazure

resource "kubernetes_secret" "docker-registry" {
  metadata {
    name = "registry-credentials"
  }

  data = {
    docker-server = data.azurerm_container_registry.docker_registry_data.login_server
    docker-username = data.azurerm_container_registry.docker_registry_data.admin_username
    docker-password = data.azurerm_container_registry.docker_registry_data.admin_password
  }


}
Run Code Online (Sandbox Code Playgroud)

似乎是错误的,因为图像没有被拉出。我在这里错过了什么。

kubernetes terraform terraform-provider-azure azure-aks

0
推荐指数
2
解决办法
1976
查看次数