我正在尝试将公共 IP 地址与我的实例而不是 EIP 相关联,但 terraform 中没有“aws_public_ip”资源。
我已经达到了 EIP 的限制,我真的不需要 EIP - 我可以利用公共 IP 地址。
这是否意味着还不可能在 terraform 中附加 public_ip?有没有人成功地使用 terraform 将公共 ip 附加到实例/接口?
谢谢
我需要使用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 中的 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 中做到这一点?
我请求为不同的服务器创建多个 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循环?
我有一个使用 terraform 将多个文件上传到 s3 的用例。我想使用计数功能上传多个对象。为此需要使用 file("${path.module}/path/to/file") 遍历源代码。
有没有办法利用count.index使文件函数成为映射变量?
我正在尝试将 Terraform 作为 Docker。我已从以下位置提取图像:
我有简单的main.tf:
输出“问候”{ value =“Hello World!” }
提供者“随机”{}
现在,在与main.tf相同的目录中,我运行:
docker run -i -t hashicorp/terraform:light plan main.tf
正如该页面所建议的那样。但我收到错误:
stat main.tf: 没有这样的文件或目录
所以我想我需要创建一个 Dockerfile 来创建一个包含main.tf的图像,对吗?
谢谢。
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) 我想在 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 的命令吗?
我设法使用 Terraform 脚本在 AWS 上构建了一个 WAF(v1) 基础设施组件。自 2019 年 11 月起,AWS 建议改用 WAFv2,但我不知道如何使用 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)
似乎是错误的,因为图像没有被拉出。我在这里错过了什么。