通过 Terraform 创建资源
Create Resources via terraform
我使用 TERRAFORM 创建了一个 AWS 环境。
之后,一些资源是由控制台(SES、SNS、LAMBDA)创建的,它们不是由 TERRAFORM 提供的。
我正在为控制台创建的这些资源(SES、SNS、LAMBDA)编写 TERRAFORM 代码。
如果我的帐户中已经有这些资源 运行,是否可以通过 TERRAFORM 为这些资源生成此代码而不删除它们?
或者甚至,在这种情况下我必须如何进行?
欢迎来到 IaC 的世界,您将大饱口福。 :)
您可以将所有在没有 terraform 的情况下创建的资源(使用 CLI 或手动配置 - 不属于 tf 状态的资源)导入到您的 terraform 状态。导入这些资源后,您就可以开始使用 terraform 管理它们的生命周期了。
- 在您的 .tf 文件中定义资源
- Import 现有资源
举个例子:
为了导入现有的非 terraform 管理的 lambda,您首先要在 .tf 文件中为其定义资源:
main.tf:
resource "aws_lambda_function" "test_lambda" {
filename = "lambda_function_payload.zip"
function_name = "lambda_function_name"
role = "${aws_iam_role.iam_for_lambda.arn}"
handler = "exports.test"
# The filebase64sha256() function is available in Terraform 0.11.12 and later
# For Terraform 0.11.11 and earlier, use the base64sha256() function and the file() function:
# source_code_hash = "${base64sha256(file("lambda_function_payload.zip"))}"
source_code_hash = "${filebase64sha256("lambda_function_payload.zip")}"
runtime = "nodejs12.x"
environment {
variables = {
foo = "bar"
}
}
}
然后你可以执行terraform import,为了导入现有的lambda:
terraform import aws_lambda_function.test_lambda my_test_lambda_function
我使用 TERRAFORM 创建了一个 AWS 环境。
之后,一些资源是由控制台(SES、SNS、LAMBDA)创建的,它们不是由 TERRAFORM 提供的。
我正在为控制台创建的这些资源(SES、SNS、LAMBDA)编写 TERRAFORM 代码。
如果我的帐户中已经有这些资源 运行,是否可以通过 TERRAFORM 为这些资源生成此代码而不删除它们?
或者甚至,在这种情况下我必须如何进行?
欢迎来到 IaC 的世界,您将大饱口福。 :)
您可以将所有在没有 terraform 的情况下创建的资源(使用 CLI 或手动配置 - 不属于 tf 状态的资源)导入到您的 terraform 状态。导入这些资源后,您就可以开始使用 terraform 管理它们的生命周期了。
- 在您的 .tf 文件中定义资源
- Import 现有资源
举个例子:
为了导入现有的非 terraform 管理的 lambda,您首先要在 .tf 文件中为其定义资源:
main.tf:
resource "aws_lambda_function" "test_lambda" {
filename = "lambda_function_payload.zip"
function_name = "lambda_function_name"
role = "${aws_iam_role.iam_for_lambda.arn}"
handler = "exports.test"
# The filebase64sha256() function is available in Terraform 0.11.12 and later
# For Terraform 0.11.11 and earlier, use the base64sha256() function and the file() function:
# source_code_hash = "${base64sha256(file("lambda_function_payload.zip"))}"
source_code_hash = "${filebase64sha256("lambda_function_payload.zip")}"
runtime = "nodejs12.x"
environment {
variables = {
foo = "bar"
}
}
}
然后你可以执行terraform import,为了导入现有的lambda:
terraform import aws_lambda_function.test_lambda my_test_lambda_function