【Terraform】尝试使用terraform import
首先
由于以前在工作中使用了terraform import命令来导入AWS现有的基础设施,为了加深知识的牢固程度,我想把这个经验写成文章。
“Terraform import” 是什么意思?
这是一个将现有基础设施置于Terraform管理之下的命令。
在使用AWS上对内容进行修改后,需要将其反映到Terraform上。
前提
这次我们使用了事先准备的Terraform代码。
本文介绍的代码与此处所提及的相同。
Terraform的版本信息如下。
% terraform --version
Terraform v1.1.8
on darwin_amd64
+ provider registry.terraform.io/hashicorp/aws v4.22.0
Your version of Terraform is out of date! The latest version
is 1.2.5. You can update by downloading from https://www.terraform.io/downloads.html
%
进行terraform import的步骤
我计划为本次考试创建一个AWS S3并尝试导入文件。
创建S3
我会在AWS手动创建以下配置的S3。
※关于如何创建S3的方法和说明将不在此讨论范围。
設定項目内容備考BucketNametestbucket0717設定AWS Regionap-northeast-1デフォルトObject OwnershipACLs disabledデフォルトBlock Public Access settings for this bucketBlock all public accessデフォルトBucket VersioningDisabledデフォルトTagsKey:Name
Value:testbucket設定Default encryptionDisableデフォルト
Value:testbucket設定Default encryptionDisableデフォルト
创建s3.tf文件
在作業目录(ec2_create_code)下创建一个名为s3.tf的文件,内容留空。
# ----------------------------------
# S3
# ----------------------------------
resource "aws_s3_bucket" "s3" {
}
执行terraform import
执行以下命令。
terraform import aws_s3_bucket.s3 バケット名
成功导入!如果输出出现“无问题”,即可。
% terraform import aws_s3_bucket.s3 testbucket0717
aws_s3_bucket.s3: Importing from ID "testbucket0717"...
aws_s3_bucket.s3: Import prepared!
Prepared aws_s3_bucket for import
aws_s3_bucket.s3: Refreshing state... [id=testbucket0717]
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.
%
运行后,terraform.tfstate文件将在工作目录中创建。
※terraform.tfstate文件用于保存管理目标基础架构和配置的状态。
{
"version": 4,
"terraform_version": "1.1.8",
"serial": 70,
"lineage": "*****************************",
"outputs": {},
"resources": [
{
"mode": "managed",
"type": "aws_s3_bucket",
"name": "s3",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"schema_version": 0,
"attributes": {
"acceleration_status": "",
"acl": null,
"arn": "arn:aws:s3:::testbucket0717",
"bucket": "testbucket0717",
"bucket_domain_name": "testbucket0717.s3.amazonaws.com",
"bucket_prefix": null,
执行terraform plan。
执行terraform plan命令,确保已反映已导入的内容。
* 由于该命令用于在对资源进行更改之前进行确认,因此可以随时执行,不会有任何问题。
# aws_s3_bucket.s3 will be updated in-place
~ resource "aws_s3_bucket" "s3" {
+ force_destroy = false
id = "testbucket0717"
~ tags = {
- "Name" = "testbucket" -> null
}
~ tags_all = {
- "Name" = "testbucket"
} -> (known after apply)
# (8 unchanged attributes hidden)
# (2 unchanged blocks hidden)
}
由于s3.tf文件未被修改,如果继续执行apply,则资源将被删除。即使执行terraform import,tf文件本身也不会被更改。
修正s3.tf。
在查看terraform.tfstate文件的同时,对s3.tf进行修改。
# ----------------------------------
# S3
# ----------------------------------
resource "aws_s3_bucket" "s3" {
bucket = "testbucket0717"
tags = {
Name = "testbucket"
}
tags_all = {
Name = "testbucket"
}
}
再次执行terraform plan。
再次执行terraform plan命令,确认没有任何变更。
如果在执行结果中显示“没有变化”,那就没有问题。
No changes. Your infrastructure matches the configuration.
请引用以下内容: