Object Storage 이벤트 구독
이 튜토리얼에서는 Object Storage CLI를 사용하여 IBM Cloud® Code Engine 이벤트를 구독하는 방법을 학습할 수 있습니다.
분산 환경에서는 다른 컴포넌트(일반적으로 이벤트 생성자라고 함)에서 생성된 메시지(이벤트)에 애플리케이션 또는 작업이 반응하도록 하려는 경우가 많습니다. Code Engine에서는 애플리케이션 또는 작업이 이벤트 생성자를 구독하여 관심있는 이벤트를 수신할 수 있습니다. 이벤트 정보는 애플리케이션의 경우 POST HTTP 요청으로서, 작업의 경우 환경 변수로서 수신합니다.
시작하기 전에
모든 Code Engine 사용자에게는 종량과금제 계정이 있어야 합니다. 튜토리얼은 비용이 부과될 수 있습니다. 비용 추정기를 사용하여 예상 사용량을 기반으로 한 비용 추정을 생성하십시오. 자세한 정보는 Code Engine 가격을 참조하십시오.
Object Storage 버킷 및 지역 판별
Object Storage 이벤트 생성자는 IBM Cloud Object Storage 버킷에서 오브젝트에 대한 오퍼레이션을 기반으로 이벤트를 생성합니다.
-
Object Storage 플러그인 CLI를 설치하십시오.
ibmcloud plugin install cloud-object-storage -
Object Storage 리소스 인스턴스를 작성하십시오. 예를 들어, IBM Cloud Lite 서비스 플랜을 사용하는
mycloud-object-storage라는 Object Storage 리소스를 작성하십시오.ibmcloud resource service-instance-create mycloud-object-storage cloud-object-storage lite global -
작성한 Object Storage 리소스 인스턴스의 세부사항을 표시하십시오. 세부사항을 사용하여 Object Storage 인스턴스에서 클라우드 리소스 이름(CRN)을 가져오십시오. CRN은 사용할 Object Storage 인스턴스를 식별합니다. CRN은
ID명령의 출력에 있는ibmcloud resource service-instance COS_INSTANCE_NAME필드의 값입니다.ibmcloud resource service-instance mycloud-object-storage출력 예
Name: mycloud-object-storage ID: crn:v1:bluemix:public:cloud-object-storage:global:a/ab9d57f699655f028880abcd2ccdb524:910b727b-abcd-4a73-abcd-77c68bfeabcd:: GUID: 910b727b-abcd-4a73-abcd-77c68bfeabcd Location: global Service Name: cloud-object-storage Service Plan Name: lite Resource Group Name: Default State: active Type: service_instance Sub Type: Created at: 2020-10-14T19:09:22Z Created by: user@us.ibm.com Updated at: 2020-10-14T19:09:22Z [...]Object Storage 인스턴스 이름을 모르는 경우
ibmcloud resource service-instances --service-name cloud-object-storage를 실행하여 Object Storage 인스턴스 목록을 확인하십시오.Object Storage 인스턴스에 대한 자세한 정보는 IBM Cloud Object Storage 시작하기를 참조하십시오.
-
이전 단계에서 찾은 Object Storage CRN을 구성하여 작업할 Object Storage 인스턴스를 지정하십시오.
crn:으로 시작하는 전체 ID를 복사해야 합니다. 이 예에서는--force옵션을 사용하여 지정된 CRN이 구성에 사용되도록 강제 실행합니다. 이는 Object Storage 인스턴스가 있는 두 개인 이상인 경우에 유용할 수 있습니다.ibmcloud cos config crn --crn CRN --force출력 예
Saving new Service Instance ID... OK Successfully stored your service instance ID. -
구독할 버킷을 식별하십시오. Object Storage 인스턴스와 연관된 버킷 목록을 확인하려면 다음을 수행하십시오.
ibmcloud cos buckets버킷을 작성하려면 다음과 같이 입력하십시오.
ibmcloud cos bucket-create -bucket BUCKET_NAME -
Object Storage 버킷의 위치 및 계획을 식별하십시오. 예를 들어
mybucket버킷을 사용하십시오.ibmcloud cos bucket-location-get --bucket mybucket출력 예
Details about bucket mybucket: Region: us-south Class: Standard
Object Storage 버킷은 Code Engine 프로젝트와 동일한 지역에 있는 지역 버킷이어야 합니다.
Code Engine에 알림 관리자 역할 지정
Object Storage 구독을 작성하기 전에 Code Engine 프로젝트에 알림 관리자 역할을 지정해야 합니다. Code Engine은 알림 관리자로서 Object Storage 버킷에 대한 알림을 확인, 수정 및 삭제할 수 있습니다.
계정 관리자만 알림 관리자 역할을 지정할 수 있습니다.
-
사용할 Code Engine 프로젝트를 식별하십시오.
ibmcloud ce project list명령을 사용하면 프로젝트 목록을 표시할 수 있습니다.ibmcloud ce project select명령을 사용하여 프로젝트를 현재 컨텍스트로 선택하십시오. 예를 들어,myproject라는 프로젝트를 선택하려면 다음과 같이 입력하십시오.ibmcloud ce project select -n myproject -
ibmcloud iam authorization-policy-create명령을 사용하여 알림 관리자 역할을 지정하십시오.myproject라는 Object Storage 인스턴스에 대해 통지 관리자 역할을mycosinstance라는 프로젝트에 지정하려면 다음과 같이 입력하십시오.ibmcloud iam authorization-policy-create codeengine cloud-object-storage "Notifications Manager" --source-service-instance-name PROJECT --target-service-instance-name COS-INSTANCE알림 관리자 역할을 프로젝트에 지정한 후 지역 버킷에 대한 Object Storage 구독을 프로젝트와 동일한 지역에 있는 Object Storage 인스턴스에 작성할 수 있습니다.
다음 표에는 이 예에서
iam authorization-policy-create명령과 함께 사용되는 옵션이 요약되어 있습니다. 명령 및 해당 옵션에 대한 자세한 정보는ibmcloud iam authorization-policy-create명령을 참조하십시오.iam authorization-policy-create 명령 컴포넌트 명령 옵션 설명 codeengine액세스 권한이 부여될 수 있는 소스 서비스입니다. cloud-object-storage소스 서비스의 액세스 권한이 부여될 수 있는 대상 서비스입니다. Notifications Manager소스 서비스에 대한 액세스 권한을 제공하는 역할입니다. source-service-instance-name액세스 권한을 부여할 codeengine프로젝트의 이름입니다.target-service-instance-name액세스 권한을 부여할 cloud-object-storage인스턴스의 이름입니다. -
알림 관리자 역할이 설정되었는지 확인하십시오.
ibmcloud iam authorization-policies출력 예
ID: abcd1234-a123-b456-bdd9-849e337c4460 Source service name: codeengine Source service instance: 1234abcd-b456-c789-a7c5-ef82e56fb24c Target service name: cloud-object-storage Target service instance: a1b2c3d4-cbad-567a-8cea-77c68bfe97c9 Roles: Notifications Manager
앱(또는 작업) 작성
이벤트를 사용하여 앱 또는 작업을 트리거할 수 있지만 이 튜토리얼에서는 앱을 사용합니다.
cos-app이라는 이미지를 사용하여 ibmcloud ce app create 명령으로 cos-listen이라는 애플리케이션을 작성하십시오. 이 앱은 각 이벤트가 도달할 때 이를 로그합니다. 이 이미지는
cos-listen.go 에서 가져온 것으로, IBM Cloud Code Engine GitHub 저장소의 샘플 에서 확인할 수 있습니다.
ibmcloud ce app create --name cos-app --image icr.io/codeengine/cos-listen
ibmcloud ce application get --name cos-app을 실행하여 앱이 Ready 상태인지 확인하십시오. 상태 요약에 애플리케이션이 성공적으로 배치되다고 표시되는 경우 애플리케이션은 준비 상태입니다.
이 앱에 대한 자세한 내용은 IBM Cloud Object Storage 의 readme 파일을 참조하십시오.
구독 작성
앱이 준비된 후 ibmcloud ce sub cos create 명령을 사용하여 Object Storage 이벤트 수신을 시작할 수 있도록 Object Storage 구독을 작성할 수 있습니다.
예를 들어, cos-sub라고 하는 Object Storage 구독을 작성하십시오. 이 구독은 원하는 유형의 버킷을 mybucket 버킷에서 cos-app이라는 애플리케이션으로 전달합니다.
ibmcloud ce sub cos create --name cos-sub --destination cos-app --bucket mybucket --event-type all
ibmcloud ce sub cos get -n cos-sub 명령을 실행하여 구독에 대한 정보를 찾으십시오.
출력 예
기본적으로 ibmcloud ce sub cos get 명령은 두 파트를 리턴합니다. 첫 번째 파트에는 Object Storage 구독 관련 정보(예: 구독 이름, 대상, 접두부, 접미부 및 이벤트 유형)가 포함됩니다. 두 번째 파트에는 디버깅용으로
사용할 수 있는 Object Storage 구독에 대한 리소스 관련 이벤트 정보가 포함됩니다. 기본적으로 이벤트 정보는 발생한 후 1시간 동안 제공됩니다.
Getting COS event subscription 'cos-sub'...
OK
Name: cos-sub
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 4m16s
Created: 2021-02-01T13:11:31-05:00
Destination: App:cos-app
Bucket: mybucket
EventType: all
Ready: true
Conditions:
Type OK Age Reason
CosConfigured true 38s
Ready true 38s
ReadyForEvents true 38s
SinkProvided true 38s
Events:
Type Reason Age Source Messages
Normal CosSourceReady 39s cossource-controller CosSource is ready
기본적으로 subscription cos create 명령은 먼저 대상 애플리케이션이 있는지 여부를 확인합니다. 제공한 앱 이름이 프로젝트에 없으므로 대상 검사가 실패하는 경우 subscription cos create 명령이 오류를 리턴합니다. 먼저 애플리케이션을 작성하지 않고 구독을 작성하려면 --force 옵션을 사용하십시오. --force 옵션을 사용하면 이 명령이 대상 검사를 생략합니다. 구독의 Ready 필드에는 대상 앱이 작성될 때까지 false가 표시됩니다. 그런 다음, 구독이 Ready: true 상태로 자동으로 이동됩니다.
구독이 작성된 후 subscription cos create 명령이 결과를 보고하기 전에 **subscription cos create**이 해당 상태에 대한 구독을 반복적으로 폴링하여 준비 상태를 확인합니다. 상태에 대한 지속적 폴링은 기본적으로 제한시간이 초과되기 전까지 15초 동안 유지됩니다. 구독 상태가 Ready:true로
리턴되면, 성공을 보고하고 그렇지 않으면 오류를 보고합니다. subscription cos create 옵션을 사용하여 제한시간이 초과되기 전까지 --wait-timeout 명령이 대기하는 시간을 변경할 수 있습니다. --no-wait 옵션을 false로 설정하여 상태 폴링을 생략할 수도 있습니다.
헤더 및 본문에 대한 자세한 정보는 이벤트에 대한 HTTP 헤더 및 본문 정보를 참조하십시오.
구독은 애플리케이션 스케일링 방식에 영향을 줄 수 있습니다. 자세한 정보는 애플리케이션 스케일링 구성을 참조하십시오.
구독 테스트
-
.txt파일을 버킷에 업로드하십시오. 예를 들어ibmcloud cos object-put명령으로sample.txt을sample값으로 사용하여--key오브젝트를 버킷에 업로드할 수 있습니다.ibmcloud cos object-put --bucket mybucket --key sample --body sample.txt -
ibmcloud ce app logs명령을 사용하여 처리된 이벤트를 확인하십시오.ibmcloud ce app logs --name cos-app출력 예
이 명령은 대상 앱으로 전달된 이벤트에 대한 정보가 포함된 로그 파일을 리턴합니다. 다음 출력에서는
Write오퍼레이션이sample이라는 버킷의mybucket오브젝트에 대해 수행되었음을 알 수 있습니다.Body: {"bucket":"mybucket","endpoint":"","key":"sample","notification":{"bucket_name":"mybucket","content_type":"text/plain","event_type":"Object:Write","format":"2.0","object_length":"1960","object_name":"sample","request_id":"103dd6f7-dd7b-4f49-86db-c2ff4b678b0a","request_time":"2021-02-11T16:57:42.373Z"},"operation":"Object:Write"}
Object Storage 구독 업데이트
이제 Object Storage 구독이 성공적으로 작성되었고 Object Storage 구독이 이벤트를 제공할 준비가 되었음을 알았으므로 ibmcloud ce sub cos update 명령을 사용하여 Object Storage 구독을
업데이트할 수 있습니다. 예를 들어, 버킷에 있는 오브젝트의 서브세트에서 특정 오퍼레이션이 발생하는 경우에만 실행되도록 구독을 변경할 수 있습니다.
-
이름 접두부가
delete인 파일에서test오퍼레이션이 발생하는 경우에만 이벤트를 전달하도록 Object Storage 구독을 업데이트하십시오.ibmcloud ce sub cos update --name cos-sub --event-type delete --prefix test -
구독 정보를 찾으려면
ibmcloud ce sub cos get명령을 실행하십시오.ibmcloud ce sub cos get --name cos-sub출력 예
이 출력에서는
Prefix및EventType의 업데이트된 값이 표시되는 것을 확인할 수 있습니다.Getting COS event subscription 'cos-sub'... OK Name: cos-sub ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 4m16s Created: 2021-02-01T13:11:31-05:00 Destination: App:cos-app Bucket: mybucket EventType: delete Prefix: test Ready: true Conditions: Type OK Age Reason CosConfigured true 24m Ready true 24m ReadyForEvents true 24m SinkProvided true 24m Events: Type Reason Age Source Messages Normal CosSourceReady 9s (x2 over 24m) cossource-controller CosSource is ready -
test접두부가 있는 오브젝트를 버킷에서 삭제하십시오. 예를 들어, 이름(또는 키)로test2.txt를 사용하는 파일을 삭제하십시오.ibmcloud cos object-delete명령을 사용하여 버킷에서 오브젝트를 삭제하거나 Object Storage 콘솔을 사용할 수 있습니다. -
ibmcloud ce app logs명령을 사용하여 처리된 이벤트를 확인하십시오.ibmcloud ce app logs --name cos-app출력 예
이 명령은 대상 앱으로 전달된 이벤트에 대한 정보가 포함된 로그 파일을 리턴합니다. 다음 출력에서는
Delete오퍼레이션이.txt이라는 버킷의mybucket오브젝트에 대해 수행되었음을 알 수 있습니다.Body: {"bucket":"mybucket","endpoint":"",""key":"test2.txt","notification":{"bucket_name":"mybucket","event_type":"Object:Delete","format":"2.0","object_length":"41","object_name":"test2.txt","request_id":"c1099857-f1f3-4d74-9ac4-8d374582f77d","request_time":"2021-09-15T15:22:01.205Z"},"operation":"Object:Delete"}
Object Storage 정리 튜토리얼
Object Storage 구독 및 앱을 삭제할 준비가 되었습니까? ibmcloud ce app delete 및 ibmcloud ce sub cos delete 명령을 사용할 수 있습니다.
구독을 제거하려면 다음을 실행하십시오.
ibmcloud ce sub cos delete --name cos-sub
애플리케이션을 제거하려면 다음을 실행하십시오.
ibmcloud ce app delete --name cos-app
Object Storage 버킷과 서비스 인스턴스를 삭제할 준비가 되었습니까? ibmcloud cos bucket-delete 명령을 사용하여 버킷을 제거할 수 있습니다. Object Storage 서비스
인스턴스를 제거하려면 ibmcloud resource service-instance-delete 명령을 사용하십시오.