14. 使用 Terraform 配置 IAM 用户
发布: (2026年2月8日 GMT+8 17:09)
4 分钟阅读
原文: Dev.to
Source: Dev.to
请提供您希望翻译的具体文本内容,我将按照要求保持原有的格式、Markdown 语法和技术术语,仅翻译正文部分。谢谢!
实验信息
Nautilus DevOps 团队正在尝试使用 Terraform provisioner。你的任务是创建一个 IAM 用户,并使用 local-exec provisioner 记录确认信息。
- 创建一个名为
iamuser_siva的 IAM 用户。 - 在 IAM 用户资源中使用 local‑exec provisioner,将消息
KKE iamuser_siva has been created successfully!写入位于/home/bob/terraform下的文件KKE_user_created.log。 - 所有 Terraform 配置应放在单个
main.tf文件中(不要为资源创建单独的.tf文件)。 - 使用
variables.tf文件定义变量KKE_USER_NAME。 - 使用
terraform.tfvars提供 IAM 用户名。 - 使用
outputs.tf文件将 IAM 用户名以kke_iam_user_name输出。
实验解决方案
variables.tf
variable "KKE_USER_NAME" {
type = string
}
terraform.tfvars
KKE_USER_NAME = "iamuser_siva"
main.tf
resource "aws_iam_user" "kke_user" {
name = var.KKE_USER_NAME
provisioner "local-exec" {
command = "echo 'KKE ${var.KKE_USER_NAME} has been created successfully!' >> /home/bob/terraform/KKE_user_created.log"
}
}
重要提示:
local-exec在执行 Terraform 的机器上运行。- 该命令会将信息追加到文件中(如果文件已存在也安全)。
- 精确的消息文本对评分至关重要。
outputs.tf
output "kke_iam_user_name" {
value = aws_iam_user.kke_user.name
}
Terraform 命令(按顺序执行)
terraform init
terraform validate
terraform apply
# 当出现提示时,输入:yes
预期结果
bob@iac-server ~/terraform via 💠 default ➜ terraform apply
Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# aws_iam_user.kke_user will be created
+ resource "aws_iam_user" "kke_user" {
+ arn = (known after apply)
+ force_destroy = false
+ id = (known after apply)
+ name = "iamuser_siva"
+ path = "/"
+ tags_all = (known after apply)
+ unique_id = (known after apply)
}
Plan: 1 to add, 0 to change, 0 to destroy.
Changes to Outputs:
+ kke_iam_user_name = "iamuser_siva"
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
aws_iam_user.kke_user: Creating...
aws_iam_user.kke_user: Provisioning with 'local-exec'...
aws_iam_user.kke_user (local-exec): Executing: ["/bin/sh" "-c" "echo 'KKE iamuser_siva has been created successfully!' >> /home/bob/terraform/KKE_user_created.log"]
aws_iam_user.kke_user: Creation complete after 0s [id=iamuser_siva]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Outputs:
kke_iam_user_name = "iamuser_siva"
验证
检查日志文件:
cat /home/bob/terraform/KKE_user_created.log
预期输出:
KKE iamuser_siva has been created successfully!
步骤说明
本实验的学习内容
- Terraform provisioner(供应器)
- 运行本地命令
- 在资源创建后执行操作
什么是 local-exec?
在 执行 Terraform 的机器上 运行指定的命令,而不是在 AWS 内部运行。
为什么把 provisioner 附加到 IAM 用户上?
Provisioner 会在资源 创建之后 执行,确保只有在用户成功创建后才写入日志条目。
为什么使用变量?
- 避免硬编码数值。
- 使配置可复用。
- 评分系统会检查是否正确使用了变量。
terraform apply 期间会发生什么?
- Terraform 读取
terraform.tfvars。 - 创建 IAM 用户
iamuser_siva。 - 在本地机器上执行
local-exec命令。 - 将确认信息追加到日志文件。
- 输出用户名称。
常见错误
- 写入错误的文件路径。
- 使用
remote-exec而不是local-exec。 - 拼写错误的确切消息文本。
- 忘记定义或引用变量。
- 输出名称不匹配(
kke_iam_user_name)。