IBM Cloud 서비스를 서비스 바인딩으로 통합하는 작업 Code Engine
서비스 바인딩을 사용하여 IBM Cloud 서비스 인스턴스를 IBM Cloud® Code Engine 프로젝트의 리소스에 통합하는 방법을 찾아봅니다.
서비스 바인딩은 애플리케이션, 작업, 기능에 IBM Cloud 서비스에 대한 액세스를 제공합니다.
CLI를 사용하여 서비스 바인딩을 관리하고 있으며, CLI 1.27.0이전 버전의 CLI로 생성된 서비스 바인딩이 있는 경우, 이전 구현 방식을 사용하는 서비스 바인딩을 교체하는 방법에 대한 정보는 ‘고려 사항’을 참조하십시오. CLI의 최신 개선 사항을 활용하려면 IBM Cloud Code Engine CLI를 최신 버전으로 업데이트하십시오.
IBM Cloud Code Engine 서비스 바인딩의 개념
서비스 인스턴스를 Code Engine 애플리케이션이나 작업에 바인딩하면, 해당 서비스 인스턴스의 자격 증명이 애플리케이션이나 작업의 컨테이너 환경 변수, 또는 Function의 코드 번들에 자동으로 추가됩니다. 서비스 인증 정보의 컨텐츠를 확인하려면 서비스 인스턴스 대시보드로 이동하여 서비스 인증 정보 페이지를 찾으십시오. 서비스 인증 정보는 JSON 오브젝트로 표시되는데, 이 오브젝트는 바인드될 때 애플리케이션 또는 작업 환경에 추가됩니다.
{
"apikey": "xxxxxxx",
"endpoints": "https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints",
"iam_apikey_description": "Auto-generated for key abcdabcd-abcd-4d8c-78cf-abcdabcdabcd",
"iam_apikey_name": "my-object-storage-codeengine-credential",
"iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
"iam_serviceid_crn": "crn:v1:bluemix:public:iam-identity::a/1176a104ad4241e6b0aa82ed0b60c15c::serviceid:ServiceId-abcdabcd-7ae8-abcd-a219-abcdabcdabcd",
"resource_instance_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/1176a104ac4241e6b0cb82ed0b60c15c:abcdabcd-abcd-4777-abcd-d330a450c85b::"
}
Code Engine 워크로드에 서비스 인스턴스를 바인딩하려면, 먼저 해당 서비스의 인스턴스를 프로비저닝해야 합니다. 그런 다음, Code Engine 콘솔 또는 CLI를 사용하여 앱, 작업 또는 기능을 IBM Cloud 서비스 인스턴스에 바인딩합니다.
Code Engine 워크로드에 서비스 인스턴스를 바인딩하면, Code Engine 는 서비스 액세스 시크릿을 사용하여 지정된 IBM Cloud 서비스 인스턴스의 자격 증명을 저장합니다. 이 유형의 비밀 키는 서비스 바인딩의 핵심 메커니즘으로, IBM Cloud 서비스 인스턴스를 특정 Code Engine 앱, 작업 또는 기능에 연결합니다. Code Engine 가 이 비밀 키를 생성하고 관리합니다.
- 어떤 유형의 서비스를 바인딩할 수 있습니까?
- IBM Cloud Identity and Access Management (IAM)을 사용할 수 있고 서비스 자격 증명을 사용하는 모든 유형의 IBM Cloud 서비스를 애플리케이션, 작업 또는 기능 워크로드에 추가할 수 있습니다. 지원되는 IBM Cloud 서비스 목록을 찾으려면 IBM Cloud 카탈로그를 참조하십시오.
- IBM Cloud 서비스 인스턴스에 대한 서비스 인증 정보가 이미 있습니다. 이 인증 정보를 Code Engine 서비스 바인딩에 사용할 수 있습니까?
- 네, 기존 서비스 자격 증명을 사용하여 서비스 인스턴스를 Code Engine 워크로드에 바인딩할 수 있습니다. 콘솔에서 서비스 바인딩에 이미 사용된 기존 자격 증명을 사용할 수 있습니다.
--service-credentialCLI에서 기존 서비스 자격 증명을 사용하려면ibmcloud ce application bind,ibmcloud ce job bind, 또는ibmcloud ce function bind명령을 입력하고 서비스 자격 증명의 이름을 입력합니다. - 서비스 바인딩을 생성하려면 어떤 접근 권한이 필요합니까?
- 각 Code Engine 프로젝트에는 일련의 IAM 액세스 정책이 구성되어야 하며, 이를 통해 Code Engine 서비스 바인딩이 서비스 인스턴스를 조회하고, 계정 내 서비스 자격 증명을 조회 및 생성할 수 있는 권한이 부여됩니다. IAM 정책은 서비스 ID를 사용하여 Code Engine 서비스 바인딩에 제공됩니다. 더 자세한 정보는 서비스 바인딩에 대한 접근 권한 설정을 참고하세요.
- 프로젝트의 모든 사용자에 대해 서비스 바인딩 작업을 구성하는 방법이 있나요?
- 예. 충분한 권한이 있으면 콘솔의 통합 페이지를 사용하여 단일 페이지에서 서비스 바인딩 작업을 구성할 수 있습니다. 이러한 작업을 수행할 수 있는 충분한 권한이 없는 경우, 이 페이지를 통해 필요한 권한을 이해할 수 있습니다. 프로젝트 전체 설정 구성하기를 참조하세요.
- Code Engine 의 작업량을 서비스 인스턴스에 바인딩한 후, 이 서비스 바인딩의 수명은 얼마입니까?
- Code Engine 작업량과 서비스 인스턴스 사이에 바인딩을 생성하면, Code Engine 작업량과 서비스 인스턴스가 활성화되어 있거나 서비스 바인딩을 제거하는 바인딩 해제 작업을 완료하지 않은 한 서비스 바인딩이 활성화됩니다. 서비스 인스턴스가 삭제되면 서비스 바인딩을 수동으로 삭제해야 합니다. 서비스 바인딩을 해제(또는 제거)하면 앱, 작업 또는 기능과 서비스 액세스 비밀번호의 연결이 삭제되어 앱, 작업 또는 기능이 이전에 바인딩된 IBM Cloud 서비스에 더 이상 액세스할 수 없게 됩니다.
Code Engine 워크로드에서 바운드 서비스 인스턴스에 액세스
Code Engine Code Engine 워크로드에 바인딩된 서비스 인스턴스에 액세스하기 위한 환경 변수를 제공합니다 CE_SERVICES 그리고 PREFIX 방법.
-
CE_SERVICES환경 변수는 모든 서비스 바인딩 정보를 JSON 객체로 포함하는 단일 환경 변수입니다. -
Code Engine 또한 서비스 인스턴스에 대한 서비스 자격 증명 변수를 기반으로 하는 여러 환경 변수를 생성합니다. 서비스 바인딩을 위해 이러한 여러 환경 변수를 구분하려면, 이러한 환경 변수가 동일한 접두사를 사용하도록 환경 변수 이름 접두사(
PREFIX)를 사용할 수 있습니다. 사용자 지정 접두사를 지정하지 않으면 Code Engine 가 자동으로 접두사를 생성합니다.
애플리케이션, 작업 또는 함수가 사설 네트워크를 사용하여 바인딩된 서비스와 통신하려는 경우, 해당 서비스에 private 및 direct 엔드포인트(예: IBM Cloud Object Storage )가 모두 있는 경우, 반드시 direct 엔드포인트를 사용해야 합니다.
CE_SERVICES 환경 변수
CE_SERVICES 환경 변수에는 서비스 인스턴스와 상호작용하는 데 사용할 수 있는 정보가 포함되어 있습니다. 이 환경 변수는 키 값 쌍이 포함된 JSON 오브젝트를 가리킵니다. 이러한 키-값 쌍은 애플리케이션, 작업 또는 함수에 바인딩된 각 서비스 유형을 나타냅니다. key는 서비스 유형의 이름(예: cloud-object-storage)이고, value는
해당 유형의 바인딩된 서비스 인스턴스에 대한 인증 정보 배열입니다.
다음 예제는 CE_SERVICES 변수를 보여줍니다.
{
"appid": [
{
"credentials": {
"apikey": "xxxxxx",
"appidServiceEndpoint": "https://us-south.appid.cloud.ibm.com",
"clientId": "abcdabcd-xxxxxxxx",
"discoveryEndpoint": "https://us-south.appid.cloud.ibm.com/oauth/v4/xxxxxxxx/.well-known/openid-configuration",
"iam_apikey_description": "Auto-generated for key crn:v1:bluemix:public:appid:us-south:a/abcdabcd719f45b98a931f6e20db1bd8:xxxxxxxx:resource-key:abcdabcd-xxxxxxxx",
"iam_apikey_name": "ce-service-access-abcd",
"iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
"iam_serviceid_crn": "crn:v1:bluemix:public:iam-identity::a/abcdabcd719f45b98a931f6e20db1bd8::serviceid:ServiceId-6d7087e5-0611-4240-9e46-af8a4c15cba4",
"managementUrl": "https://us-south.appid.cloud.ibm.com/management/v4/xxxxxxxx",
"oauthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/xxxxxxxx",
"profilesUrl": "https://us-south.appid.cloud.ibm.com",
"secret": "abcdabcdYTAtZmU0MC00YTQ1LTliY2YtMDk0ODg0NDMyNDgw",
"tenantId": "xxxxxxxx",
"version": 4
},
"name": "App ID-yn",
"plan": "c0258a22-160a-403b-845d-1588ad61204c",
"resourcekey_name": "ce-service-access-abcd",
"resourcekey_id": "abcdabcd-xxxxxxxx"
}
],
"cloud-object-storage": [
{
"credentials": {
"apikey": "xxxxxx",
"endpoints": "https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints",
"iam_apikey_description": "Auto-generated for key crn:v1:bluemix:public:cloud-object-storage:global:a/abcdabcd719f45b98a931f6e20db1bd8:abcdabcd-34b3-4edf-95b7-abcdabcdabcd:resource-key:abcdabcd-96e0-46ef-b805-31288524f194",
"iam_apikey_name": "ce-service-access-c5yn1",
"iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
"iam_serviceid_crn": "crn:v1:bluemix:public:iam-identity::a/abcdabcd719f45b98a931f6e20db1bd8::serviceid:ServiceId-ee6394cb-f203-4c3c-9152-ac886a3f66bb",
"resource_instance_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/abcdabcd719f45b98a931f6e20db1bd8:abcdabcd-34b3-4edf-95b7-abcdabcdabcd::"
},
"name": "Cloud Object Storage-56",
"plan": "2fdf0c08-2d32-4f46-84b5-32e0c92fffd8",
"resourcekey_name": "ce-service-access-c5yn1",
"resourcekey_id": "abcdabcd-96e0-46ef-b805-31288524f194"
}
]
}
Prefix 메소드
prefix 접두부를 사용하면 서비스 인증 정보 오브젝트의 인증 정보 변수 각각에 대해 밑줄로 구분된 대문자의 공통 환경 변수 구문(예: VARIABLE_NAME)을 사용하여 사용자 환경에 해당 변수가 개별적으로 제공됩니다.
기본적으로 변수 이름은 서비스 이름, 인증 정보 변수 이름 순으로 구성됩니다. 예를 들어, apikey 라는 이름의 IBM Cloud Object Storage 서비스 자격 증명 변수는 CLOUD_OBJECT_STORAGE_APIKEY 라는 환경 변수를 통해 사용할 수 있습니다. 다음 예에서는 IBM Cloud Object Storage 서비스 인스턴스 바인딩에 대해 작성된 환경
변수를 보여줍니다.
CLOUD_OBJECT_STORAGE_APIKEY=xxxxxx
CLOUD_OBJECT_STORAGE_ENDPOINTS=https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints
CLOUD_OBJECT_STORAGE_IAM_APIKEY_DESCRIPTION=Auto-generated for key abcdabcd-abcd-abcd-abcd-abcdabcdabcd
CLOUD_OBJECT_STORAGE_IAM_APIKEY_NAME=my-object-storage-codeengine-credential
CLOUD_OBJECT_STORAGE_IAM_ROLE_CRN=crn:v1:bluemix:public:iam::::serviceRole:Manager
CLOUD_OBJECT_STORAGE_IAM_SERVICEID_CRN=crn:v1:bluemix:public:iam-identity::a/1176a104ad4441e6b0aa92ed0b60b15c::serviceid:ServiceId-abcdabcd-abcd-abcd-8b41-531fc64e640e
CLOUD_OBJECT_STORAGE_RESOURCE_INSTANCE_ID=crn:v1:bluemix:public:cloud-object-storage:global:a/1176a104ad4441e6b0aa92ed0b60b15c:11179ac4-abcd-4887-abcd-d330a430abcd::
CLOUD_OBJECT_STORAGE_SERVICENAME=my-object-storage
기본적으로 동일한 유형의 둘 이상의 인스턴스가 단일 애플리케이션에 바인드된 경우 Code Engine은 CLOUD_OBJECT_STORAGE_2_APIKEY와 같은 인덱스를 서비스 이름에 추가합니다.
각 서비스 바인딩은 사용자 지정 환경 변수 접두사를 사용하도록 구성할 수 있습니다. 콘솔을 사용하는 경우, 서비스 바인딩을 생성할 때 접두사를 선택적으로 제공할 수 있습니다. --prefix CLI를 사용하는 경우, app bind, 그 job bind, 또는 function bind 명령.
이전 구현을 사용하는 서비스 바인딩이 있는 경우 무엇을 고려해야 합니까?
CLI 1.27.0에서는 이 버전 또는 이후 버전을 사용하여 작성된 모든 바인딩에 사용되는 개선된 서비스 바인딩 구현이 도입되었습니다. CLI 1.27.0 이전 버전의 CLI로 작성된 서비스 바인딩은 이전 서비스 바인딩 구현을 사용하고 있습니다. 이전 구현 방식을 사용하는 서비스 바인딩을 가진 애플리케이션, 작업 및 기능은 바인딩된 서비스에 대한 액세스 측면에서 계속해서 정상적으로 작동합니다. 그러나 이전 구현을 사용하는 서비스 바인딩을 변경하려면 다음 정보를 고려하십시오.
- 동일한 앱, 작업 또는 함수에 대해 기존 구현과 개선된 구현의 서비스 바인딩을 혼합하여 사용할 수 없습니다. 이전 구현 방식을 사용하는 서비스 바인딩이 설정된 앱, 작업 또는 함수에 새로운 서비스 바인딩을 추가하려면, 먼저 이러한 모든 서비스 바인딩의 연결을 해제해야 합니다. 그런 다음 개선된 구현으로 다시 작성하고 새 서비스 바인딩을 추가할 수 있습니다.
- 이러한 서비스 바인딩은 개별적으로 바인드 해제할 수 없습니다.
app unbind --all또는job unbind --all명령을 사용하여 모두 제거해야 합니다. - 기능 워크로드로 작업하는 경우, 해당 기능은 서비스 바인딩의 최신 구현을 자동으로 사용합니다.
최신 개선사항을 활용하고 앱 및 작업에 대한 서비스 바인딩을 계속 쉽게 관리하려면 최신 IBM Cloud Code Engine CLI 버전으로 업데이트하고 이전 구현을 사용하는 서비스 바인딩을 바꾸십시오.
이전 구현을 사용하는 서비스 바인딩을 대체하려면 어떻게 해야 합니까?
애플리케이션이나 작업에 이전 구현 방식을 사용하는 서비스 바인딩이 있고, 여기에 새로운 서비스 바인딩을 추가하려는 경우, 새로운 바인딩을 생성하기 전에 먼저 이전 구현 방식을 사용하는 바인딩을 제거해야 합니다. 필요한 경우 기존 서비스 바인딩을 다시 작성할 수 있습니다.
바인딩을 해제하고 다시 바인딩하는 동안 애플리케이션이 완전히 작동하지 않을 수 있습니다.
-
사용 중인 애플리케이션이나 작업이 이전 버전의 서비스 바인딩 구현을 사용하는지 확인하려면 다음 명령을 실행하십시오.
app get또는job get명령을 실행하십시오. 이전 서비스 바인딩 구현을 사용하는 경우, 이 명령어의 출력 결과에는 해당 정보와, 다른 서비스를 애플리케이션이나 작업에 바인딩하기 위해 사용해야 하는 명령어가 표시됩니다. 예를 들면 다음과 같습니다.ibmcloud ce app get --name myapp출력 예
Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances. Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances. OK This application uses a previous service binding implementation. Your application will continue to function normally. To bind an additional service to this application, delete and re-create those service bindings with the improved implementation. Your application might not be fully functional during the process of unbinding and rebinding. Re-create the existing service bindings by issuing the following commands: (1) Remove all existing service bindings from this application. ibmcloud ce application unbind --name myapp -all (2) Bind the services again. ibmcloud ce application bind --name myapp --service-instance myobjectstorage --prefix CLOUD_OBJECT_STORAGE Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 2m4s Created: 2021-09-09T14:01:02-04:00 URL: https://myapp.abcdabcdabc.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.abcdabcdabc.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully [...] Service Bindings: Service Instance Service Type Environment Variable Prefix myobjectstorage cloud-object-storage CLOUD_OBJECT_STORAGE마찬가지로, 작업을 사용하는 경우에는
ibmcloud ce job get --name JOB_NAME명령을 실행하여 더 이상 사용되지 않는 바인딩이 작업에 사용되었는지 확인하십시오. -
이전 구현을 사용하는 기존 서비스 바인딩을 바인드 해제하십시오.
--all옵션은 이 애플리케이션의 모든 서비스 인스턴스를 바인딩 해제하도록 지정합니다.ibmcloud ce app unbind --name APP_NAME --all마찬가지로, 작업을 사용하는 경우에는
ibmcloud ce job unbind --name JOB_NAME --all명령을 실행하여 작업에 대한 모든 서비스 인스턴스를 바인딩 해제하십시오. -
바인딩을 새로 작성하십시오. 바인딩을 새로 작성하려면
ibmcloud ce app bind또는ibmcloud ce job bind명령을 실행하십시오. 이전 구현을 사용하는 서비스 바인딩을 대체하려면app get또는job get명령의 출력에 제공된 명령을 사용하십시오. 예를 들어, Code Engine 애플리케이션myapp에서 IBM Cloud Object Storage 서비스 인스턴스myobjectstorage로의 기존 바인딩을 다시 작성하려면 다음 명령을 사용하십시오.ibmcloud ce app bind --name myapp --service-instance myobjectstorage --prefix CLOUD_OBJECT_STORAGE마찬가지로, 작업을 사용하는 경우에는
ibmcloud ce job bind --name JOB_NAME ---service-instance SERVICE_INSTANCE --prefix PREFIX명령을 실행하십시오.다시 작성할 각 바인딩에 대해 이 단계를 반복하십시오.
-
(선택사항)
app get또는job get명령을 다시 실행하십시오. 이번에는 이전 구현의 서비스 바인딩에 대한 정보가 명령 출력에 표시되지 않습니다. 예를 들면 다음과 같습니다.ibmcloud ce app get --name myapp출력 예
Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances. Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances. OK Name: myapp ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 2m4s Created: 2021-09-09T14:01:02-04:00 URL: https://myapp.abcdabcdabc.us-south.codeengine.appdomain.cloud Cluster Local URL: http://myapp.abcdabcdabc.svc.cluster.local Console URL: https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration Status Summary: Application deployed successfully [...] Service Bindings: Name ID Service Instance Service Type Role / Credential Environment Variable Prefix myapp-app-ce-service-binding-abcde abcde5d3-dfc3-4f52-b133-b869b5eabcde my-object-storage cloud-object-storage Writer CLOUD_OBJECT_STORAGE
다음 단계
Code Engine 의 앱, 작업, 또는 기능 워크로드에 서비스 인스턴스를 바인딩하기 전에, 바인딩에 대한 접근 권한을 설정해야 합니다. 서비스 바인딩에 대한 접근 권한 설정을 참조하세요.