리포지토리 소스 코드를 사용하여 함수 워크로드 만들기
IBM Cloud® Code Engine 콘솔이나 CLI를 사용하여 Git 저장소에 있는 소스 코드에서 직접 함수를 생성할 수 있습니다.
코드 번들은 함수 코드를 나타내는 파일 모음입니다. 이 코드 번들은 런타임 컨테이너에 주입됩니다. 코드 번들은 Code Engine 에서 생성되며 컨테이너 레지스트리에 저장되거나 함수와 인라인으로 저장됩니다. 코드 번들은 OCI(오픈 컨테이너 이니셔티브) 표준 컨테이너 이미지가 아닙니다.
이 시나리오에서 Code Engine 는 Git 리포지토리 소스에서 코드 번들을 빌드하고, 컨테이너 레지스트리에 코드 번들을 자동으로 업로드한 다음, 이 빌드된 코드 번들을 참조하는 함수를 생성합니다. 함수 이름, Git 리포지토리에 대한 URL, 함수 런타임만 제공하면 됩니다. 이 경우 네임스페이스는 Code Engine에서 관리합니다. 하지만 다른 컨테이너 레지스트리를 사용하려면, 해당 컨테이너 레지스트리에 대한 코드 번들과 레지스트리 시크릿을 지정해야 합니다.
이미지 레지스트리에 액세스하는 데 필요한 권한에 대한 정보는 이미지 레지스트리의 권한 설정을 참조하십시오.
콘솔에서 리포지토리 소스 코드를 사용하여 함수 워크로드 생성하기
콘솔에서 소스 코드를 사용하여 함수를 만듭니다.
- 콘솔을 엽니다 Code Engine 콘솔을 엽니다.
- '만들기 시작'을 선택하세요.
- 사용 가능한 프로젝트 목록에서 프로젝트를 선택하십시오. 프로젝트를 새로 작성할 수도 있습니다. 함수를 만들려면 프로젝트를 선택해야 합니다.
- ‘기능’을 선택하세요.
- 함수 이름을 입력하세요. 예를 들어,
myfunction``과 같이 입력합니다. 프로젝트 내에서 고유한 함수 이름을 사용하십시오. - 함수 코드의 런타임 이미지를 선택합니다. 자세한 내용은 런타임을 참조하세요.
- 소스 코드에서 코드 번들을 빌드하려면 이 항목을 선택하세요. 이 옵션을 선택하면 소스 코드에서 함수가 생성되어 컨테이너 레지스트리에 저장됩니다.
- 소스 리포지토리를 선택합니다(예:
https://github.com/IBM/CodeEngine). 샘플 소스를 사용하기로 선택한 경우 자격 증명이 필요하지 않으므로None을 선택하여 코드 리포지토리에 액세스할 수 있습니다. 선택적으로 분기 이름을 제공할 수 있습니다. 분기 이름을 제공하지 않고 필드를 비워 두면 Code Engine에서 지정된 저장소의 기본 분기를 자동으로 사용합니다. 다음을 클릭하십시오. - 빌드에 대한 전략과 빌드의 리소스를 선택하십시오. 빌드 옵션에 대한 자세한 정보는 빌드 계획을 참조하십시오. 다음을 클릭하십시오.
- 컨테이너 레지스트리 위치(예:
IBM Registry Dallas)를 선택하여 빌드 출력의 이미지를 저장할 위치를 지정하십시오. 레지스트리가 개인용인 경우에는 이에 대한 액세스 권한을 설정해야 합니다. - 빌드 출력의 이미지를 저장할 위치에 대한 레지스트리 정보를 제공하십시오. 기존 레지스트리 시크릿 을 선택하거나 새 시크릿을 생성하세요. 계정에 있는 Container Registry 인스턴스에 이미지를 빌드하는 경우
Code Engine managed secret을 선택하고 Code Engine에서 시크릿을 작성하고 관리하도록 할 수 있습니다. - 이미지의 네임스페이스, 이름 및 태그를 선택하십시오. 계정에 있는 IBM Cloud Container Registry 인스턴스에 이미지를 빌드하는 경우 기존 네임스페이스를 선택하거나 Code Engine에서 네임스페이스를 작성하고 관리하도록 설정할 수 있습니다. 추가 도움말을 보려면 코드 번들 지정 도움말을 클릭하세요. 자세한 정보는 컨테이너 레지스트리에 액세스를 참조하십시오.
- CPU 및 메모리 조합, 스케일 다운 지연 등 리소스 정보를 지정합니다.
- 선택 사항으로 사용자 지정 도메인 또는 환경 변수 을 지정합니다. 이러한 옵션은 나중에 추가할 수 있습니다.
- 작성을 클릭하십시오.
- 기능 상태가 ‘준비됨’으로 변경된 후, 해당 기능을 테스트할 수 있습니다. 테스트 기능을 클릭한 다음 요청 보내기를 클릭합니다. 웹 페이지에서 이 함수를 실행하려면 ‘함수’ URL 를 클릭하세요.
- 편집기 창에서 함수 코드를 변경할 수도 있습니다. 함수를 재배포하면 코드가 인라인으로 저장됩니다.
함수 테스트를 클릭한 다음 요청 보내기를 클릭하여 함수를 호출할 수 있습니다.
CLI로 리포지토리 소스 코드를 사용하여 함수 워크로드 생성하기
명령을 사용하여 function create 명령을 사용하여 Git 리포지토리 소스에서 코드 번들을 빌드하고 이 빌드된 코드 번들을 참조하는 함수를 만들 수 있습니다. 옵션의 전체 목록을 보려면 ibmcloud ce function create 명령을 참조하십시오.
시작하기 전에
- Code Engine CLI 환경을 설정하십시오.
- 프로젝트를 작성하고 작업하십시오.
다음 예제 function create 명령은 https://github.com/IBM/CodeEngine 에 있는 코드를 참조하는 myfun 함수를 생성합니다. 이 명령은 코드 번들을 자동으로 빌드하여 계정의 IBM Cloud® Container Registry 네임스페이스에 업로드합니다. 함수는 이 빌드된 코드 번들을 참조합니다.
--build-context-dir 옵션을 지정하면 빌드는 helloworld-samples/function-codebundle-nodejs 디렉토리에 있는 소스를 사용합니다.
ibmcloud ce function create --name myfun --runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs
출력 예
Preparing function 'myfun' for build push...
Creating function 'myfun'...
Submitting build run 'myfun-run-230111-111212718'...
Creating image 'icr.io/ce--abcde-glxo4kabcde/function-myfun:230111-1532-vwo4o'...
Waiting for build run to complete...
Build run status: 'Running'
Build run completed successfully.
Run 'ibmcloud ce buildrun get -n myfun-run-230111-111212718' to check the build run status.
Waiting for function 'myfun' to become ready...
Function 'myfun' is ready.
OK
Run 'ibmcloud ce function get -n myfun' to see more details.
https://myfun.11a66hbi3rhz.us-south.codeengine.appdomain.cloud
명령의 출력을 살펴보면 function create 명령의 출력은 함수가 생성되기 전에 빌드 실행의 진행 상황에 대한 정보를 제공합니다.
이 예제에서는 빌드된 코드 번들이 Container Registry 의 ce--abcde-4svg40kna19 네임스페이스로 업로드됩니다.
다음 표는 이 예제에서 function create 명령과 함께 사용되는 옵션을 요약한 것입니다. 이 명령어와 해당 옵션에 대한 자세한 내용은 ibmcloud ce function create 명령을
참조하십시오.
| 옵션 | 설명 |
|---|---|
--name |
기능의 이름입니다. 프로젝트 내에서 고유한 이름을 사용하십시오. 이 값은 필수입니다.
|
--build-source |
소스 코드가 포함된 Git 저장소의 URL입니다(예: https://github.com/IBM/CodeEngine). |
--build-context-dir |
코드가 포함된 리포지토리의 디렉터리입니다. 이 값은 선택사항입니다. |
--runtime |
함수의 실행 시간. |
다음 출력은 빌드에 대한 정보를 포함하여 이 예에 대한 function get 명령의 결과를 보여줍니다.
출력 예
Getting function 'myfun'
'...
OK
Name: myfun
Project Name: sample
Project ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Age: 27m
Created: 2023-06-27T21:07:26Z
Visibility: public
URL: https://myfun.13c66hbi3rhz.us-south.codeengine.appdomain.cloud
Internal URL: http://myfun.13c66hbi3rhz.function.cluster.local
Resources:
CPU: 0.25
Memory: 500M
Timeout: 60 seconds
Scale Down Delay: 1 seconds
Trusted profiles: disabled
Environment Variables:
Type Name Value
Literal CE_API_BASE_URL https://api.us-south.codeengine.cloud.ibm.com
Literal CE_DOMAIN us-south.codeengine.appdomain.cloud
Literal CE_FUNCTION myfun
Literal CE_REGION us-south
Literal CE_SUBDOMAIN 13c66hbi3rhz
Literal CE_PROJECT_ID abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Build Information:
Build Run Name: myfun-run-230111-111212718
Build Type: git
Build Strategy: codebundle-nodejs-22
Timeout: 600
Source: https://github.com/IBM/CodeEngine
Context Directory: /helloworld-samples/function-codebundle-nodejs
Build Run Status: Succeeded
Build Run Reason: All Steps have completed executing
Run 'ibmcloud ce buildrun get -n myfun-run-230111-111212718' for details.
Function Code:
Runtime: nodejs-22
Bundle Secret: ce-auto-icr-us-south
Code Bundle: cr://icr.io/ce--abcde-glxo4kabcde/function-myfun:230111-1532-vwo4o
Main: main
Status: Ready
URL: https://myfun.13c66hbi3rhz.us-south.codeengine.appdomain.cloud
이제 리포지토리 소스 코드에서 함수가 생성되었으므로 다음 명령을 사용하여 필요에 맞게 함수를 업데이트할 수 있습니다 ibmcloud ce function update 명령을 사용하여 업데이트할 수 있습니다. --build-source 함수와 함께 사용할 소스를 업데이트하려면, function update 명령에 xml-ph-0000@deepl.internal 옵션을 지정해야 합니다.
함수가 리포지토리 소스 코드 또는 CLI를 사용하여 로컬 소스에서 생성된 경우, 결과 빌드 실행은 빌드 구성에 기반하지 않습니다. 완료된 빌드 실행은 궁극적으로 자동으로 삭제됩니다. 빌드 구성에 기반하지 않은 빌드 실행은 빌드 실행이 성공하면 1시간 후에 삭제됩니다. 빌드 실행이 성공하지 못하면 이 빌드 실행은 24시간 후에 삭제됩니다. CLI로 실행한 이 빌드에 대한 정보만 표시할 수 있습니다. 콘솔에서는 이 빌드 실행을 볼 수 없습니다.
함수에 대한 종속성 포함
다양한 프로그래밍 언어로 함수를 만들 수 있습니다. 함수 코드가 복잡해지면 함수에 대한 종속성으로 코드 모듈을 추가할 수 있습니다. 각 언어에는 함수 코드에 사용할 수 있는 자체 모듈이 있습니다. 예를 들어 Node.js 종속성은 일반적으로 기존 npm 모듈인 반면 Python 는 Python 패키지를 사용합니다. 이러한 종속성은 소스 코드와 함께 파일에 선언하고 생성해야 합니다
Node.js 함수용 모듈 포함
package.json 파일을 생성하여 특정 Node.js 모듈에 대한 종속성을 포함하는 함수를 만듭니다. 이 경우 소스 코드와 패키지 파일은 모두 같은 폴더에 있습니다.
-
main.js파일에 코드를 작성하여 소스 코드를 만듭니다. 예를 들어, 다음 코드 예제를main.js라는 파일에 복사합니다./** * The `main` function is the entry-point into the function. * It has one optional argument, which carries all the * parameters the function was invoked with. */ function main(params /* optional */) { // use third-party 'lorem-ipsum' package to generate random words const LoremIpsum = require("lorem-ipsum").LoremIpsum; const lorem = new LoremIpsum(); // Since functions are invoked through http(s), we return an HTTP response. return { headers: { "Content-Type": "text/plain;charset=utf-8" }, body: lorem.generateWords(10), }; } // This step is necessary, if you gave your main function a different name. // We include it here for documentation purposes only. module.exports.main = main; -
함수에 필요한 종속성이 포함된
package.json파일을 만듭니다. 이전 코드 예제의 경우package.json파일에 다음 내용을 사용합니다.{ "name": "function", "version": "1.0.0", "main": "main.js", "dependencies" : { "lorem-ipsum" : "2.0.8" } } -
Code Engine 에서 함수로 파일을 생성합니다. 이전 파일 모두 리포지토리에서 액세스할 수 있어야 합니다. 비공개 리포지토리에 있는 경우 비공개 코드 리포지토리 액세스 권한을 만든 다음
--build-git-repo-secret옵션으로 해당 값을 제공하세요. 파일이 메인 디렉터리가 아닌 다른 디렉터리에 있는 경우--build-context-dir옵션과 함께 디렉터리 경로를 입력합니다. 다음 예는https://github.com/IBM/CodeEngine공개 리포지토리에서 파일을 가져오는 예입니다.ibmcloud ce fn create -n nodelorem -runtime nodejs --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-nodejs/ -
제공된
fn get명령을 실행하여 함수에 대한 자세한 내용을 확인합니다. -
URL 을 웹 브라우저에 붙여넣어 함수를 호출합니다. 브라우저에
lorem ipsum이라는 구절이 표시됩니다.
fn create 명령 및 해당 옵션에 대한 자세한 내용은 함수 만들기를 참조하세요.
Python 함수용 모듈 포함
requirements.txt 파일을 생성하여 특정 Python 모듈에 대한 종속성을 포함하는 함수를 만듭니다. 이 경우 소스 코드와 요구 사항 파일은 모두 같은 폴더에 있습니다.
-
__main__.py파일에 코드를 저장하여 함수를 만듭니다# use third-party 'lorem-ipsum' package to generate random words from lorem_text import lorem # The `main` function is the entry-point into the function. # It has one optional argument, which carries all the # parameters the function was invoked with. def main(params): words = 10 # since functions are invoked through http(s), we return an HTTP response return { "headers": { "Content-Type": "text/plain;charset=utf-8", }, "body": lorem.words(words), } def main(params): words = 10 return { "headers": { "Content-Type": "text/plain;charset=utf-8", }, "body": lorem.words(words), } -
함수에 필요한 종속성을 포함하는
requirements.txt을 만듭니다lorem-text -
Code Engine 에서 함수로 파일을 생성합니다. 이전 파일 모두 리포지토리에서 액세스할 수 있어야 합니다. 비공개 리포지토리에 있는 경우 비공개 코드 리포지토리 액세스 권한을 만든 다음
--build-git-repo-secret옵션으로 해당 값을 제공하세요. 파일이 메인 디렉터리가 아닌 다른 디렉터리에 있는 경우--build-context-dir옵션과 함께 디렉터리 경로를 입력합니다. 다음 예는https://github.com/IBM/CodeEngine공개 리포지토리에서 파일을 가져오는 예입니다.ibmcloud ce fn create -n pylorem -runtime python --build-source https://github.com/IBM/CodeEngine --build-context-dir /helloworld-samples/function-codebundle-python/ -
제공된
fn get명령을 실행하여 함수에 대한 자세한 내용을 확인합니다. -
URL 을 웹 브라우저에 붙여넣어 함수를 호출합니다. 브라우저에
lorem ipsum이라는 구절이 표시됩니다.
fn create 명령 및 해당 옵션에 대한 자세한 내용은 함수 만들기를 참조하세요.
다음 단계
-
함수가 생성된 후에는 콘솔에서 함수 테스트를 클릭하거나 URL 명령으로 함수에 대한 주소를 찾아서 함수에 액세스할 수 있습니다
function get명령어를 사용합니다. -
사용자 지정 도메인 매핑을 만들어 함수에 할당할 수 있습니다.
-
함수를 만들고 배포한 후에는 콘솔에서 또는 다음 명령을 사용하여 필요에 맞게 함수를 업데이트할 수 있습니다
ibmcloud ce function update명령을 사용하여 업데이트할 수 있습니다.--build-source함수와 함께 사용할 소스를 업데이트하려면,function update명령에 xml-ph-0000@deepl.internal 옵션을 지정해야 합니다.
함수를 생성한 후에는, 해당 함수를 생성하거나 이전에 업데이트한 방식과 관계없이 다음 방법 중 하나를 사용하여 함수와 그 함수가 참조하는 코드를 업데이트할 수 있습니다
-
기존 코드 번들이 있는 경우 앱을 배포할 때 컨테이너 레지스트리의 위치를 가리키는 이미지에 대한 참조만 제공하면 됩니다. 자세한 내용은 기존 코드 번들에서 함수 워크로드 만들기를 참조하세요.
명령을 사용하여 함수를 만들었고
function create명령을 사용하여 함수를 만들었고--build-source옵션을 지정하여 로컬 또는 리포지토리 소스에서 코드 번들을 빌드했는데 다른 코드 번들을 가리키도록 함수를 변경하려면 먼저 함수에서 빌드 연동을 제거해야 합니다. 예를 들어ibmcloud ce function update -n FUN_NAME --build-clear을 실행합니다. 함수에서 빌드 연결을 제거한 후 함수를 업데이트하여 다른 이미지를 참조할 수 있습니다. -
Git 저장소에 있는 소스 코드로 시작하는 경우, Code Engine 을 통해 소스 코드를 기반으로 코드 번들을 빌드하고 단 한 번의 작업으로 함수를 생성하도록 설정할 수 있습니다. 이 시나리오에서 Code Engine 은 사용자의 코드 번들을 IBM Cloud® Container Registry 에 업로드합니다. 자세히 알아보려면 리포지토리 소스 코드에서 함수 만들기를 참조하세요.
-
로컬 워크스테이션에 있는 소스 코드로 시작하는 경우 Code Engine 을 선택하여 소스에서 코드 번들을 빌드하고 단일 CLI 명령으로 함수를 만들 수 있습니다. 이 시나리오에서는 Code Engine 이 소스 코드와 코드 번들을 IBM Cloud® Container Registry 에 업로드합니다.
예를 들어, 해당 함수에 대한 소스 코드를 계속 개발해 나가는 동안 Code Engine 명령어를 사용하여 로컬 소스 코드를 빌드하도록 선택할 수 있습니다. 그런 다음 코드 번들이 완성된 후 원하는 특정 코드 번들을 참조하도록 함수를 업데이트할 수 있습니다. 이 프로세스는 필요에 따라 반복할 수 있습니다.
더 많은 코드 예를 찾고 계십니까? 샘플은 IBM Cloud Code Engine GitHub 리포지토리에서 확인하세요.