애플리케이션 배치 및 스케일링

이 튜토리얼에서는 Code Engine CLI를 사용하여 애플리케이션을 배치합니다. 애플리케이션은 사용되지 않을 때 0으로 스케일링됩니다.

애플리케이션 또는 앱은 코드를 실행하여 HTTP 요청을 제공합니다. 기존 HTTP 요청 외에 IBM Cloud® Code Engine은 WebSocket을 통신 프로토콜로 사용하는 애플리케이션도 지원합니다. 앱의 실행 중인 인스턴스 수는 수신 요청 및 구성 설정에 따라 자동으로 확장 또는 축소(0으로)됩니다. 앱에는 하나 이상의 개정이 포함되어 있습니다. 개정은 앱 구성 특성의 불변 버전을 나타냅니다. 앱 구성 특성을 업데이트할 때마다 앱 개정이 새로 작성됩니다.

시작하기 전에

모든 Code Engine 사용자에게는 종량과금제 계정이 있어야 합니다. 튜토리얼은 비용이 부과될 수 있습니다. 비용 추정기를 사용하여 예상 사용량을 기반으로 한 비용 추정을 생성하십시오. 자세한 정보는 Code Engine 가격을 참조하십시오.

이미지 파일 선택

이 튜토리얼에서는 간단한 Hello World 프로그램인 샘플 이미지 icr.io/codeengine/hello를 사용합니다. 이 프로그램에는 환경 변수 TARGET이 포함되어 있으며 Hello ${TARGET}을 출력합니다. 환경 변수가 비어 있으면 Hello World가 리턴됩니다. 이 예제에 사용되는 코드에 대한 자세한 정보는 hello의 내용을 참조하십시오.

사용하려는 컨테이너 이미지가 있는 경우 다음 단계의 이미지 참조를 고유한 Docker 저장소, 이미지 이름 및 버전으로 바꿀 수 있습니다.

애플리케이션 작성 및 배치

  1. ibmcloud ce application create 명령을 사용하여 애플리케이션을 작성하십시오. 다음 예에서는 myapp을 애플리케이션의 이름으로 사용하고 icr.io/codeengine/hello를 참조할 이미지로 지정합니다.

    ibmcloud ce application create --name myapp --image icr.io/codeengine/hello
    

    출력 예

    Creating application 'myapp'...
    [...]
    Run 'C:\Program Files\IBM\Cloud\bin\ibmcloud.exe ce application get -n myapp' to check the application status.
    OK
    https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    
  2. ibmcloud ce application get 명령을 실행하여 myapp 애플리케이션 URL을 포함하여 애플리케이션에 대한 세부사항을 표시하십시오.

    ibmcloud ce application get -n 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:                3m6s
    Created:            2021-07-11T06:39:41-05:00
    URL:                https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    Cluster Local URL:  http://myapp.4svg40kna19.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
    
    Environment Variables:    
        Type     Name             Value  
        Literal  CE_API_BASE_URL  https://api.private.us-south.codeengine.cloud.ibm.com
        Literal  CE_APP           myapp  
        Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
        Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
        Literal  CE_REGION        us-south  
        Literal  CE_SUBDOMAIN     abcdabcdab
    Image:                icr.io/codeengine/hello
    Resource Allocation:
    CPU:                1
    Ephemeral Storage:  400M
    Memory:             4G
    
    Revisions:
    myapp-huv70-1:
        Age:                3m6s
        Traffic:            100%
        Image:              icr.io/codeengine/hello (pinned to f0dc03)
        Running Instances:  1
    
    Runtime:
        Concurrency:    100
        Maximum Scale:  10
        Minimum Scale:  0
        Timeout:        300
    
    Conditions:
        Type                 OK    Age  Reason
        ConfigurationsReady  true  52s
        Ready                true  26s
        RoutesReady          true  26s
    
    Events:
    Type    Reason   Age   Source              Messages
    Normal  Created  3m9s  service-controller  Created Configuration "myapp"
    Normal  Created  3m9s  service-controller  Created Route "myapp"
    
    Instances:
    Name                                       Revision       Running  Status       Restarts  Age
    myapp-huv70-1-deployment-6656cfc796-7gl27  myapp-huv70-1  1/2      Terminating  0         3m9s
    
  3. 이전 단계에서 설명한 application get 명령을 실행하여 애플리케이션 URL을 얻으십시오. 애플리케이션의 URL을 직접 검색하기 위해 --output 옵션을 사용하고 application get 명령에 URL 형식을 지정할 수 있습니다. 또한 ibmcloud ce application list 명령을 실행하여 애플리케이션 URL을 얻을 수 있습니다.

    ibmcloud ce application get -n myapp -output url
    

    출력 예

    https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    
  4. 이전 출력에서 URL을 복사하고 curl로 애플리케이션을 호출하십시오.

    curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    

    출력 예

    Hello World
    

Code Engine 애플리케이션을 성공적으로 배치하고 시작했습니다!

애플리케이션 업데이트

  1. ibmcloud ce application update 명령을 사용하여 Hello Stranger를 리턴하는 환경 변수를 추가하여 새로 작성한 애플리케이션을 업데이트하십시오.

    ibmcloud ce application update --name myapp --env TARGET=Stranger
    

    출력 예

    Updating application 'myapp' to latest revision.
    [...]
    Run 'ibmcloud ce application get -n myapp' to check the application status.
    OK
    
    https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    
  2. application get 명령을 사용하여 최신 개정 정보를 포함한 앱 세부사항을 표시하십시오.

    ibmcloud ce application 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:                3m6s
    Created:            2021-07-11T06:39:41-05:00
    URL:                https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    Cluster Local URL:  http://myapp.4svg40kna19.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
    
    Environment Variables:    
        Type     Name             Value  
        Literal  CE_API_BASE_URL  https://api.private.us-south.codeengine.cloud.ibm.com
        Literal  CE_APP           myapp  
        Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
        Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
        Literal  CE_REGION        us-south  
        Literal  CE_SUBDOMAIN     abcdabcdab
        Literal  TARGET           Stranger
    Image:                icr.io/codeengine/hello
    
     Status Summary:  Application deployed successfully
    
     Environment Variables:
         Type     Name    Value
         Literal  TARGET  Stranger
     Image:                  icr.io/codeengine/hello
     Resource Allocation:
         CPU:                1
         Ephemeral Storage:  400M
         Memory:             4G
    
     Revisions:
     myapp-00002:
         Age:                54m
         Traffic:            100%
         Image:              icr.io/codeengine/hello (pinned to f0dc03)
         Running Instances:  1
    
     Runtime:
         Concurrency:    100
         Maximum Scale:  10
         Minimum Scale:  0
         Timeout:        300
    
     Conditions:
         Type                 OK    Age  Reason
         ConfigurationsReady  true  25s
         Ready                true  11s
         RoutesReady          true  11s
    
     Events:
     Type    Reason   Age    Source              Messages
     Normal  Created  4m17s  service-controller  Created Configuration "myapp"
     Normal  Created  4m17s  service-controller  Created Route "myapp"
    
     Instances:
        Name                                     Revision     Running  Status       Restarts  Age
        myapp-00001-deployment-bf7559548-mxgvq   myapp-00001  2/3      Terminating  0         4m55s
        myapp-00002-deployment-8495f8ccb9-kmc57  myapp-00002  3/3      Running      0         88s
    

    Revisions 섹션의 출력에서 myapp 서비스의 최신 애플리케이션 개정을 확인할 수 있습니다. 또한 애플리케이션에 대한 트래픽의 100%가 최신 앱 개정을 실행 중임을 확인할 수 있습니다.

  3. 애플리케이션을 호출하십시오.

    curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    

    출력 예

    Hello Stranger
    

이 명령의 출력에서 업데이트된 앱이 이제 Hello Stranger를 리턴함을 확인할 수 있습니다.

애플리케이션 스케일링(0으로 스케일링 및 0에서 스케일링)

애플리케이션의 실행 중인 인스턴스 수는 수신 워크로드에 따라 자동으로 확장 또는 축소(최소 0)됩니다.

다음 예에서는 CLI를 사용하여 애플리케이션을 스케일링하는 방법을 보여줍니다. --min-scale 또는 --max-scale 명령을 통해 application createapplication update 옵션의 값을 변경하여 앱의 실행 중인 최대 및 최소 인스턴스 수를 제어할 수 있습니다.

  1. 애플리케이션을 호출하십시오.

    curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    
  2. application get 명령을 실행하여 애플리케이션 상태를 표시하십시오. Running instances의 값을 주목하십시오. 이 예에서 앱의 실행 중인 인스턴스 수는 1입니다.

    ibmcloud ce application get --name myapp
    

    출력 예

    [...]
    
    Name:          myapp
    [...]
    URL:                https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    Cluster Local URL:  http://myapp.4svg40kna19.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
    
    Environment Variables:    
        Type     Name             Value  
        Literal  CE_API_BASE_URL  https://api.private.us-south.codeengine.cloud.ibm.com
        Literal  CE_APP           myapp  
        Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
        Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
        Literal  CE_REGION        us-south  
        Literal  CE_SUBDOMAIN     abcdabcdab
        Literal  TARGET           Stranger
    Image:                  icr.io/codeengine/hello
    
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    
    Revisions:
    myapp-00002:
        Age:                58m
        Traffic:            100%
        Image:              icr.io/codeengine/hello (pinned to f0dc03)
        Running Instances:  1
    
    Runtime:
        Concurrency:    100
        Maximum Scale:  10
        Minimum Scale:  0
        Timeout:        300
    
    Conditions:
        Type                 OK    Age  Reason
        ConfigurationsReady  true  57m
        Ready                true  57m
        RoutesReady          true  57m
    
    Events:
        Type    Reason   Age    Source              Messages
        Normal  Created  4m17s  service-controller  Created Configuration "myapp"
        Normal  Created  4m17s  service-controller  Created Route "myapp"
    
    Instances:
        Name                                     Revision     Running  Status   Restarts  Age
        myapp-00002-deployment-8495f8ccb9-kmc57  myapp-00002  3/3      Running  0         16m
    
  3. application get 명령을 다시 실행하여 Running instances의 값이 0으로 스케일링되었는지 확인하십시오. 애플리케이션 실행이 완료되면 --min-scale 옵션이 0(기본값)으로 설정된 경우 실행 중인 인스턴스 수가 자동으로 0으로 스케일링됩니다.

    ibmcloud ce application get -n myapp
    

    출력 예

    [...]
    URL:                https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    Cluster Local URL:  http://myapp.4svg40kna19.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
    
    Environment Variables:    
        Type     Name             Value  
        Literal  CE_API_BASE_URL  https://api.private.us-south.codeengine.cloud.ibm.com
        Literal  CE_APP           myapp  
        Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
        Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
        Literal  CE_REGION        us-south  
        Literal  CE_SUBDOMAIN     abcdabcdab
        Literal  TARGET           Stranger
    Image:                  icr.io/codeengine/hello
    
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    
    Revisions:
    myapp-huv70-2
        Age:                13m
        Traffic:            100%
        Image:              icr.io/codeengine/hello (pinned to 548d5c)
        Running Instances:  0
    
    Runtime:
        Concurrency:         100
        Maximum Scale:       10
        Minimum Scale:       0
        Timeout:             300
    
    Conditions:
        Type                 OK    Age  Reason
        ConfigurationsReady  true  13m
        Ready                true  13m
        RoutesReady          true  13m
    
    Events:
        Type    Reason   Age    Source              Messages
        Normal  Created  4m17s  service-controller  Created Configuration "myapp"
        Normal  Created  4m17s  service-controller  Created Route "myapp"
    
    Instances:
        Name                                       Revision       Running  Status       Restarts  Age
        myapp-00002-deployment-8495f8ccb9-kmc57    myapp-00002    3/3      Running      0         16m
    

    애플리케이션이 0으로 스케일링되었습니다.

  4. 애플리케이션을 다시 호출하여 0에서 스케일링하십시오.

  5. application get 명령을 다시 실행하고 0에서 스케일링된 Running instances 값 및 인스턴스에 대한 정보가 표시되었는지 확인하십시오.

    ibmcloud ce application get -n myapp
    

    출력 예

    Name:          myapp
    [...]
    URL:                https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    Cluster Local URL:  http://myapp.4svg40kna19.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
    
    Environment Variables:    
        Type     Name             Value  
        Literal  CE_API_BASE_URL  https://api.private.us-south.codeengine.cloud.ibm.com
        Literal  CE_APP           myapp  
        Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
        Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
        Literal  CE_REGION        us-south  
        Literal  CE_SUBDOMAIN     abcdabcdab
        Literal  TARGET           Stranger
    Image:                  icr.io/codeengine/hello
    
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    
    Revisions:
    myapp-huv70-2:
        Age:                3h11m
        Traffic:            100%
        Image:              icr.io/codeengine/hello (pinned to f0dc03)
        Running Instances:  1
    
    Runtime:
        Concurrency:    100
        Maximum Scale:  10
        Minimum Scale:  0
        Timeout:        300
    
    Conditions:
        Type                 OK    Age    Reason
        ConfigurationsReady  true  3h10m
        Ready                true  3h10m
        RoutesReady          true  3h10m
    
    Events:
        Type    Reason   Age    Source              Messages
        Normal  Created  4m17s  service-controller  Created Configuration "myapp"
        Normal  Created  4m17s  service-controller  Created Route "myapp"
    
    Instances:
        Name                                     Revision     Running  Status   Restarts  Age
        myapp-00002-deployment-8495f8ccb9-kmc57  myapp-00002  3/3      Running  0         16m
    

애플리케이션이 다시 스케일링됩니다.

앱 스케일링에 대한 자세한 정보는 애플리케이션 스케일링 구성을 참조하십시오.

다음 단계

앱이 배치되면 앱 작성 방식이나 이전의 업데이트 방식에 관계없이 다음 방법 중 하나배치된 앱을 업데이트하고 참조 코드를 업데이트할 수 있습니다.

  • 컨테이너 이미지가 있는 경우 OCI(오픈 컨테이너 이니셔티브)표준에 따라 앱을 배포할 때 컨테이너 레지스트리의 위치를 가리키는 이미지에 대한 참조만 제공하면 됩니다. 공용 레지스트리 또는 개인용 레지스트리 의 이미지를 사용하여 앱을 배치할 수 있습니다.

    app create 명령을 사용하여 앱을 작성하고 로컬 또는 저장소 소스에서 컨테이너 이미지를 빌드하도록 --build-source 옵션을 지정했으며 다른 컨테이너 이미지를 가리키도록 앱을 변경하려는 경우에는 먼저 앱에서 빌드의 연관을 제거해야 합니다. 예를 들어, ibmcloud ce application update -n APP_NAME --build-clear 를 실행하십시오. 앱에서 빌드의 연관을 제거한 후 다른 이미지를 참조하도록 앱을 업데이트할 수 있습니다.

  • Git 저장소에 있는 소스 코드로 시작하는 경우, Code Engine에서 한 번의 오퍼레이션으로 소스에서 이미지를 빌드하고 앱을 배치하도록 선택할 수 있습니다. 이 경우 Code Engine은 이미지를 IBM Cloud® Container Registry에 업로드합니다. 자세한 정보는 저장소 소스 코드에서 앱 배치를 참조하십시오. 이미지 빌드를 더 많이 제어하려면 앱을 배치하기 전에 Code Engine을 사용하여 이미지를 빌드하도록 선택할 수 있습니다.

  • 로컬 워크스테이션에 있는 소스 코드로 시작하는 경우, Code Engine에서 하나의 CLI 명령으로 소스에서 이미지를 빌드하고 앱을 배치하도록 선택할 수 있습니다. 이 경우 Code Engine은 이미지를 IBM Cloud® Container Registry에 업로드합니다. 자세한 정보는 CLI를 사용하여 로컬 소스 코드에서 앱 배치를 참조하십시오. 이미지 빌드를 더 많이 제어하려면 앱을 배치하기 전에 Code Engine을 사용하여 이미지를 빌드하도록 선택할 수 있습니다.

    예를 들어, 사용자가 앱에 대한 소스 개발을 진행하는 동안 Code Engine에서 로컬 소스의 빌드를 처리하도록 선택할 수 있습니다. 그런 다음 이미지가 만기되면 원하는 특정 이미지를 참조하도록 배치된 앱을 업데이트할 수 있습니다. 이 프로세스는 필요에 따라 반복할 수 있습니다.

업데이트된 앱을 배치할 때 이미지에 대해 태그를 지정하지 않는 한 참조된 컨테이너 이미지의 최신 버전이 다운로드되어 배치됩니다. 이미지에 대해 태그를 지정한 경우 태그 지정된 이미지가 배치에 사용됩니다.

더 많은 코드 예를 찾고 계십니까? Samples for IBM Cloud Code Engine GitHub 저장소를 확인하십시오.