리소스 관리

리소스란 프로비저닝 또는 예약이 가능한 물리적 또는 논리적 인스턴스입니다.리소스의 예로는 스토리지, 프로세서, 메모리, 데이터베이스, 클러스터, 가상 머신 등이 있습니다. 카탈로그에서 생성할 수 있고 리소스 그룹에 의해 관리되고 그 안에 포함된 모든 것을 말합니다. IBM Cloud® 콘솔에서 사용자의 리소스 목록으로 이동하거나 명령행 인터페이스(CLI)를 사용하여 리소스를 작성하고 관리할 수 있습니다.

IBM Cloud Identity and Access Management(IAM) 액세스 제어를사용하여 관리되며 리소스 그룹에 속하는 서비스에는 몇 가지 이점이 있습니다. 리소스 그룹은 위치별로 범위가 지정되지 않으므로 동일한 리소스 그룹에 있는 여러 위치에서 앱과 서비스를 만들 수 있습니다. 또한 리소스 그룹 내에서 개별 인스턴스에 이르기까지 세분화된 액세스 제어를 사용할 수도 있습니다.

리소스를 작성하는 데 필요한 액세스 권한

계정의 사용자가 카탈로그로부터 리소스를 작성하고 이를 리소스 그룹에 지정하려면 두 가지 액세스 정책을 지정해야 합니다.

  • 리소스 그룹 자체에 대한, 뷰어 이상의 역할을 사용하는 정책
  • 계정 내 서비스에 대한, 편집자 이상의 역할을 사용하는 정책

콘솔에서의 리소스 작성

콘솔에서 리소스를 작성하려면 다음 단계를 수행하십시오.

  1. 대시보드의 리소스 요약 위젯에서 리소스 보기를 클릭하십시오.
  2. 리소스 작성을 클릭하십시오. 여기에서 카탈로그로 이동됩니다. 특정 카테고리, 제공업체, 요금제, 규정 준수 유형 또는 릴리스 유형에 따라 제품을 검색하거나 필터링할 수 있습니다. 리소스 예로는 앱, 서비스 인스턴스, 컨테이너 클러스터, 스토리지 볼륨, 가상 서버 및 소프트웨어가 있습니다.

자원을 작성한 후 자원 목록 페이지의 자원 목록에 자원이 표시됩니다.

CLI를 사용하여 리소스 작성

IBM Cloud® 명령행 인터페이스를 사용하여 리소스를 작성할 수 있습니다. 리소스 관련 작업에 대한 자세한 정보는 리소스 및 리소스 그룹에 대한 작업을 참조하십시오.

  1. 로그인하여 계정을 선택하십시오.
    ibmcloud login
    
  2. ibmcloud resource service-instance-create 명령을 실행하여 조직을 작성하십시오.

이 명령에서 NAME은 서비스 인스턴스의 이름이고, SERVICE_NAME or SERVICE_ID는 서비스의 이름 또는 ID이고, SERVICE_PLAN_NAME or SERVICE_PLAN_ID는 서비스 플랜의 이름 또는 ID이고, LOCATION은 서비스 인스턴스를 작성할 대상 위치 또는 환경입니다.

ibmcloud resource service-instance-create NAME (SERVICE_NAME | SERVICE_ID) SERVICE_PLAN_NAME LOCATION [-d, --deployment DEPLOYMENT_NAME] [-p, --parameters @JSON_FILE | JSON_STRING ] [-g RESOURCE_GROUP] [--service-endpoints SERVICE_ENDPOINTS_TYPE] [--allow-cleanup] [--lock]

서비스를 나열하려면 ibmcloud catalog service-marketplace 명령을 사용하십시오.

예를 들어 다음 명령은 my-service-instance라는 서비스 인스턴스를 작성하고, test- service-plan 위치에서 test-service 서비스의 서비스 플랜 eu-gb을 사용합니다.

ibmcloud resource service-instance-create my-service-instance test-service test-service-plan eu-gb

API를 사용하여 새 리소스 인스턴스 작성

다음 샘플 요청에 표시되어 있는 바와 같이 리소스 제어기 API를 호출하여 새 리소스 인스턴스를 프로그래밍 방식으로 작성할 수 있습니다. API에 대한 자세한 내용은 리소스 컨트롤러 API를 참조하세요.

curl -X POST \
  https://resource-controller.cloud.ibm.com/v2/resource_instances \
  -H 'Authorization: Bearer <>' \
  -H 'Content-Type: application/json' \
    -d '{
    "name": "my-instance",
    "target": "bluemix-global",
    "resource_group": "5g9f447903254bb58972a2f3f5a4c711",
    "resource_plan_id": "0be5ad401ae913d8ff665d92680664ed",
    "tags": [
      "my-tag"
    ]
  }'
CreateResourceInstanceOptions createResourceInstanceOptions = new CreateResourceInstanceOptions.Builder()
  .name(resourceInstanceName)
  .target(targetRegion)
  .resourceGroup(resourceGroup)
  .resourcePlanId(resourcePlanId)
  .build();
Response<ResourceInstance> response = service.createResourceInstance(createResourceInstanceOptions).execute();
ResourceInstance resourceInstance = response.getResult();
System.out.printf("createResourceInstance() response:\n%s\n", resourceInstance.toString());
const params = {
  name: resourceInstanceName,
  target: targetRegion,
  resourceGroup: resourceGroupGuid,
  resourcePlanId: resourcePlanId,
};
resourceControllerService.createResourceInstance(params)
  .then(res => {
    instanceGuid = res.result.guid;
    console.log('createResourceInstance() response:\n' + JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err)
   });
resource_instance = resource_controller_service.create_resource_instance(
    name=resource_instance_name,
    target=target_region,
    resource_group=resource_group,
    resource_plan_id=resource_plan_id
).get_result()
print('\ncreate_resource_instance() response:\n',
      json.dumps(resource_instance, indent=2))
createResourceInstanceOptions := resourceControllerService.NewCreateResourceInstanceOptions(
  resourceInstanceName,
  targetRegion,
  resourceGroup,
  resourcePlanID,
)
resourceInstance, response, err := resourceControllerService.CreateResourceInstance(createResourceInstanceOptions)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(resourceInstance, "", "  ")
fmt.Printf("\nCreateResourceInstance() response:\n%s\n", string(b))

API를 사용하여 소프트웨어 설치

콘솔 또는 CLI를 통해서만 소프트웨어를 설치할 수 있습니다. 단계를 보려면 UI 또는 CLI 지시사항으로 전환하십시오.

Terraform을 사용하여 새 자원 인스턴스 작성하기

Terraform을 사용하여 새 리소스 인스턴스를 생성하려면 먼저 다음 사항을 완료해야 합니다:

  • Terraform CLI를 설치하고 IBM Cloud 제공자 플러그인을 구성합니다. 자세한 내용은 IBM Cloud® 에서 Terraform 시작하기 튜토리얼을 참조하세요. 플러그인은 이 태스크를 완료하는 데 사용되는 IBM Cloud API를 요약합니다.

  • 이름이 main.tf인 Terraform 구성 파일을 작성하십시오. 이 파일에서는 HashiCorp 구성 언어를 사용하여 리소스를 정의합니다. 자세한 내용은 테라폼 문서를 참조하세요.

Terraform을 사용하여 새 자원 인스턴스를 작성할 수 있습니다.

  1. main.tf 파일에 인수를 생성합니다. 다음 예제에서는 ibm_resource_instance 자원을 사용하여 새 자원 인스턴스를 작성합니다. 여기서 name은 자원 인스턴스를 식별하기 위한 고유한 설명 이름입니다.

    data "ibm_resource_group" "group" {
    name = "test"
    }
    resource "ibm_resource_instance" "resource_instance" {
     name              = "test"
     service           = "cloud-object-storage"
     plan              = "lite"
     location          = "global"
     resource_group_id = data.ibm_resource_group.group.id
     tags              = ["tag1", "tag2"]
     //User can increase timeouts
     timeouts {
     create = "15m"
     update = "15m"
     delete = "15m"
     }
    }
    

    자원 인스턴스와 연관된 tags를 지정할 수 있습니다. 자세한 내용은 테라폼 리소스 관리 페이지의 인수 참조 세부 정보를 참조하세요.

  2. 구성 파일 빌드를 완료한 후 Terraform CLI를 초기화합니다. 자세한 내용은 작업 디렉터리 초기화를 참조하세요.

    terraform init
    
  3. main.tf 파일에서 리소스를 프로비저닝합니다. 자세한 내용은 Terraform으로 인프라 프로비저닝을 참조하세요.

    1. terraform plan 을 실행하여 테라폼 실행 계획을 생성하여 제안된 작업을 미리 볼 수 있습니다.
      terraform plan
      
    2. terraform apply 을 실행하여 플랜에 정의된 리소스를 만듭니다.
      terraform apply
      

리소스 검색

IBM Cloud® 콘솔의 어느 위치에서나 리소스를 검색할 수 있습니다. 콘솔 메뉴 표시줄의 검색 필드에 리소스 또는 태그를 입력하십시오. IBM Cloud 명령행 인터페이스(CLI)를 사용하여 리소스에서 검색할 수도 있습니다. CLI는 위치와 데이터 센터 전체에서 분산 애플리케이션 및 서비스 인스턴스를 검색합니다. 글로벌 검색 및 태그 지정 - 검색 API에서도 리소스 검색을 지원합니다.

검색 결과 세분화

모든 카탈로그 결과 보기
필터링된 카탈로그 검색을 보려면 이 옵션을 사용하십시오. 처음 5개의 결과가 이름별로 표시됩니다. 카탈로그 항목에 대한 세부적인 검색 기준을 원하는 경우(예: 설명 검색) 이 링크를 클릭하여 필터링된 카탈로그 결과 보기를 가져올 수 있습니다. 이 옵션은 작성할 오퍼링을 빠르게 찾는 데 도움이 됩니다. 이 옵션은 카탈로그 결과와 일치하는 경우에 표시됩니다. 검색 조회가 tag:로 시작하는 경우에는 이 필드가 표시되지 않습니다.
검색 지원 케이스
인프라 리소스를 포함하여 플랫폼 전체에서 열린 지원 케이스를 기준으로 필터링하려면 이 옵션을 사용하십시오. tag:로 검색하는 경우를 포함하여 임의의 항목을 검색하는 경우 검색의 끝에 이 옵션이 표시됩니다.
IBM Cloud 문서에서 검색
필터링된 문서 검색을 가져오려면 이 옵션을 사용하십시오. 이는 tag:로 검색하는 경우를 포함하여 모든 검색 끝에 표시됩니다.

커서를 검색 필드로 이동하려면 슬래시 키(/)를 누르십시오.

CLI를 사용하여 검색

또한 Lucene 쿼리 구문을 사용하여 모든 리소스를 검색할 수도 있으며, IBM Cloud CLI를 사용하여 단일 명령으로 모든 리소스를 검색할 수도 있습니다. 쿼리하고 검색할 수 있는 가장 일반적으로 사용되는 리소스 속성은 다음과 같습니다:

name
리소스의 사용자 정의 이름입니다.
region
리소스가 생성된 지리적 위치입니다. 예를 들어, 허용되는 값은 us-south, us-east, au-syd, eu-gb, eu-dejp-tok입니다.
service_name
리소스 CRN의 service-name 세그먼트에 표시되는 서비스 이름입니다. ibmcloud catalog service-marketplace 출력의 이름 열에서 허용되는 값을 가져올 수 있습니다.
resource_group_id
리소스의 리소스 그룹 ID입니다.
type
리소스 유형이 있는 경우 리소스 CRN의 resource-type 세그먼트에 표시되는 리소스 유형입니다. 값은 소유 서비스에 따라 다릅니다. containers-kubernetes 서비스의 경우 k8-cluster, satellite 서비스의 경우 k8-locationk8-connector, resource-controller 서비스의 경우 resource-group, vpc, volume, vpn, load-balancer, security-group, is 서비스의 경우 workspace, schematics 서비스의 경우 입니다.
creation_date
리소스가 작성된 날짜입니다.
modification_date
마지막으로 리소스가 수정된 날짜입니다.
tags
리소스에 첨부된 태그입니다.
access_tags
리소스에 첨부된 액세스 관리 태그입니다.
service_tags
리소스에 첨부된 서비스 태그입니다.
tagReferences.tag.name
클래식 인프라 리소스에 첨부된 태그입니다. -p classic-infrastructure 매개변수를 지정해야 합니다.
_objectType:
클래식 인프라 리소스의 오브젝트 유형입니다. 허용되는 값은 다음과 같습니다. SoftLayer_Virtual_DedicatedHost, SoftLayer_Hardware, SoftLayer_Network_Application_Delivery_Controller, SoftLayer_Network_Subnet_IpAddress, SoftLayer_Network_Vlan, SoftLayer_Network_Vlan_Firewall, SoftLayer_Virtual_Guest. -p classic-infrastructure 매개변수를 지정해야 합니다.

tagReferences.tag.name_objectType 플래그는 -p classic-infrastructure 플래그를 사용할 때만 유효합니다.

클래식 인프라 리소스가 아닌 다른 모든 리소스로 검색 가능하므로 _objectType -p classic-infrastructure, SoftLayer_Virtual_DedicatedHost, SoftLayer_Network_Vlan_FirewallSoftLayer_Virtual_Guest에 대해 SoftLayer_Hardware가(클래식 인프라 베어메탈 서버 전용) 더 이상 사용되지 않습니다.

클래식 인프라 리소스 검색

클래식 인프라 리소스를 검색하려면 쿼리 문자열과 정확히 일치하는 문자열이 반환되도록 문자열을 큰따옴표 안에 넣어야 합니다. 또한 하이픈(-)이 포함된 검색어를 입력할 때 문자열을 큰따옴표로 묶지 않으면 검색 결과에서 정확히 일치하는 항목이 반환되지 않습니다. 문자열 내의 하이픈은 검색어를 여러 문자열로 구분하는 데 사용됩니다.

검색 예제

다음 예제는 계정 리소스를 검색하는 데 도움이 될 수 있습니다. -p classic-infrastucture 매개변수가 지정되지 않으면 검색 범위는 _objectType SoftLayer_Network_Application_Delivery_Controller, SoftLayer_Network_Subnet_IpAddress 또는 SoftLayer_Hardware(베어메탈 서버 제외)가 포함된 클래식 인프라 리소스를 제외한 모든 리소스입니다.

  • ABC라는 모든 리소스를 검색하려면 다음 명령을 입력하십시오.

    ibmcloud resource search ‘name:ABC’
    
  • Message Hub의 모든 서비스 인스턴스를 검색하려면 다음 명령을 입력하십시오.

    ibmcloud resource search 'service_name:messagehub'
    
  • 2020년 5월 16일에서 2020년 5월 20일 사이에 작성된 클래식 인프라가 있는 리소스를 검색하려면 다음 명령을 입력하십시오.

    ibmcloud resource search 'creation_date:["2020-05-16T00:00:00Z" TO "2020-05-20T00:00:00Z"]'
    
  • 유형별로 정렬된, 이름이 "my"로 시작하고 클래식 인프라가 아닌 리소스를 검색하려면 다음 명령을 입력하십시오.

    ibmcloud resource search 'name:my*' -s type
    
  • 클래식 인프라가 아니며 my-tag 로 태그가 지정된 리소스를 검색하려면 다음 명령을 입력하세요:

    ibmcloud resource search 'tags:my-tag'
    
  • 완전한 도메인 이름이 MyVM인 모든 클래식 인프라 가상 서버를 검색하려면 다음 명령을 입력하십시오.

    ibmcloud resource search “doc.fullyQualifiedDomainName:MyVM AND service_name:virtual-server"
    
  • my-tag 로 태그가 지정된 모든 클래식 인프라 리소스를 검색하려면 다음 명령을 입력합니다:

    ibmcloud resource search 'tagReferences.tag.name:my-tag' -p classic-infrastructure
    
  • 모든 클래식 인프라 유형을 검색하려면 SoftLayer_Network_Vlan, 다음 명령을 입력합니다:

    ibmcloud resource search '_objectType:SoftLayer_Network_Vlan' -p classic-infrastructure
    

API를 사용하여 검색

리소스를 검색하려면 글로벌 검색 및 태그 지정 - 검색 API를 호출하십시오. 다음 예에서는 "project:myproject" 태그가 첨부된 모든 리소스를 검색합니다.

SearchOptions.Builder를 사용하여 SearchOptions 메소드에 대한 매개변수 값이 포함된 search 오브젝트를 작성하십시오.

SearchOptions 구조를 인스턴스화하고 Search 메소드에 대한 매개변수값을 제공하도록 필드를 설정하십시오.

curl -X POST -H "Authorization: {iam_token}" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"query": "tags:project\\:myproject OR access_tags:project\\:myproject", "fields": ["*"]}' "api.global-search-tagging.cloud.ibm.com/v3/resources/search"
SearchOptions searchOptions = new SearchOptions.Builder()
  .query("GST-sdk-*")
  .fields(new java.util.ArrayList<String>(java.util.Arrays.asList("*")))
  .searchCursor(searchCursor)
  .build();

Response<ScanResult> response = service.search(searchOptions).execute();
ScanResult scanResult = response.getResult();

System.out.println(scanResult);
const params = {
  query: 'GST-sdk-*',
  fields: ['*'],
  searchCursor: searchCursor,
};

globalSearchService.search(params)
  .then(res => {
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err)
  });
response = global_search_service.search(query='GST-sdk-*',
                    fields=['*'])
scan_result = response.get_result()

print(json.dumps(scan_result, indent=2))
searchOptions := globalSearchService.NewSearchOptions()
searchOptions.SetLimit(10)
searchOptions.SetQuery("GST-sdk-*")
searchOptions.SetFields([]string{"*"})

scanResult, response, err := globalSearchService.Search(searchOptions)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(scanResult, "", "  ")
fmt.Println(string(b))

리소스 삭제

리소스가 계정에 더 이상 필요하지 않거나 계정의 사용자가 사용하지 않을 리소스를 작성한 경우 인스턴스를 계정에서 삭제할 수 있습니다.

콘솔에서의 리소스 삭제

다음 단계를 사용하여 콘솔에서 리소스를 삭제할 수 있습니다.

  1. 대시보드의 리소스 요약 위젯에서 리소스 보기를 클릭하십시오.
  2. 섹션을 펼쳐서 삭제하려는 서비스 인스턴스를 찾으십시오.
  3. 행에 대해 조치 아이콘 조치 아이콘 > 삭제를 클릭하십시오.

CLI를 사용하여 리소스 삭제

IBM Cloud® 명령행 인터페이스를 사용하여 리소스를 삭제할 수 있습니다. IBM Cloud 리소스 관리에 대한 자세한 정보는 리소스 및 리소스 그룹에 대한 작업을 참조하십시오.

  1. 로그인하여 계정을 선택하십시오.

    ibmcloud login
    
  2. ibmcloud resource service-instance-delete 명령을 실행하여 서비스 인스턴스를 삭제하십시오. 여기서 NAME은 서비스 인스턴스의 이름으로 ID와 배타적이며, ID는 서비스 인스턴스의 ID로, NAME과 배타적입니다.

    ibmcloud resource service-instance-delete (NAME|ID) [-f, --force] [--recursive]
    

    예를 들어, 다음 명령은 my-service-instance라는 자원 서비스 인스턴스를 삭제합니다.

    ibmcloud resource service-instance-delete my-service-instance
    

API를 사용하여 리소스 삭제

다음 샘플 요청에 표시되어 있는 바와 같이 리소스 제어기 API를 호출하여 리소스 인스턴스를 프로그래밍 방식으로 삭제할 수 있습니다. API에 대한 자세한 내용은 리소스 컨트롤러 API를 참조하세요.

curl -X DELETE \
https://resource-controller.cloud.ibm.com/v2/resource_instances/8d7af921-b136-4078-9666-081bd8470d94 \
  -H 'Authorization: Bearer <>'
DeleteResourceInstanceOptions deleteResourceInstanceOptions = new DeleteResourceInstanceOptions.Builder()
  .id(instanceGuid)
  .recursive(false)
  .build();

Response<Void> response = service.deleteResourceInstance(deleteResourceInstanceOptions).execute();

System.out.printf("deleteResourceInstance() response status code: %d\n", response.getStatusCode());
const params = {
  id: instanceGuid,
  recursive: false,
};

resourceControllerService.deleteResourceInstance(params)
  .then(res => {
    console.log('deleteResourceInstance() response status code: ' + res.status);
  })
  .catch(err => {
    console.warn(err)
   });
response = resource_controller_service.delete_resource_instance(
    id=instance_guid,
    recursive=False
)

print('\ndelete_resource_instance() response status code: ',
      response.get_status_code())
deleteResourceInstanceOptions := resourceControllerService.NewDeleteResourceInstanceOptions(
  instanceGUID,
)
deleteResourceInstanceOptions.SetRecursive(false)

response, err := resourceControllerService.DeleteResourceInstance(deleteResourceInstanceOptions)
if err != nil {
  panic(err)
}
fmt.Printf("\nDeleteResourceInstance() response status code: %d\n", response.StatusCode)

Terraform을 사용하여 자원 인스턴스 삭제하기

테라폼을 사용하여 리소스 인스턴스를 삭제하려면 다음 단계를 따르세요.

  1. Terraform 파일에서 다음 코드 블록을 제거하여 자원 인스턴스를 삭제할 수 있습니다. 테라폼 파일을 사용하여 resource_instance 을 생성했어야 합니다.

    data "ibm_resource_group" "group" {
    name = "test"
    }
    resource "ibm_resource_instance" "resource_instance" {
     name              = "test"
     service           = "cloud-object-storage"
     plan              = "lite"
     location          = "global"
     resource_group_id = data.ibm_resource_group.group.id
     tags              = ["tag1", "tag2"]
     //User can increase timeouts
     timeouts {
     create = "15m"
     update = "15m"
     delete = "15m"
     }
    }
    

    자세한 내용은 테라폼 리소스 관리 페이지의 인수 참조 세부 정보를 참조하세요.

  2. 구성 파일 빌드를 완료한 후 Terraform CLI를 초기화합니다. 자세한 내용은 작업 디렉터리 초기화를 참조하세요.

    terraform init
    
  3. main.tf 파일에서 리소스를 프로비저닝합니다. 자세한 내용은 Terraform으로 인프라 프로비저닝을 참조하세요.

    1. terraform plan 을 실행하여 테라폼 실행 계획을 생성하여 제안된 작업을 미리 볼 수 있습니다.

      terraform plan
      
    2. terraform apply 을 실행하여 플랜에 정의된 리소스를 만듭니다.

      terraform apply
      

다음 terraform destroy 명령을 실행하여 리소스 인스턴스를 삭제할 수도 있습니다:

terraform destroy -target RESOURCE_TYPE.NAME -target RESOURCE_TYPE2.NAME