在现有的 Terraform 目录中:
~ terraform version
Terraform v0.11.11
+ provider.aws v1.51.0
Run Code Online (Sandbox Code Playgroud)
如果我设置了一个新的 Terraform 目录:
~ terraform version
Terraform v0.11.11
+ provider.aws v1.55.0
Run Code Online (Sandbox Code Playgroud)
如何升级我的provider.aws?如果我设置version = "~> 1.55.0"在provider "aws"我的.tf文件,我得到一个错误:
* provider.aws: no suitable version installed
version requirements: "~> 1.55.0"
versions installed: "1.51.0"
Run Code Online (Sandbox Code Playgroud)
我希望找到一个terraform update命令或类似的东西。但我找不到那个。
我不应该升级提供程序吗?我需要删除状态,重新运行init然后refresh吗?或者,还有更好的方法?
我想使用 terraform 而不是控制台创建具有访问权限和密钥的 IAM 用户(服务帐户)。我怎样才能做到这一点?谢谢,迪帕克
我想使用 Terraform 创建一个测试用户的AWS Cognito 用户池。创建用户池非常简单:
resource "aws_cognito_user_pool" "users" {
name = "${var.cognito_user_pool_name}"
admin_create_user_config {
allow_admin_create_user_only = true
unused_account_validity_days = 7
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我找不到创建 AWS Cognito 用户的资源。使用AWS Cli是可行的
aws cognito-idp admin-create-user --user-pool-id <value> --username <value>
Run Code Online (Sandbox Code Playgroud)
关于如何使用 Terraform 做到这一点的任何想法?
有谁知道是否有可能用代码片段来表示我是否可以在 terraform 变量的地图变量中创建地图变量?
variable "var" {
type = map
default = {
firstchoice = {
firstAChoice ="foo"
firstBChoice = "bar"
}
secondchoice = {
secondAChoice = "foobar"
secondBChoice = "barfoo"
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人对这是否可行或任何详细说明的文档有任何见解,那就太好了。
我想知道我们如何停止和重新启动使用 terraform 创建的 AWS ec2 实例。有没有办法做到这一点?
我尝试使用 Terraform 启动 EC2 实例,但收到以下错误:
启动源实例时出错:UnauthorizedOperation:您无权执行此操作。
我已将 AdministratorAccess 策略应用到我的 IAM 帐户,因此我想应该不存在 IAM 限制问题。
另外,我为我的帐户启用了 MFA,但我使用的是 STS 令牌,并且 API 调用正在从 Amazon 接受,因此这也不应该是问题。
我使用的 Terraform 代码非常简单:
provider "aws"{
region="us-east-1"
}
resource "aws_instance" "web" {
ami = "ami-00d4e9ff62bc40e03"
instance_type = "t2.micro"
tags = {
Name = "HelloWorld"
}
}
Run Code Online (Sandbox Code Playgroud)
请您帮助我,因为我厌倦了很多事情,但我没能解决这个问题。及时感谢!
我正在尝试使用重新应用我的更改terraform apply,但是当我再次执行此操作时,它会给我错误,资源已存在并停止部署。
例子:
Error: AlreadyExistsException: An alias with the name arn:aws:kms:us-east-1:490449857273:alias/continuedep-cmk-us-east-1 already exists
status code: 400, request id: 4447fd20-d33b-4c87-891e-cc5e09cc6108
on ../../../modules/kms_cmk/main.tf line 11, in resource "aws_kms_alias" "keyalias":
11: resource "aws_kms_alias" "keyalias" {
Error: Error creating DB Subnet Group: DBSubnetGroupAlreadyExists: The DB subnet group 'continuedep-sbg' already exists.
status code: 400, request id: 97d662b6-79d4-4fde-aaf7-a2f3e5a0bd9e
on ../../../modules/rds-postgres/main.tf line 2, in resource "aws_db_subnet_group" "generic_db_subnet_group":
2: resource "aws_db_subnet_group" "generic_db_subnet_group" {
Run Code Online (Sandbox Code Playgroud)
同样,我在许多其他现有资源中遇到错误。我想避免/忽略此类错误并继续我的部署。
我还可以使用什么其他方式从中间中断的地方重新启动我的 terraform 资源部署。
我的地形版本是:
Terraform v0.12.9
我试图从 terraform 地图变量中提取左值和右值,但无法提取左值。下面是我的代码:-
variables.tf
variable "notebook" {
type = "map"
default = {
"01" = "a@a.com"
"02" = "b@a.com"
"03" = "c@a.com"
"04" = "d@a.com"
......
}
}
Run Code Online (Sandbox Code Playgroud)
下面是我在 main.tf 中的模块
module "instance" {
instance_ip = ["1.1.1.x", "1.1.2.y", "1.1.1.z","1.1.2.p"]
dns = ["x", "y", "z","p"]
name = ["a", "b", "c", "d"]
}
Run Code Online (Sandbox Code Playgroud)
输出应如下所示:-
module "instance" {
instance_ip = ["1.1.1.01", "1.1.2.02", "1.1.1.03","1.1.2.04" and so on]
dns = ["01", "02", "03","04" and so on]
name = ["a@a.com", "b@a.com", "c@a.com", "d@a.com and so on] …Run Code Online (Sandbox Code Playgroud) 使用 terraform v0.12.21 和 AWS provider v2.51.0,我试图从头开始创建一些基础设施(没有以前的 terraform 状态)。
目标是在单个 VPC 中拥有一些可公开访问的 EC2 实例,我认为这些是我需要完成的资源:
使用这个 terraform 配置:
locals {
office_cidr = ["x.x.x.x/32", "x.x.x.x/32"]
}
provider "aws" {
region = var.region
version = "~> 2.51"
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
}
resource "aws_internet_gateway" "gw" {
vpc_id = aws_vpc.main.id
}
resource "aws_subnet" "main" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
}
resource "aws_route_table" …Run Code Online (Sandbox Code Playgroud) 我有一个terraform运行时失败的文件,terraform plan我收到错误消息:
Error: Cycle: module.hosting.data.template_file.bucket_policy, module.hosting.aws_s3_bucket.website
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为存储桶指的是策略,反之亦然:
data "template_file" "bucket_policy" {
template = file("${path.module}/policy.json")
vars = {
bucket = aws_s3_bucket.website.arn
}
}
resource "aws_s3_bucket" "website" {
bucket = "xxx-website"
website {
index_document = "index.html"
}
policy = data.template_file.bucket_policy.rendered
}
Run Code Online (Sandbox Code Playgroud)
如何避免这种双向引用?
amazon-web-services terraform terraform-template-file terraform-provider-aws