Skip to content
ByoungSeob Kim edited this page Sep 19, 2024 · 5 revisions

CB-Spider REST API 활용 예시


* 본 가이드는 CB-Spider의 REST API를 이용한 멀티클라우드 제어에 대한 예시를 제공하고 있습니다.
* 본 가이드는 AWS VM 생성 및 제어 중심으로 가이드하고 있습니다. 
* 그 외 CSP 및 자원에 대한 활용은 다음 User Guide 및 API 문서 등을 참고하여 유사한 방법으로 적용 가능합니다. 

[실행 절차]

  1. 사전 준비
  2. 연결 등록
  3. 자원 생성
  4. VM 제어
  5. 자원 삭제

1. 사전 준비

  • 연동 대상 CSP 계정 생성 및 Credential 준비

  • Terminal-1: CB-Spider 서버 실행 환경

  • Terminal-2: CB-Spider 클라이언트 실행 환경

    • curl을 이용한 CB-Spider REST API 간단한 시험
      • CB-Spider 서버가 제공하는 연동 대상 CSP 목록 출력
        curl -sX GET http://localhost:1024/spider/cloudos |json_pp
        
        output
        {
           "cloudos" : [
              "AWS",
              "AZURE",
              "GCP",
              "ALIBABA",
              "TENCENT",
              "IBM",
              "OPENSTACK",
              "NCP",
              "NCPVPC",
              "NHNCLOUD",
              "KTCLOUD",
              "KTCLOUDVPC",
              "MOCK"
           ]
        }
        

이하 Terminal-2에서 실행

2. 연결 등록

연동 대상 클라우드의 연결 설정을 위한 정보를 등록한다.
연결 설정을 등록한 후에는 등록 시에 부여한 연결 이름(Connection Name)을 이용하여 대상 클라우드에 연결 및 제어할 수 있다. 
연결 설정은 다음 순으로 진행한다.

  (1) Cloud Driver 등록
  (2) Cloud Credential 등록
  (3) Cloud Region/Zone 등록
  (4) Cloud Connection 등록 
  • (1) Cloud Driver 등록

    • 연동하고자 하는 대상 Cloud(CSP)에 맞는 Cloud Driver 정보를 등록한다.
    • 등록 예시
      curl -sX POST http://localhost:1024/spider/driver \
          -H 'Content-Type: application/json' \
          -d '{
              "DriverName": "aws-driver01",
              "ProviderName": "AWS",
              "DriverLibFileName": "aws-driver-v1.0.so"
          }' | json_pp
      
      output
      {
         "DriverLibFileName" : "aws-driver-v1.0.so",
         "DriverName" : "aws-driver01",
         "ProviderName" : "AWS"
      }
      
  • (2) Cloud Credential 등록

    • 연동하고자 하는 대상 Cloud(CSP)에 맞는 Credential 정보를 등록한다.
    • 등록 예시(XXXXX: CSP로부터 발급 받은 정보로 교체)
      curl -sX POST http://localhost:1024/spider/credential \
          -H 'Content-Type: application/json' \
          -d '{
              "CredentialName": "aws-credential01",
              "ProviderName": "AWS",
              "KeyValueInfoList": [
                  {"Key": "aws_access_key_id", "Value": "XXXXXXXXXXXXXXXXXXXXXXX"},
                  {"Key": "aws_secret_access_key", "Value": "XXXXXXXXXXXXXXXXXXXXXXX"}
              ]
          }' | json_pp
      
      output
      {
         "CredentialName" : "aws-credential01",
         "KeyValueInfoList" : [
            {
               "Key" : "ClientId",
               "Value" : "XXXXXXXXXXXXXXXXXXXXXXX"
            },
            {
               "Key" : "ClientSecret",
               "Value" : "XXXXXXXXXXXXXXXXXXXXXXX"
            }
         ],
         "ProviderName" : "AWS"
      }
      
  • (3) Cloud Region/Zone 등록

    • 연동하고자 하는 대상 Cloud(CSP)에 맞는 Region/Zone 정보를 등록한다.
    • 등록 예시(AWS의 ohio, oregon 지역의 2개의 Region/Zone 등록 예시)
      regions=("aws-ohio:us-east-2:us-east-2a"
               "aws-oregon:us-west-2:us-west-2a")
      
      for region in "${regions[@]}"; do
          IFS=":" read -r RegionName Region Zone <<< "$region"
          curl -sX POST http://localhost:1024/spider/region \
              -H 'Content-Type: application/json' \
              -d '{
                  "RegionName": "'$RegionName'",
                  "ProviderName": "AWS",
                  "KeyValueInfoList": [
                      {"Key": "Region", "Value": "'$Region'"},
                      {"Key": "Zone", "Value": "'$Zone'"}
                  ]
              }' | json_pp
      done
      
      output
      {
         "AvailableZoneList" : null,
         "KeyValueInfoList" : [
            {
               "Key" : "Region",
               "Value" : "us-east-2"
            },
            {
               "Key" : "Zone",
               "Value" : "us-east-2a"
            }
         ],
         "ProviderName" : "AWS",
         "RegionName" : "aws-ohio"
      }
      {
         "AvailableZoneList" : null,
         "KeyValueInfoList" : [
            {
               "Key" : "Region",
               "Value" : "us-west-2"
            },
      ... 중략 ...
      
  • (4) Cloud Connection 등록

    • 연동하고자 하는 대상 Cloud(CSP)에 맞는 Connection 정보를 등록한다.
    • 앞에서 등록한 driver name, credential name, region name을 설정한다.
    • 등록 예시(AWS ohio, oregon 관련 2개의 Connection 등록 예시)
      configs=("aws-ohio-config:aws-ohio"
               "aws-oregon-config:aws-oregon")
      
      for config in "${configs[@]}"; do
          IFS=":" read -r ConfigName RegionName <<< "$config"
          curl -sX POST http://localhost:1024/spider/connectionconfig \
              -H 'Content-Type: application/json' \
              -d '{
                  "ConfigName": "'$ConfigName'",
                  "ProviderName": "AWS",
                  "DriverName": "aws-driver01",
                  "CredentialName": "aws-credential01",
                  "RegionName": "'$RegionName'"
              }' | json_pp
      done
      
      output
      {
         "ConfigName" : "aws-ohio-config",
         "CredentialName" : "aws-credential01",
         "DriverName" : "aws-driver01",
         "ProviderName" : "AWS",
         "RegionName" : "aws-ohio"
      }
      {
         "ConfigName" : "aws-oregon-config",
         "CredentialName" : "aws-credential01",
         "DriverName" : "aws-driver01",
         "ProviderName" : "AWS",
         "RegionName" : "aws-oregon"
      }
      

3. 자원 생성

연동 대상 클라우드의 VM 인프라 및 Container(Kubernetes Cluster) 인프라 생성을 위한 기본 자원들을 생성한다.
자원 생성 시에는 위에서 등록한 연결 이름(Connection Name)을 설정으로 대상 CSP, Driver 및 활용 Credential 등이 지정된다.
기본 자원 생성 후에는 생성된 자원 이름을 활용하여 VM 및 Cluster를 생성 및 제어할 수 있다. 
기본 자원 생성은 자원간 의존성을 고려하여 다음 순으로 진행한다.

  (1) VPC/Subnet 생성
  (2) Security Group 생성
  (3) SSH KeyPair 생성 

※ 참고: 자원 의존 관계
  - VPC 생성 시에는 최소 1개 이상의 Subnet 설정 필요, VPC 생성 후 Subnet 추가/삭제 가능
  - Subnet, Security Group 및 VM 등은 특정 VPC 하위에 생성 가능 
  - VPC 삭제는 대상 VPC를 활용하는 VM을 포함한 모든 자원 삭제 후 삭제 가능
  - Subnet은 VPC 삭제시 함께 삭제 가능
  • (1) VPC/Subnet 생성

    • 생성하고자 하는 대상 인프라 조건에 맞는 VPC/Subnet을 생성한다.
    • 생성 예시
      • CONN_CONFIG:위에서 등록한 Connection Name(CSP 변경시 대상 Connection Name으로 설정 필요)
      export CONN_CONFIG=aws-ohio-config
      
      curl -sX POST http://localhost:1024/spider/vpc \
          -H 'Content-Type: application/json' \
          -d '{ 
              "ConnectionName": "'${CONN_CONFIG}'", 
              "ReqInfo": { 
                  "Name": "vpc-01", 
                  "IPv4_CIDR": "192.168.0.0/16", 
                  "SubnetInfoList": [ 
                      { "Name": "subnet-01", "IPv4_CIDR": "192.168.1.0/24" } 
                  ] 
              } 
          }' | json_pp
      
      output
      {
         "IId" : {
            "NameId" : "vpc-01",
            "SystemId" : "vpc-060eb5dc45c1117b0"
         },
         "IPv4_CIDR" : "192.168.0.0/16",
         "SubnetInfoList" : [
            {
               "IId" : {
                  "NameId" : "subnet-01",
                  "SystemId" : "subnet-0b140aaac2024ef83"
               },
               "IPv4_CIDR" : "192.168.1.0/24",
               "KeyValueList" : [
                  {
                     "Key" : "VpcId",
                     "Value" : "vpc-060eb5dc45c1117b0"
                  },
                  ... 중략 ...
                  {
                     "Key" : "Status",
                     "Value" : "available"
                  }
               ],
               "TagList" : [
                  {
                     "Key" : "Name",
                     "Value" : "subnet-01-crehtv3p70iugvns0a7g"
                  }
               ],
               "Zone" : "us-east-2a"
            }
         ],
         "TagList" : [
            {
               "Key" : "Name",
               "Value" : "vpc-01-crehtv3p70iugvns0a70"
            }
         ]
      }
      
  • (2) Security Group 생성

    • 생성하고자 하는 대상 인프라 조건에 맞는 Security Group을 생성한다.
    • 생성 예시
      • CONN_CONFIG:위에서 등록한 Connection Name(CSP 변경시 대상 Connection Name으로 설정 필요)
      export CONN_CONFIG=aws-ohio-config
      
      curl -sX POST http://localhost:1024/spider/securitygroup \
          -H 'Content-Type: application/json' \
          -d '{ 
              "ConnectionName": "'${CONN_CONFIG}'", 
              "ReqInfo": { 
                  "Name": "sg-01", 
                  "VPCName": "vpc-01", 
                  "SecurityRules": [ 
                      { 
                          "FromPort": "1", 
                          "ToPort" : "65535", 
                          "IPProtocol" : "tcp", 
                          "Direction" : "inbound" 
                      } 
                  ] 
              } 
          }' | json_pp
      
      output
      {
         "IId" : {
            "NameId" : "sg-01",
            "SystemId" : "sg-090b7a22f58bf49f2"
         },
         "KeyValueList" : [
            {
               "Key" : "GroupName",
               "Value" : "sg01-crehvcbp70iugvns0a80"
            },
            ... 중략 ...
         ],
         "SecurityRules" : [
            {
               "CIDR" : "0.0.0.0/0",
               "Direction" : "inbound",
               "FromPort" : "1",
               "IPProtocol" : "TCP",
               "ToPort" : "65535"
            },
            {
               "CIDR" : "0.0.0.0/0",
               "Direction" : "outbound",
               "FromPort" : "-1",
               "IPProtocol" : "ALL",
               "ToPort" : "-1"
            }
         ],
         "TagList" : [
            {
               "Key" : "Name",
               "Value" : "sg01-crehvcbp70iugvns0a80"
            }
         ],
         "VpcIID" : {
            "NameId" : "vpc-01",
            "SystemId" : "vpc-060eb5dc45c1117b0"
         }
      }
      
  • (3) SSH KeyPair 생성

    • 생성하고자 하는 대상 인프라 조건에 맞는 KeyPair를 생성한다.
    • 생성 예시
      • CONN_CONFIG:위에서 등록한 Connection Name(CSP 변경시 대상 Connection Name으로 설정 필요)
      export CONN_CONFIG=aws-ohio-config
      
      curl -sX POST http://localhost:1024/spider/keypair \
          -H 'Content-Type: application/json' \
          -d '{ 
              "ConnectionName": "'${CONN_CONFIG}'", 
              "ReqInfo": { 
                  "Name": "keypair-01" 
              } 
          }' | json_pp
      
      output
      {
         "Fingerprint" : "2e:b2:3d:0c:b8:19:3e:70:fa:98:a6:c6:f5:d2:b6:bb:03:2c:a8:03",
         "IId" : {
            "NameId" : "keypair-01",
            "SystemId" : "keypair-01-crei0krp70iugvns0a8g"
         },
         "KeyValueList" : [
            {
               "Key" : "KeyMaterial",
               "Value" : "-----BEGIN RSA PRIVATE KEY-----\n... 중략 ...\n-----END RSA PRIVATE KEY-----"
            }
         ],
         "PrivateKey" : "-----BEGIN RSA PRIVATE KEY-----\n... 중략 ...\n-----END RSA PRIVATE KEY-----",
         "TagList" : [
            {
               "Key" : "Name",
               "Value" : "keypair-01-crei0krp70iugvns0a8g"
            }
         ]
      }
      

4. VM 제어

연동 대상 클라우드에 VM을 생성 및 제어가 가능하다.
VM 제어 시에는 위에서 등록한 연결 이름(Connection Name)을 설정으로 대상 CSP, Driver 및 활용 Credential 등이 지정된다.
VM 생성 시에는 위에서 생성한 기본 자원들을 활용하여 VM 생성이 가능하다.
VM 생성 후에는 생성된 VM의 활용성을 높이기 위하여 Disk, MyImage 및 NLB 등의 추가 자원을 연계하여 활용 가능하다. 
본 가이드에서는 추가 자원에 대한 활용은 생략하고 VM 제어에 대해서 다음 순으로 가이드한다.

  (1) VM 생성
  (2) VM 상태
  (3) VM 삭제 
  • (1) VM 생성

    • 생성하고자 하는 대상 인프라 조건에 맞는 VM을 생성한다.
    • 생성 예시
      • CONN_CONFIG:위에서 등록한 Connection Name(CSP 변경시 대상 Connection Name으로 설정 필요)
      • IMAGE_NAME,SPEC_NAME: AWS가 현재 제공하는 정보(CSP 변경시 CSP에 맞게 변경 필요)
      • 그외 자원 이름: 위에서 생성한 자원 이름
      export CONN_CONFIG=aws-ohio-config
      export IMAGE_NAME=ami-00978328f54e31526
      export SPEC_NAME=t3.micro
      
      curl -sX POST http://localhost:1024/spider/vm \
          -H 'Content-Type: application/json' \
          -d '{ 
              "ConnectionName": "'${CONN_CONFIG}'", 
              "ReqInfo": { 
                  "Name": "'${CONN_CONFIG}'-vm-01", 
                  "ImageName": "'${IMAGE_NAME}'", 
                  "VPCName": "vpc-01", 
                  "SubnetName": "subnet-01", 
                  "SecurityGroupNames": [ "sg-01" ], 
                  "VMSpecName": "'${SPEC_NAME}'", 
                  "KeyPairName": "keypair-01" 
              } 
          }' | json_pp
      
      output
      {
         "AccessPoint" : "",
         "IId" : {
            "NameId" : "aws-ohio-config-vm-01",
            "SystemId" : "i-0e0267464de62c56f"
         },
         "ImageIId" : {
            "NameId" : "ami-00978328f54e31526",
            "SystemId" : "ami-00978328f54e31526"
         },
         "ImageType" : "PublicImage",
         "KeyPairIId" : {
            "NameId" : "keypair-01",
            "SystemId" : "keypair-01-crei0krp70iugvns0a8g"
         },
         "KeyValueList" : [
            {
               "Key" : "State",
               "Value" : "running"
            },
            {
               "Key" : "Architecture",
               "Value" : "x86_64"
            },
            ... 중략 ...
         ],
         "NetworkInterface" : "eni-attach-0dcaaeb4270e4edd0",
         "Platform" : "LINUX/UNIX",
         "PrivateDNS" : "ip-192-168-1-64.us-east-2.compute.internal",
         "PrivateIP" : "192.168.1.64",
         "PublicIP" : "3.149.245.118",
         "Region" : {
            "Region" : "us-east-2",
            "Zone" : "us-east-2a"
         },
         "RootDeviceName" : "/dev/sda1",
         "RootDiskSize" : "8",
         "RootDiskType" : "gp2",
         "SSHAccessPoint" : "3.149.245.118:22",
         "SecurityGroupIIds" : [
            {
               "NameId" : "sg-01",
               "SystemId" : "sg-090b7a22f58bf49f2"
            }
         ],
         "StartTime" : "2024-09-08T04:35:18Z",
         "SubnetIID" : {
            "NameId" : "subnet-01",
            "SystemId" : "subnet-0b140aaac2024ef83"
         },
         "TagList" : [
            {
               "Key" : "Name",
               "Value" : "aws-ohio-config-vm-01-creij1bp70iugvns0a90"
            }
         ],
         "VMBlockDisk" : "/dev/sda1",
         "VMSpecName" : "t3.micro",
         "VMUserId" : "cb-user",
         "VpcIID" : {
            "NameId" : "vpc-01",
            "SystemId" : "vpc-060eb5dc45c1117b0"
         }
      }
      
  • (2) VM 상태

    • 생성한 VM 상태 정보를 확인한다.
    • 확인 예시
      • CONN_CONFIG:위에서 등록한 Connection Name(CSP 변경시 대상 Connection Name으로 설정 필요)
      export CONN_CONFIG=aws-ohio-config
      
      curl -sX GET http://localhost:1024/spider/vmstatus \
          -H 'Content-Type: application/json' \
          -d '{ 
              "ConnectionName": "'${CONN_CONFIG}'" 
          }' | json_pp
      
      output
      {
         "vmstatus" : [
            {
               "IId" : {
                  "NameId" : "aws-ohio-config-vm-01",
                  "SystemId" : "i-0e0267464de62c56f"
               },
               "VmStatus" : "Running"
            }
         ]
      }
      
  • (3) VM 삭제

    • 활용한 VM을 삭제한다.
    • 삭제 예시
      • CONN_CONFIG:위에서 등록한 Connection Name(CSP 변경시 대상 Connection Name으로 설정 필요)
      export CONN_CONFIG=aws-ohio-config
      
      curl -sX DELETE http://localhost:1024/spider/vm/${CONN_CONFIG}-vm-01 \
          -H 'Content-Type: application/json' \
          -d '{ 
              "ConnectionName": "'${CONN_CONFIG}'" 
          }' | json_pp
      
      output
      {
         "Status" : "Terminated"
      }
      

5. 자원 삭제

활용한 기본 자원들을 삭제한다.
자원 삭제 시에는 위에서 등록한 연결 이름(Connection Name)을 설정으로 대상 CSP, Driver 및 활용 Credential 등이 지정된다.
기본 자원 삭제는 자원간 의존성을 고려하여 다음과 같이 생성한 역순으로 삭제한다.

  (1) SSH KeyPair 삭제 
  (2) Security Group 삭제
  (3) VPC/Subnet 삭제

※ 참고: 자원 의존 관계
  - VPC 생성 시에는 최소 1개 이상의 Subnet 설정 필요, VPC 생성 후 Subnet 추가/삭제 가능
  - Subnet, Security Group 및 VM 등은 특정 VPC 하위에 생성 가능 
  - VPC 삭제는 대상 VPC를 활용하는 VM을 포함한 모든 자원 삭제 후 삭제 가능
  - Subnet은 VPC 삭제시 함께 삭제 가능
  • (1) SSH KeyPair 삭제

    • 활용한 SSH KeyPair를 삭제한다.
    • 삭제 예시
      • CONN_CONFIG:위에서 등록한 Connection Name(CSP 변경시 대상 Connection Name으로 설정 필요)
      export CONN_CONFIG=aws-ohio-config
      
      curl -sX DELETE http://localhost:1024/spider/keypair/keypair-01 \
          -H 'Content-Type: application/json' \
          -d '{ 
              "ConnectionName": "'${CONN_CONFIG}'" 
          }' | json_pp
      
      output
      {
         "Result" : "true"
      }
      
  • (2) Security Group 삭제

    • 활용한 Security Group을 삭제한다.
    • 삭제 예시
      • CONN_CONFIG:위에서 등록한 Connection Name(CSP 변경시 대상 Connection Name으로 설정 필요)
      export CONN_CONFIG=aws-ohio-config
      
      curl -sX DELETE http://localhost:1024/spider/securitygroup/sg-01 \
          -H 'Content-Type: application/json' \
          -d '{ 
              "ConnectionName": "'${CONN_CONFIG}'" 
          }' | json_pp
      
      output
      {
         "Result" : "true"
      }
      
  • (3) VPC/Subnet 삭제

    • 활용한 VPC/Subnet을 삭제한다.
    • 삭제 예시
      • CONN_CONFIG:위에서 등록한 Connection Name(CSP 변경시 대상 Connection Name으로 설정 필요)
      export CONN_CONFIG=aws-ohio-config
      
      curl -sX DELETE http://localhost:1024/spider/vpc/vpc-01 \
          -H 'Content-Type: application/json' \
          -d '{ 
              "ConnectionName": "'${CONN_CONFIG}'" 
          }' | json_pp
      
      output
      {
         "Result" : "true"
      }
      

Table of contents



Clone this wiki locally