如何将terraform导入与传入的变量一起使用?
我正在学习terraform,并希望使用该工具设置AWS基础设施 我们有3个AWS环境:沙箱环境、暂存环境和生产环境,并且有支持这些环境的现有基础架构。例如,每个环境有3个独立的专有网络 我想使用如何将terraform导入与传入的变量一起使用?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我正在学习terraform,并希望使用该工具设置AWS基础设施 我们有3个AWS环境:沙箱环境、暂存环境和生产环境,并且有支持这些环境的现有基础架构。例如,每个环境有3个独立的专有网络 我想使用terraformimport根据我试图设置的环境导入这些资源的状态。所以我基本上想这样做,虽然我知道这在语法上是不正确的,但是你明白了 $ terraform import aws_vpc.my_vpc -var 'environment=sandbox' 因此,我的模块设置如下 vpc/main.
terraformimport
根据我试图设置的环境导入这些资源的状态。所以我基本上想这样做,虽然我知道这在语法上是不正确的,但是你明白了
$ terraform import aws_vpc.my_vpc -var 'environment=sandbox'
因此,我的模块设置如下
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"
}
}
这意味着我基本上想做
$ terraform import aws_vpc.my_vpc vpc-1234
我怎样才能做到这一点呢?仅供参考
“地形导入”命令用于导入现有地形
基础设施
该命令当前一次只能导入一个资源。这
意味着您还不能将Terraform导入指向整个
资源,如AWS VPC,并导入所有资源。此工作流将
将在未来版本的Terraform中进行改进
传递这些变量的那个变量将被视为子序列模块的输入变量,而不是从环境变量文件中获取值,而是为变量设置值
输入变量用作地形模块的参数,允许
在不改变模块功能的情况下定制模块的各个方面
拥有自己的源代码,并允许在不同的应用程序之间共享模块
配置
导入syantax:
terraform import aws_instance.example i-abcd1234
此命令定位ID为i-abcd1234的AWS实例并附加
它的现有设置(如EC2 API所述)与
地形状态下的aws_instance.example
因此,使用变量处理导入的方法可以是系统环境变量,
由于可以导入ec2,因此该示例基于使用变量导入实例
export stage_instance=i-abcexample && terraform import aws_instance.ec2 $stage_instance
instance.tf
provider "aws" {
region = "us-west-2"
profile = "test"
}
resource "aws_instance" "ec2" {
ami = "ami-0f2176987ee50226e"
instance_type = "t2.micro"
associate_public_ip_address = false
subnet_id = "subnet-example"
vpc_security_group_ids = ["sg-example"]
key_name = "mytest-ec2key"
tags = {
Name = "Test EC2 Instance"
}
}
要将变量传递给上述脚本,可以使用系统环境变量
export stage_instance=i-abcexample && terraform import aws_instance.ec2 $stage_instance
或者你也可以试试
export stage_instance=abc && export prod_instance=abc
然后尝试导入
terraform import aws_instance.ec2 $stage_instance
我也遇到了同样的问题,我发现顺序很重要。 此命令可用于:
$ terraform import -var 'environment=sandbox' aws_vpc.my_vpc vpc-1234
这意味着我必须在terraform(.bashrc文件)外部编程
stage_实例
和prod_实例
。我希望有一个纯粹的地形解决方案。是的,确切地说,把它们放在bashrc中,或者像我在Answer中发布的那样做。我认为这里的根本原因是工作空间没有映射到环境。根据提供的信息,这可能就是问题所在。