Tag Management Guide(KR) - cloud-barista/cb-spider GitHub Wiki

Tag Management Guide

Language: English | ν•œκ΅­μ–΄

1. CB-Spider Tag 관리 κ°œμš”

  • CB-SpiderλŠ” μ—°λ™λœ ν΄λΌμš°λ“œμ˜ 관리 μžμ›λ“€μ— Tag κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.
  • μ‚¬μš©μžλŠ” Tagλ₯Ό μ‚¬μš©ν•˜μ—¬ μžμ›λ“€μ„ κ·Έλ£Ήν™”ν•˜κ³  식별할 수 있으며, 이λ₯Ό 톡해 λŒ€κ·œλͺ¨ μžμ›μ˜ 관리 μžλ™ν™”, λΉ„μš© 관리 λ“± λ‹€μ–‘ν•œ λͺ©μ μ— ν™œμš©ν•  수 μžˆλ‹€.
  • ν•˜λ‚˜μ˜ TagλŠ” λ¬Έμžμ—΄ Key와 λ¬Έμžμ—΄ Value 쌍으둜 κ΅¬μ„±λ˜λ©°, Key 값은 ν•„μˆ˜μ΄λ‚˜ ValueλŠ” μ˜΅μ…˜μœΌλ‘œ μƒλž΅ κ°€λŠ₯ν•˜λ‹€.
  • μ‚¬μš©μžλŠ” λ‹€μŒκ³Ό 같이 두 κ°€μ§€ λ°©λ²•μœΌλ‘œ μžμ›μ— Tagλ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.
    1. μžμ› 생성 μ‹œ Tag μ„€μ •: μžμ› 생성 μš”μ²­ μ‹œ TagListλ₯Ό μ„€μ •ν•˜μ—¬ μ—¬λŸ¬ 개의 Tag μΆ”κ°€ κ°€λŠ₯
    2. κΈ°μ‘΄ μžμ›μ— Tag 관리 API μ‚¬μš©: Tag 관리 REST APIλ₯Ό ν†΅ν•œ Tag μΆ”κ°€/쑰회/μ‚­μ œ κ°€λŠ₯
  • Tag 관리 APIλŠ” AddTag, ListTag, GetTag, RemoveTag 4개의 APIλ₯Ό μ œκ³΅ν•œλ‹€.
  • 지원 λŒ€μƒ μžμ› νƒ€μž…: VPC, SUBNET, SG, KEY(keypair), VM, NLB, DISK, MYIMAGE, CLUSTER
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     CB-Spider Tag Management                     β”‚
β”‚                                                                  β”‚
β”‚  ConnectionName (CSP + Region)                                   β”‚
β”‚        β”‚                                                         β”‚
β”‚        β”œβ”€β”€ AddTag(ResourceType, ResourceName, Tag)               β”‚
β”‚        β”‚      └── Tag(Key, Value) μΆ”κ°€                           β”‚
β”‚        β”‚                                                         β”‚
β”‚        β”œβ”€β”€ ListTag(ResourceType, ResourceName)                   β”‚
β”‚        β”‚      └── ν•΄λ‹Ή μžμ›μ˜ 전체 Tag λͺ©λ‘ 쑰회                   β”‚
β”‚        β”‚                                                         β”‚
β”‚        β”œβ”€β”€ GetTag(ResourceType, ResourceName, Key)               β”‚
β”‚        β”‚      └── νŠΉμ • Tag 정보 쑰회 (Key 기반)                   β”‚
β”‚        β”‚                                                         β”‚
β”‚        └── RemoveTag(ResourceType, ResourceName, Key)            β”‚
β”‚               └── νŠΉμ • Tag μ‚­μ œ (Key 기반)                        β”‚
β”‚                                                                  β”‚
β”‚  지원 μžμ› νƒ€μž…                                                   β”‚
β”‚    VPC, SUBNET, SG, KEY(keypair), VM, NLB,                       β”‚
β”‚    DISK, MYIMAGE, CLUSTER                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. CSP별 Tag 제곡 ν˜„ν™©

  • CSP별 μžμ›λ³„ Tag 제곡 ν˜„ν™©μ€ λ‹€μŒκ³Ό κ°™λ‹€.

    Provider VPC Subnet SecurityGroup VM KeyPair VM Disk MyImage NLB Cluster
    AWS O O O O O O O O O
    Azure O - O O O O O O O
    GCP - - - - O O - - O
    Alibaba β–³ β–³ O O O O O O -
    Tencent O O O O O O O O O
    IBM O O O O O O O O O
    OpenStack O O O - O - - O -
    KT Classic - - - - O O O - -
    β€» β–³: μžμ› 생성 μ‹œμ—λ§Œ Tagging 제곡
    β€»  - : CSPκ°€ Tagging을 μ œκ³΅ν•˜μ§€ μ•ŠλŠ” μžμ›
    β€» NHN, NCP, KT VPC: Tagging을 μ œκ³΅ν•˜μ§€ μ•ŠμŒ
       - Tag API ν˜ΈμΆœμ‹œ λ‹€μŒ 였λ₯˜ λ©”μ‹œμ§€ λ°˜ν™˜: "nhn-config does not support TagHandler"
    
    β€» Tag 미지원 μžμ›μ— λŒ€ν•œ API ν˜ΈμΆœμ‹œ λŒ€μ‘
      (1) μžμ› 생성 μš”μ²­ μ‹œ Tag μ„€μ • μš”μ²­: μžμ›μ€ μƒμ„±λ˜κ³ , TagλŠ” μΆ”κ°€λ˜μ§€ μ•ŠμŒ(Log 좜λ ₯ μ—†μŒ)
      (2) κΈ°μ‘΄ μžμ›μ— Tag μΆ”κ°€ μš”μ²­: λ‹€μŒ 곡톡 ν˜•μ‹μ˜ μ—λŸ¬ λ©”μ‹œμ§€ λ°˜ν™˜(Error Log 좜λ ₯)
         β€’ format: "[TAG_NOT_SUPPORTED] Tagging is not supported for the resource: {CSP}-{RESOURCE}"
         β€’ example: "[TAG_NOT_SUPPORTED] Tagging is not supported for the resource: GCP-keypair"
    

3. 사전 μ€€λΉ„ 사항

  • λŒ€μƒ CSP Connection이 μ •μƒμ μœΌλ‘œ λ“±λ‘λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.
  • Tagλ₯Ό μΆ”κ°€/μ‘°νšŒν•  λŒ€μƒ μžμ›(VPC, VM λ“±)이 이미 μƒμ„±λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.

4. CB-Spider Tag API 및 제곡 정보 규격

  • μ‚¬μš©μžλŠ” λ‹€μŒκ³Ό 같은 CB-Spider REST APIλ₯Ό μ΄μš©ν•˜μ—¬ Tag 정보λ₯Ό JSON 규격으둜 μ œκ³΅λ°›λŠ”λ‹€.

4.1 Tag API

# Tag μΆ”κ°€
POST /spider/tag                  - Add Tag

# Tag λͺ©λ‘ 쑰회
GET  /spider/tag                  - List Tags

# νŠΉμ • Tag 쑰회
GET  /spider/tag/{Key}            - Get Tag

# Tag μ‚­μ œ
DELETE /spider/tag/{Key}          - Remove Tag

4.2 μš”μ²­ νŒŒλΌλ―Έν„°

AddTag (POST /spider/tag)

νŒŒλΌλ―Έν„° μ„€λͺ… μ˜ˆμ‹œ
ConnectionName λŒ€μƒ Connection 이름 aws-seoul-config
ReqInfo.ResourceType μžμ› νƒ€μž… VPC, VM, SG λ“±
ReqInfo.ResourceName μžμ› 이름 vpc-01, my-vm
ReqInfo.Tag μΆ”κ°€ν•  Tag (Key, Value 쌍) {"Key": "env", "Value": "prod"}

ListTag (GET /spider/tag)

νŒŒλΌλ―Έν„° μ„€λͺ… μ˜ˆμ‹œ
ConnectionName λŒ€μƒ Connection 이름 aws-seoul-config
ResourceType μžμ› νƒ€μž… VPC, VM λ“±
ResourceName μžμ› 이름 vpc-01

GetTag (GET /spider/tag/{Key})

νŒŒλΌλ―Έν„° μ„€λͺ… μ˜ˆμ‹œ
ConnectionName λŒ€μƒ Connection 이름 aws-seoul-config
ResourceType μžμ› νƒ€μž… VPC, VM λ“±
ResourceName μžμ› 이름 vpc-01
Key μ‘°νšŒν•  Tag의 Key env

RemoveTag (DELETE /spider/tag/{Key})

νŒŒλΌλ―Έν„° μ„€λͺ… μ˜ˆμ‹œ
ConnectionName λŒ€μƒ Connection 이름 aws-seoul-config
ReqInfo.ResourceType μžμ› νƒ€μž… VPC, VM λ“±
ReqInfo.ResourceName μžμ› 이름 vpc-01
Key μ‚­μ œν•  Tag의 Key env

4.3 μžμ› νƒ€μž… (ResourceType)

μžμ› νƒ€μž… κ°’ μ„€λͺ…
VPC VPC Virtual Private Cloud
Subnet SUBNET Subnet
Security Group SG Security Group
KeyPair KEY VM SSH KeyPair
VM VM Virtual Machine
NLB NLB Network Load Balancer
Disk DISK Disk (Volume)
MyImage MYIMAGE VM Snapshot Image
Cluster CLUSTER Kubernetes Cluster

4.4 제곡 정보 규격

Tag 정보 (KeyValue)

ν•„λ“œ μ„€λͺ… μ˜ˆμ‹œ
Key Tag ν‚€ κ°’ env, team, project
Value Tag κ°’ production, backend, spider

ListTag 응닡 ν˜•μ‹

ν•„λ“œ μ„€λͺ…
tag Tag λͺ©λ‘ (KeyValue λ°°μ—΄)
resourceType μžμ› νƒ€μž…μ˜ μ‚¬λžŒμ΄ 읽을 수 μžˆλŠ” 이름

5. CB-Spider Tag API μ˜ˆμ‹œ

5.1 Tag μΆ”κ°€ (AddTag)

curl -u "$SPIDER_USERNAME:$SPIDER_PASSWORD" -sX POST 'http://localhost:1024/spider/tag' \
  -H 'Content-Type: application/json' \
  -d '{
    "ConnectionName": "aws-seoul-config",
    "ReqInfo": {
      "ResourceType": "VPC",
      "ResourceName": "vpc-01",
      "Tag": {
        "Key": "env",
        "Value": "production"
      }
    }
  }' | jq

응닡 μ˜ˆμ‹œ:

{
  "Key": "env",
  "Value": "production"
}

5.2 Tag λͺ©λ‘ 쑰회 (ListTag)

curl -u "$SPIDER_USERNAME:$SPIDER_PASSWORD" -sX GET \
  'http://localhost:1024/spider/tag?ConnectionName=aws-seoul-config&ResourceType=VPC&ResourceName=vpc-01' | jq

응닡 μ˜ˆμ‹œ:

{
  "tag": [
    {
      "Key": "env",
      "Value": "production"
    },
    {
      "Key": "team",
      "Value": "backend"
    },
    {
      "Key": "Name",
      "Value": "vpc-01"
    }
  ],
  "resourceType": "VPC"
}

5.3 νŠΉμ • Tag 쑰회 (GetTag)

curl -u "$SPIDER_USERNAME:$SPIDER_PASSWORD" -sX GET \
  'http://localhost:1024/spider/tag/env?ConnectionName=aws-seoul-config&ResourceType=VPC&ResourceName=vpc-01' | jq

응닡 μ˜ˆμ‹œ:

{
  "Key": "env",
  "Value": "production"
}

5.4 Tag μ‚­μ œ (RemoveTag)

curl -u "$SPIDER_USERNAME:$SPIDER_PASSWORD" -sX DELETE 'http://localhost:1024/spider/tag/env' \
  -H 'Content-Type: application/json' \
  -d '{
    "ConnectionName": "aws-seoul-config",
    "ReqInfo": {
      "ResourceType": "VPC",
      "ResourceName": "vpc-01"
    }
  }' | jq

응닡 μ˜ˆμ‹œ:

{
  "Result": "true"
}

5.5 μžμ› 생성 μ‹œ Tag μ„€μ • (예: VPC 생성)

μžμ› 생성 API의 μš”μ²­ Body에 TagListλ₯Ό ν¬ν•¨ν•˜μ—¬ 생성 μ‹œμ μ— Tagλ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.

curl -u "$SPIDER_USERNAME:$SPIDER_PASSWORD" -sX POST 'http://localhost:1024/spider/vpc' \
  -H 'Content-Type: application/json' \
  -d '{
    "ConnectionName": "aws-seoul-config",
    "ReqInfo": {
      "Name": "vpc-01",
      "IPv4_CIDR": "10.0.0.0/16",
      "SubnetInfoList": [
        {
          "Name": "subnet-01",
          "IPv4_CIDR": "10.0.1.0/24"
        }
      ],
      "TagList": [
        {"Key": "env", "Value": "production"},
        {"Key": "team", "Value": "backend"}
      ]
    }
  }' | jq

6. μ£Όμ˜μ‚¬ν•­ 및 μ œμ•½μ‚¬ν•­

6.1 CSP별 Tag 지원 λ²”μœ„κ°€ 닀름

  • CSPλ§ˆλ‹€ Tagλ₯Ό μ§€μ›ν•˜λŠ” μžμ›μ˜ μ’…λ₯˜κ°€ λ‹€λ₯΄λ‹€ (2절 CSP별 Tag 제곡 ν˜„ν™© μ°Έμ‘°).
  • 일뢀 CSP(Alibaba)λŠ” νŠΉμ • μžμ›μ— λŒ€ν•΄ μžμ› 생성 μ‹œμ—λ§Œ Tag 섀정이 κ°€λŠ₯ν•˜λ©°, 생성 ν›„ Tag 관리 APIλ₯Ό ν†΅ν•œ μΆ”κ°€λŠ” λΆˆκ°€ν•˜λ‹€ (β–³ ν‘œμ‹œ).

6.2 Tag 미지원 CSP 및 μžμ›μ— λŒ€ν•œ 처리

  • NHN, NCP, KT VPCλŠ” Tagging을 μ œκ³΅ν•˜μ§€ μ•ŠμœΌλ©°, Tag API 호좜 μ‹œ λ‹€μŒ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜ν•œλ‹€.
    • "<csp>-config does not support TagHandler"
  • Tag 미지원 μžμ›μ— λŒ€ν•œ API 호좜 μ‹œ λŒ€μ‘:
    1. μžμ› 생성 μš”μ²­ μ‹œ Tag μ„€μ • μš”μ²­: μžμ›μ€ 정상 μƒμ„±λ˜κ³ , TagλŠ” μΆ”κ°€λ˜μ§€ μ•ŠμŒ (Log 좜λ ₯ μ—†μŒ)
    2. κΈ°μ‘΄ μžμ›μ— Tag μΆ”κ°€ μš”μ²­: λ‹€μŒ 곡톡 ν˜•μ‹μ˜ μ—λŸ¬ λ©”μ‹œμ§€ λ°˜ν™˜ (Error Log 좜λ ₯)
      • format: [TAG_NOT_SUPPORTED] Tagging is not supported for the resource: {CSP}-{RESOURCE}
      • example: [TAG_NOT_SUPPORTED] Tagging is not supported for the resource: GCP-keypair

6.3 동일 Key 쀑볡 μΆ”κ°€ λΆˆκ°€

  • 동일 μžμ›μ— 동일 μ΄λ¦„μ˜ KeyλŠ” 쀑볡 μΆ”κ°€ν•  수 μ—†λ‹€.
  • 이미 μ‘΄μž¬ν•˜λŠ” Key둜 AddTagλ₯Ό ν˜ΈμΆœν•˜λ©΄ μ—λŸ¬κ°€ λ°˜ν™˜λœλ‹€.

6.4 μžμ› 생성 μ‹œ Tag μΆ”κ°€ 였λ₯˜ 처리

  • μžμ› 생성 μ‹œ TagList에 ν¬ν•¨λœ Tag 쀑 일뢀가 μ‹€νŒ¨ν•  경우:
    1. μƒμ„±λœ μžμ›μ€ μœ μ§€λœλ‹€.
    2. 생성 μ„±κ³΅ν•œ Tag듀은 λ°˜ν™˜ μ •λ³΄μ˜ TagList에 μ„€μ •λ˜μ–΄ λ°˜ν™˜λœλ‹€.
    3. 생성 였λ₯˜ Tag듀은 λ‹€μŒ μ—λŸ¬ λ©”μ‹œμ§€ ν˜•μ‹μœΌλ‘œ λ°˜ν™˜λœλ‹€.
      • "TaggingError: {Key01, Value01}, {Key05, Value05}: CSP μ—λŸ¬ λ©”μ‹œμ§€"

6.5 GetTag 및 RemoveTag의 KeyλŠ” strict match

  • GetTag와 RemoveTag APIμ—μ„œ Key 값은 μ •ν™•νžˆ μΌμΉ˜ν•΄μ•Ό ν•œλ‹€ (λΆ€λΆ„ 일치 λΆˆκ°€).

7. API 응닡 μ½”λ“œ

HTTP Status μ„€λͺ…
200 OK μš”μ²­ 성곡
400 Bad Request 잘λͺ»λœ μš”μ²­ (ν•„μˆ˜ νŒŒλΌλ―Έν„° λˆ„λ½, 잘λͺ»λœ μžμ› νƒ€μž… λ“±)
404 Not Found λŒ€μƒ μžμ›μ„ 찾을 수 μ—†μŒ
500 Internal Server Error μ„œλ²„ λ‚΄λΆ€ 였λ₯˜ λ˜λŠ” CSP API 였λ₯˜

8. 참고 자료

⚠️ **GitHub.com Fallback** ⚠️