بنقرة واحدة
scp-terraform-provider-iac
SCP(Samsung Cloud Platform) Terraform Provider v2로 인프라 코딩 시 반드시 알아야 할 패턴과 함정
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
SCP(Samsung Cloud Platform) Terraform Provider v2로 인프라 코딩 시 반드시 알아야 할 패턴과 함정
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
| id | scp-terraform-provider-iac |
| name | scp-terraform-provider-iac |
| description | SCP(Samsung Cloud Platform) Terraform Provider v2로 인프라 코딩 시 반드시 알아야 할 패턴과 함정 |
| source | conversation |
| scope | project |
| triggers | ["samsungcloudplatformv2","SCP Terraform","SCP provider","SCP 인프라","SCP IaC","SCP VPC","SCP SKE","SCP DBaaS","opentofu SCP"] |
| quality | high |
SCP Provider(samsungcloudplatformv2)는 AWS/GCP Terraform Provider와 다르게 동작하는 SCP 고유 제약이 많다.
문서가 부족하고 에러 메시지가 불친절해 실제 배포 없이는 알기 어려운 함정이 다수 존재한다.
이 스킬은 실제 kr-west1 dev 환경 프로비저닝(46개 이슈 해결)에서 발견한 핵심 패턴을 담는다.
provider "samsungcloudplatformv2" {
auth_url = "https://iam.example-cloud.com/v1"
default_region = "kr-west1"
# ⚠️ account_id 절대 설정 금지 — HMAC 서명 방식으로 전환되어 모든 API 401 반환
}
허용 리전: kr-west1, kr-east1 (SCP v2 제공 리전)
| 항목 | 올바른 값 | 잘못된 값 |
|---|---|---|
| 서브넷 타입 | GENERAL | PUBLIC, PRIVATE |
| IGW 타입 | IGW | PUBLIC |
| 서브넷 이름 최대 길이 | 20자 | 21자 이상 → 400 |
| VPC당 GENERAL 서브넷 수 | 최대 3개 (dev 쿼터) | 4개 이상 → 400 |
resource "samsungcloudplatformv2_vpc_subnet" "example" {
type = "GENERAL" # PUBLIC/PRIVATE 미지원
}
resource "samsungcloudplatformv2_vpc_internet_gateway" "main" {
type = "IGW"
firewall_enabled = true
firewall_loggable = false # true → 로그 스토리지 미설정 시 400
}
# ⚠️ loggable = true → 로그 스토리지 미연결 시 404
resource "samsungcloudplatformv2_security_group_security_group" "main" {
loggable = false
}
# ⚠️ 프로토콜: ALL 미지원, 소문자만 허용
resource "samsungcloudplatformv2_security_group_security_group_rule" "rule" {
protocol = each.value.protocol == "ALL" ? null : lower(each.value.protocol)
port_range_min = each.value.protocol == "ALL" ? null : each.value.from_port
port_range_max = each.value.protocol == "ALL" ? null : each.value.to_port
}
레이스 컨디션 방지: 모든 SG 모듈에 depends_on = [module.vpc] 필수
# ⚠️ source/destination_address에 0.0.0.0/0 금지 → 400
# ⚠️ AWS IP 대역(13.x.x.x), link-local(169.254.x.x), UDP OUTBOUND → 400
# ✅ 구체적 공인 IP/CIDR만 허용
resource "samsungcloudplatformv2_firewall_firewall_rule" "igw_ssh" {
for_each = var.create_firewall ? toset(var.admin_cidr) : toset([])
firewall_rule_create = {
direction = "INBOUND"
source_address = [each.value]
destination_address = [module.bastion.public_ip] # 공인 IP 명시
service = [{ service_type = "TCP", service_value = "22" }]
}
}
SCP IGW 방화벽의 기본 사이즈는 exsmall이며, 최대 5개 룰만 허용된다.
5개 초과 시 API는 에러 메시지 없이 HTTP 400만 반환하므로 디버깅이 매우 어렵다.
# 에러 예시 (5룰 초과 시)
Error: Error creating firewall rule
│ statusCode: 400
│ (에러 메시지 없음 — 룰 개수 한도 초과가 원인)
해결책:
exsmall → small (최대 50룰) 이상firewall_size 파라미터 없음 → 콘솔 전용 작업-parallelism=1 권장:# ✅ 방화벽 룰 생성 시 권장
tofu apply -parallelism=1 -var-file=dev.tfvars
# 또는 방화벽 룰만 타깃 적용
tofu apply -parallelism=1 -target=module.firewall -var-file=dev.tfvars
resource "samsungcloudplatformv2_virtualserver_server" "bastion" {
state = "ACTIVE" # ⚠️ 이 필드 누락 시 "Invalid server state. State: " 400
server_type_id = "s1v4m8" # 형식: s1v{cpu}m{mem}
boot_volume = {
size = 16 # ⚠️ 8GB 배수만 허용. 최솟값 16GB (2 units × 8GB)
type = "SSD"
delete_on_termination = true
}
}
이미지 data source 필터: status, visibility 필터 제거 — SCP 이미지 API와 불일치 多.
os_distro + name regex만 사용.
# ⚠️ terraform import 미지원 → SCP에 이미 존재하면 409
# 해결: SCP 콘솔에서 키페어 삭제 후 tofu apply
resource "samsungcloudplatformv2_virtualserver_keypair" "keypair" {
name = "${var.environment}-bastion-keypair"
}
coalesce(var.keypair_name, "default") 패턴 사용 시 기본값은 반드시 null (빈 문자열 아님)destroy + create 패턴# 지원 버전 확인 필수 — 콘솔 SKE 생성 화면에서 확인
k8s_version = "v1.32.8" # 예시. 미지원 버전 → 404
node_pools = [{
os_type = "ubuntu 22.04" # v1.32.8: ubuntu 24.04 미지원
}]
variable "maintenance_start_time" {
default = "0100" # ⚠️ "0000" (자정) 미지원 → 400
}
variable "backup_frequency_minute" {
default = 1440 # ⚠️ 60(매시간)이면 retention_period_day 검증 실패
}
loadbalancer_create = {
layer_type = "L4" # ⚠️ 누락 시 "Invalid value for layer type: " 400
}
lb_server_group_create = {
lb_method = "ROUND_ROBIN" # ⚠️ "algorithm" 필드명 오류 → lb_method
vpc_id = var.vpc_id # ⚠️ 필수 (누락 → 400)
subnet_id = var.subnet_id # ⚠️ 필수 (누락 → 400)
}
lb_listener_create = {
routing_action = "LB_SERVER_GROUP" # ⚠️ 누락 시 400
}
SCP Load Balancer API v1.2가 deprecated 상태이며, Terraform으로 LB 생성 시 리스너 생성 단계에서 LB가 ACTIVE 상태가 되지 않아 반복 에러가 발생한다.
# 에러 예시 (LB SDK v1.2 deprecated 관련)
Error: Error creating listener
│ Cannot create listener. Associated Load Balancer is not in the ACTIVE state.(ERROR)
│
│ (원인: LB SDK v1.2 deprecated로 인한 내부 상태 전이 실패)
해결책:
enable_user_lb = false (기본값)로 설정해 Terraform LB 리소스 비활성화# 병렬 refresh 429 발생 시
tofu apply -parallelism=3 -var-file=dev.tfvars
# 또는
tofu apply -refresh=false -var-file=dev.tfvars # state 캐시 사용
# ✅ 방화벽 룰은 반드시 parallelism=1로 적용 (레이스 컨디션 + 사이즈 한도 초과 방지)
tofu apply -parallelism=1 -var-file=dev.tfvars
tofu providers schema -json | python3 -c "
import json,sys
s=json.load(sys.stdin)
r=s['provider_schemas']['registry.terraform.io/samsungsdscloud/samsungcloudplatformv2']['resource_schemas']
print(json.dumps(r['samsungcloudplatformv2_<resource_name>']['block'], indent=2))
" 2>/dev/null
terraform {
backend "s3" {
endpoints = { s3 = "https://..." } # deprecated: endpoint (단수)
skip_credentials_validation = true
encrypt = true
sse_algorithm = "AES256"
}
}
samsungcloudplatformv2 v3.1.7tofu 명령)kr-west1, kr-east1