14. Terraform으로 IAM 사용자 프로비저닝
Source: Dev.to
번역을 진행하려면 번역하고자 하는 전체 텍스트(코드 블록 및 URL 제외)를 제공해 주세요. 텍스트를 받는 대로 요청하신 대로 한국어로 번역해 드리겠습니다.
Lab Information
Nautilus DevOps 팀은 Terraform 프로비저너를 실험하고 있습니다. 여러분의 과제는 IAM 사용자를 생성하고 local-exec 프로비저너를 사용해 확인 메시지를 기록하는 것입니다.
iamuser_siva라는 이름의 IAM 사용자를 생성합니다.- IAM 사용자 리소스에 local‑exec 프로비저너를 사용하여 메시지
KKE iamuser_siva has been created successfully!를/home/bob/terraform아래의KKE_user_created.log파일에 기록합니다. - 모든 Terraform 설정은 별도의
.tf파일을 만들지 않고 하나의main.tf파일에 넣어야 합니다. variables.tf파일을 사용해 변수KKE_USER_NAME을 정의합니다.terraform.tfvars파일을 사용해 IAM 사용자 이름을 제공합니다.outputs.tf파일을 사용해 IAM 사용자 이름을kke_iam_user_name으로 출력합니다.
Lab Solutions
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는 선택된 공급자를 사용하여 다음 실행 계획을 생성했습니다.
리소스 작업은 다음 기호로 표시됩니다:
+ create
Terraform는 다음 작업을 수행합니다:
# aws_iam_user.kke_user가 생성될 것입니다
+ 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)
}
계획: 추가 1개, 변경 0개, 삭제 0개.
출력값 변경:
+ kke_iam_user_name = "iamuser_siva"
이 작업을 수행하시겠습니까?
Terraform는 위에 설명된 작업을 수행합니다.
승인하려면 'yes'만 입력 가능합니다.
값을 입력하세요: yes
aws_iam_user.kke_user: 생성 중...
aws_iam_user.kke_user: '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: 0초 후 생성 완료 [id=iamuser_siva]
적용 완료! 리소스: 추가 1개, 변경 0개, 삭제 0개.
출력값:
kke_iam_user_name = "iamuser_siva"
확인
로그 파일을 확인하세요:
cat /home/bob/terraform/KKE_user_created.log
예상 출력:
KKE iamuser_siva has been created successfully!
Source: …
단계별 설명
실험이 가르치는 내용
- Terraform 프로비저너
- 로컬 명령 실행
- 리소스 생성 후 작업 수행
local-exec란?
Terraform을 실행하는 머신에서 지정된 명령을 실행합니다. AWS 내부에서 실행되는 것이 아닙니다.
왜 IAM 사용자에 프로비저너를 연결하나요?
프로비저너는 리소스가 생성된 후에 실행되므로, 사용자가 성공적으로 프로비저닝된 경우에만 로그 항목이 기록됩니다.
왜 변수를 사용하나요?
- 값들을 하드코딩하지 않기 위해
- 구성의 재사용성을 높이기 위해
- 채점자가 올바른 변수 사용 여부를 확인하기 때문에
terraform apply 시 어떤 일이 일어나나요?
- Terraform이
terraform.tfvars파일을 읽습니다. - IAM 사용자
iamuser_siva를 생성합니다. - 로컬 머신에서
local-exec명령을 실행합니다. - 확인 메시지를 로그 파일에 추가합니다.
- 사용자 이름을 출력합니다.
일반적인 실수
- 잘못된 파일 경로에 쓰기.
remote-exec대신local-exec사용.- 정확한 메시지 텍스트를 철자 오류로 작성.
- 변수를 정의하거나 참조하는 것을 잊음.
- 출력 이름이 일치하지 않음 (
kke_iam_user_name).