我正在使用 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,并希望使用该工具设置 AWS 基础设施。
我们有 3 个 AWS 环境:沙箱、暂存和生产,并且拥有支持这些环境的现有基础设施。例如,我们为每个环境有 3 个独立的 VPC。
我想terraform import根据我尝试设置的环境来导入这些资源的状态。所以我本质上想这样做,虽然我知道这在语法上不正确,但你明白了。
$ terraform import aws_vpc.my_vpc -var 'environment=sandbox'
Run Code Online (Sandbox Code Playgroud)
因此我的模块设置如下
vpc/main.tf
-----------
provider "aws" {
region = "us-east-1"
}
resource "aws_vpc" "my_vpc" {
cidr_block = ""
}
vpc/variables.tf
----------------
variable "environment" {
type map = map(string)
default {
sandbox = "vpc-1234"
staging = "vpc-2345"
production = "vpc-3456"
}
}
Run Code Online (Sandbox Code Playgroud)
所以这意味着我本质上想做
$ terraform import aws_vpc.my_vpc vpc-1234
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这个目标?
我无法通过任何其他方法解决这个问题,所以我必须在这里问这个......
在 Terraform 0.11 中将地图分配给值时使用等号 (=) 背后的逻辑是什么?
与 =
resource "pseude_resource" "pseudo_name" {
value = {
key1 = value1
key2 = value2
}
}
Run Code Online (Sandbox Code Playgroud)
没有 =
resource "pseude_resource" "pseudo_name" {
value {
key1 = value1
key2 = value2
}
}
Run Code Online (Sandbox Code Playgroud)
使用数组 ([]) 时似乎需要使用 =,但使用映射时则不需要。这背后的原因是什么?到底为什么?可以直接省略吗?
我在文档中没有找到任何有用的东西。这可以用 terraform 以某种方式完成吗?
我使用 VS Code 开发 terraform 代码。我当前的 terraform 插件是:
Name: Terraform
Id: hashicorp.terraform
Description: Syntax highlighting, linting, formatting, and validation for Hashicorp's Terraform
Version: 1.4.0
Publisher: HashiCorp
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=HashiCorp.terraform
Run Code Online (Sandbox Code Playgroud)
考虑以下代码:
output "sql_server" {
description = "A dictionary of objects containing various Azure Sql Server properties per respective location."
value = {
for k, instance in azurerm_sql_server.instance : k =>
{
resource_group_name = instance.resource_group_name
fully_qualified_domain_name = instance.fully_qualified_domain_name
name = instance.name
location = instance.location
is_primary = instance.location == var.primary_location
admin_login = …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Terraform 中构建 Web ACL 资源 https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/wafv2_web_acl
该资源具有嵌套块规则->操作->块和规则->操作->计数
我想要一个变量,其类型允许我将操作设置为 或 ,count {}以便block{}可以进行以下两种配置:
带块:
resource "aws_wafv2_web_acl" "example" {
...
rule {
...
action {
block {}
}
...
}
Run Code Online (Sandbox Code Playgroud)
与计数:
resource "aws_wafv2_web_acl" "example" {
...
rule {
...
action {
count {}
}
...
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我可以通过布尔变量和动态块以非常非声明性的方式实现此结果。
我的问题是,变量的类型可以引用嵌套块的类型,从而可以将嵌套块的内容传递到变量中吗?
我想要实现的目标与此类似(非工作语法):
resource "aws_wafv2_web_acl" "example" {
...
rule {
...
action = var.action_block
...
}
}
Run Code Online (Sandbox Code Playgroud)
variable "action_block" {
description = "Action of the rule"
type = <whatever type is accepted …Run Code Online (Sandbox Code Playgroud) 我在本地使用 minikube。以下是.tf我用来创建 kubernetes 集群的文件:
provider "kubernetes" {
config_path = "~/.kube/config"
}
resource "kubernetes_namespace" "tfs" {
metadata {
name = "tfs" # terraform-sandbox
}
}
resource "kubernetes_deployment" "golang_webapp" {
metadata {
name = "golang-webapp"
namespace = "tfs"
labels = {
app = "webapp"
}
}
spec {
replicas = 3
selector {
match_labels = {
app = "webapp"
}
}
template {
metadata {
labels = {
app = "webapp"
}
}
spec {
container {
image = "golang-docker-example" …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行一个部署存储容器的 terraform 部署。初始部署有效(由于尚未到位 IP 过滤),但随后失败。运行 terraform plan 时,我得到以下信息:
Error: retrieving Container "xxxx" (Account "xxxx" / Resource Group "xxx"): containers.Client#GetProperties: Failure responding to request: StatusCode=403 -- Original Error: autorest/azure: Service returned an error. Status=403 Code="AuthorizationFailure" Message="This request is not authorized to perform this operation.\nRequestId:62a85c92-901e-0021-12de-816608000000\nTime:2022-06-17T00:11:56.2063816Z"
Run Code Online (Sandbox Code Playgroud)
根据一些研究和调试,当存储容器没有将托管管道代理的 IP 列入白名单时,就会发生这种情况。
我修改了管道,以便检索代理的 IP 并将其添加为防火墙规则。然后,我添加了不同时间的睡眠(最多 5 分钟),尝试为规则生效留出时间,但它从未起作用。
这是我的管道的片段:
- task: AzureCLI@2
inputs:
azureSubscription: '$(azureSubscription)'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
agentIP=$(curl -s https://api.ipify.org/)
az storage account network-rule add -g xxx --account-name xxx --ip-address $agentIP
sleep 300 …Run Code Online (Sandbox Code Playgroud) azure terraform azure-blob-storage azure-devops azure-pipelines
我有一个全新的 GCP 帐户,我是该帐户的唯一所有者,这是一个个人/干净的全新项目。
\n我专门使用 terraform 管理基础设施,并尝试创建一个 HTTPS 负载均衡器来将请求路由到固定 ip,然后我想将其转发到我有 web 应用程序的存储桶,我过去通过以下方式设置了这种类型的基础设施UI 但不是通过 terraform。
\n当尝试创建这个基础设施时:
\nresource "google_compute_global_address" "main" {\n name = "main"\n}\n\nresource "google_compute_forwarding_rule" "lb" {\n name = "lb"\n provider = google-beta\n region = "europe-west2"\n project = "owlee-software"\n ip_protocol = "TCP"\n load_balancing_scheme = "EXTERNAL_MANAGED"\n port_range = "443"\n target = google_compute_global_address.main.address\n network_tier = "PREMIUM"\n}\nRun Code Online (Sandbox Code Playgroud)\n这会抛出
\n\xe2\x94\x82 Response: {\n\xe2\x94\x82 "error": "invalid_grant",\n\xe2\x94\x82 "error_description": "Account has been deleted"\n\xe2\x94\x82 }\nRun Code Online (Sandbox Code Playgroud)\n对于全新的服务帐户 - 我已删除该帐户并创建了另一个帐户 - 使用另一个文件,如果我删除此资源,则所有内容都会通过 GCP 帐户中的服务帐户进行实例化。这也是我在该项目中拥有的唯一“谷歌测试版”提供商。
\n我不确定这是因为资源配置错误还是服务帐户发生了一些问题。
\n当我尝试检查我刚刚创建并在项目上创建编辑器的服务帐户时,我不能,它显示为灰色,并显示以下文本: …
google-cloud-platform terraform google-iam terraform-provider-gcp gcp-load-balancer
如果有一种方法可以在 Terraform 创建 aws_lb 时获取 aws_lb 资源的分配 IP 地址?
如AWS 文档 - NLB - 要找到要列入白名单的私有 IP 地址,我们可以找出与 ELB 关联的 IP 地址。
为了能够设置安全组以将 ELB IP 地址列入白名单,因为网络负载均衡器不能没有安全组,因为网络负载均衡器没有安全组。
考虑过aws_network_interface但它不会出现错误。
错误:找不到匹配的网络接口
另外我认为 datasource 假设资源已经存在并且不能用于 Terraform 创建的资源。
terraform ×10
amazon-elb ×1
azure ×1
azure-devops ×1
google-iam ×1
hcl ×1
kubernetes ×1
minikube ×1
registrar ×1