Code Engine에서 앱 작업

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

시작하기 전에

Code Engine에서 제공되는 보안 기능은 Code Engine 및 보안 을 참조하십시오.

Code Engine은 사용자 정의 리소스 정의(CRD) 메소드를 제공합니다. 자세한 정보는 CRD 메소드 제공 을 참조하십시오.

어떤 유형의 Code Engine 워크로드를 만들어야 할지 잘 모르시겠어요? Code Engine 플랜을 참조하십시오.

코드를 Code Engine 애플리케이션 컴포넌트로 실행하려면 어떻게 해야 합니까?

코드가 로컬 파일이나 Git 리포지토리에 소스로 존재하든, 공개 또는 비공개 레지스트리에 존재하는 컨테이너 이미지이든, Code Engine 에서는 코드를 앱으로 실행할 수 있는 간소화된 방법을 제공합니다.

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

  • 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 는 애플리케이션 리비전의 수명 동안 이 다이제스트를 사용합니다. 원래 이미지와 동일한 태그를 사용하여 새 버전의 이미지를 작성하는 경우, 원래 이미지는 컨테이너 레지스트리에서 겹쳐써지고 태그가 지정되지 않습니다. 새 이미지에 태그가 지정되고 이 새 이미지에는 다른 요약이 있습니다. Code Engine 애플리케이션은 최신 이미지가 애플리케이션 리비전에서 참조하는 이미지와 다른 다이제스트를 가지고 있기 때문에 이 최신 이미지를 사용하지 않습니다. Code Engine 원래 참조했던 태그가 없는 이미지가 여전히 존재하는 한 애플리케이션 리비전의 새 인스턴스를 계속 만들 수 있습니다. 자세한 내용은 다음을 참조하세요 Code Engine 이미지를 가져올 수 없는 이유는 무엇인가요?

애플리케이션의 기본 URL 은 https://<appname>.<uuid>.<region>.codeengine.appdomain.cloud 형식이며, appname 은 앱 이름, uuid 은 자동으로 생성된 고유 식별자, region 은 Code Engine 프로젝트가 위치한 지역입니다. 애플리케이션의 URL 의 UUID 부분은 aaaabbbbccc 형식입니다. 자동으로 생성된 애플리케이션( URL )은 애플리케이션의 프로젝트 수명 주기 동안 지속됩니다.

지역별로 애플리케이션에 액세스하는 엔드포인트에 대한 자세한 정보는 애플리케이션에 액세스하기 위한Code Engine 엔드포인트 를 참조하십시오.

Code Engine에서 앱의 포트에 대해 알아야 하는 사항은 무엇입니까?

기본적으로 Code Engine에서는 앱이 포트 8080에서 수신 연결을 청취한다고 가정합니다. 또한 Code Engine 은 PORT 환경 변수를 애플리케이션이 수신 대기할 것으로 예상되는 포트 값으로 설정합니다. --port 앱이 포트 8080 이외의 포트에서 수신 대기해야 하는 경우 콘솔에서 앱을 배포하고 올바른 포트를 지정하거나 app create 명령어를 사용하세요. Code Engine에서 설정한 환경 변수에 대한 자세한 정보는 자동으로 삽입된 환경 변수를 참조하십시오. 다음 포트는 Code Engine에 의해 예약됩니다. 8022, 8008, 8012, 9090, 909115090. 하나의 포트만 청취 포트로 노출될 수 있습니다.

인터넷에서 HTTP 을 통해 Code Engine 으로의 인바운드 연결은 포트 80 를 사용합니다. 인터넷 사용 포트 HTTPS 을 통해 Code Engine 로의 인바운드 연결 443

포트 스캔이 더 많은 열린 포트를 표시하는 경우 내 포트 스캔이 예상보다 더 많은 열린 포트를 표시하는 이유는 무엇입니까 를 참조하십시오.

HTTP 처리에 대한 고려사항

애플리케이션(또는 작업)을 사용할 때 Code Engine의 기본 HTTP 처리를 알고 있으면 도움이 됩니다.

  • HTTP를 사용하는 수신 애플리케이션 연결의 경우, TLS(Transport Layer Security) 측면은 애플리케이션 코드 외부에서 Code Engine을 통해 자동으로 관리됩니다. 애플리케이션용 HTTP 서버는 HTTPS 연결이 아닌 HTTP 연결에만 관심을 두어야 합니다. 특히 Code Engine 는 IBM Cloud 에서 Cloud Internet Services (CIS) 을 사용하는데, 이는 계층 4의 DNS 및 DDOS 보호를 위한 침입 방지 시스템(IPS)으로 CloudFlare, 을 기반으로 합니다. IPS에서 설정된 TCP/IP 연결은 Cloudflare가 소유하고 관리합니다. 자세한 정보는 Cloudflare 문서를 참조하십시오.

  • Code Engine 애플리케이션에 바인딩된 인터넷 연결은 HTTPS를 사용하도록 자동으로 경로 재지정됩니다.

  • 애플리케이션에서 다른 Code Engine 애플리케이션으로의 아웃바운드 연결은 TLS로 자동 보호됩니다. Code Engine은 이 연결을 자동으로 관리하므로 사용되는 프로토콜(또는 URL)은 HTTPS가 아니라 HTTP입니다.

  • 애플리케이션에서 비Code Engine 애플리케이션(예: 인터넷)으로의 아웃바운드 연결은 앱 코드 또는 URL에 지정된 프로토콜에 따라 HTTP 또는 HTTPS를 사용합니다.

  • 일괄처리 작업에서의 아웃바운드 연결은 작업 코드 또는 URL에 지정된 HTTP 또는 HTTPS 프로토콜을 사용합니다. 이 동작에는 일괄처리 작업에서 Code Engine 앱으로의 연결이 포함됩니다.

Code Engine 애플리케이션의 가시성 옵션

Code Engine 을 사용하여 요청 수신에 사용할 수 있는 엔드포인트 또는 시스템 도메인 매핑을 정의하여 애플리케이션에 적합한 가시성 수준을 결정할 수 있습니다.

모든 애플리케이션에는 동일한 Code Engine 프로젝트 내의 모든 구성 요소에 표시되지만 프로젝트 외부에는 표시되지 않는 내부 시스템 도메인 매핑이 있습니다. 내부 시스템 도메인 맵핑 외에도 공용 인터넷 또는 IBM Cloud 사설 네트워크에 애플리케이션을 표시하도록 선택합니다.

공개 또는 비공개 가시성을 위해 애플리케이션은 HTTPS 엔드포인트에 노출됩니다. 사용되는 TLS 인증서에 대한 자세한 내용은 Code Engine 프로젝트용 TLS 인증서를 참조하세요.

다음과 같은 가시성 수준으로 애플리케이션을 배포할 수 있습니다:

애플리케이션 가시성
설정 설명
내부(프로젝트) 이 설정을 사용하는 앱은 동일한 Code Engine 프로젝트의 컴포넌트에서 요청을 수신할 수 있습니다. 내부(프로젝트) 엔드포인트를 설정하면 공용 인터넷에서 앱에 액세스할 수 없으며 동일한 Code Engine 프로젝트 내에서 실행 중인 다른 Code Engine 컴포넌트에서만 네트워크 액세스가 가능합니다. 이 엔드포인트는 항상 사용 가능합니다.
public 이 설정을 사용하는 앱은 인터넷과 Code Engine 프로젝트에 노출됩니다. 공용 엔드포인트를 설정하면 앱이 공용 인터넷 또는 Code Engine 프로젝트 내의 컴포넌트로부터 요청을 수신할 수 있습니다. 이 설정은 기본값입니다.
개인용 이 설정을 사용하는 앱은 IBM Cloud 사설 네트워크와 Code Engine 프로젝트에 노출됩니다. 비공개 엔드포인트를 설정하면 공용 인터넷에서는 앱에 액세스할 수 없으며, 동일한 프로젝트에서 실행 중인 가상 사설 엔드포인트(VPE) 또는 Code Engine 구성 요소를 사용하여 다른 IBM Cloud 서비스에서만 네트워크에 액세스할 수 있습니다.

애플리케이션 가시성에 대한 엔드포인트 설정은 앱을 작성하여 배치하거나 업데이트할 때 콘솔 또는 CLI에서 설정할 수 있습니다.

공용 엔드포인트를 사용하여 앱 배치

앱을 배포할 때 기본적으로 애플리케이션은 공용 인터넷 또는 동일한 Code Engine 프로젝트 내의 구성 요소에서 요청을 수신할 수 있도록 배포됩니다. 이 경우 앱은 공용 엔드포인트를 사용하여 배치됩니다.

사설 엔드포인트를 사용하여 앱 배치

앱이 사설 엔드포인트를 사용하여 배치되도록 앱의 엔드포인트 가시성을 설정할 수 있습니다. 비공개 엔드포인트를 설정하면 공용 인터넷에서는 앱에 액세스할 수 없으며 동일한 프로젝트(클러스터-로컬)에서 실행 중인 다른 IBM Cloud 서비스(가상 사설 엔드포인트) 또는 Code Engine 구성 요소(클러스터-로컬)에서만 네트워크에 액세스할 수 있습니다.

예를 들어, 솔루션이 자체 가상 사설 엔드포인트 내의 IBM Cloud Kubernetes Service Kubernetes 클러스터에서 실행 중인 컴포넌트로 구성되어 있고 IBM Cloud 사설 네트워크에서 Code Engine 애플리케이션에 액세스하려는 경우, 애플리케이션의 가시성을 private으로 설정할 수 있습니다. 앱의 공개 범위가 비공개로 설정되어 있으면 공용 인터넷을 통해 앱에 액세스할 수 없습니다. 애플리케이션은 프로젝트 내의 다른 애플리케이션에서 계속 액세스할 수 있습니다.

앱이 IBM Cloud 사설 네트워크를 통해서만 노출되고 외부 인터넷에는 노출되지 않도록 사설 엔드포인트를 사용하여 애플리케이션을 배치할 수 있습니다. 내부 네트워크 내에서 공유 컴포넌트를 통해 애플리케이션에 계속 연결할 수 있으며 애플리케이션 엔드포인트를 보안 설정해야 합니다.

CLI를 사용할 경우 app create 또는 app update 명령에서 --visibility=private 옵션을 사용하여 사설 엔드포인트로 배치되도록 앱의 엔드포인트 가시성을 설정하십시오. app get 명령을 사용하면 엔드포인트 정의를 반영하는 사용 가능한 앱 URL을 가져올 수 있습니다.

콘솔에서 앱을 만들 때 엔드포인트 설정을 사용하여 앱의 엔드포인트 가시성을 설정합니다. 앱이 배치된 후 애플리케이션 페이지의 도메인 맵핑 탭에서 이러한 시스템 도메인 맵핑 설정을 보고 수정할 수 있습니다.

사설 네트워크를 통한 연결에 대한 자세한 정보는 Code Engine에서 가상 사설 엔드포인트 사용을 참조하십시오.

프로젝트 엔드포인트를 사용하여 앱 배치

앱이 내부(프로젝트) 엔드포인트와 함께 배포되도록 앱의 엔드포인트 가시성을 설정할 수 있습니다. 프로젝트 전용 엔드포인트를 설정하면 공용 인터넷에서 앱에 액세스할 수 없으며 동일한 Code Engine 프로젝트 내에서 실행 중인 다른 Code Engine 구성 요소에서만 네트워크에 액세스할 수 있습니다. 이 엔드포인트는 항상 사용 가능합니다. 애플리케이션은 공유 컴포넌트를 통해 계속 액세스 가능하므로 보안 설정이 필요합니다.

예를 들어, 솔루션이 한 프로젝트 내의 여러 애플리케이션으로 구성된 경우 해당 애플리케이션 중 하나만 인터넷에서 볼 수 있도록 솔루션을 설정하여 수신 트래픽을 처리할 수 있습니다. 이 공용 애플리케이션은 인터넷에서 볼 수 없도록 솔루션의 다른 애플리케이션에 작업을 위임할 수 있습니다.

CLI를 사용할 경우 app create 또는 app update 명령에서 --visibility=project 옵션을 사용하여 프로젝트 엔드포인트로 배치되도록 앱의 엔드포인트 가시성을 설정하십시오. app get 명령을 사용하면 엔드포인트 정의를 반영하는 사용 가능한 앱 URL을 가져올 수 있습니다.

콘솔에서 앱을 만들 때 엔드포인트 설정을 사용하여 앱의 엔드포인트 가시성을 설정합니다. 앱이 배치된 후 애플리케이션 페이지의 도메인 맵핑 탭에서 이러한 시스템 도메인 맵핑 설정을 보고 수정할 수 있습니다.

Code Engine 애플리케이션을 배치하기 위한 옵션

앱을 배치할 때 지정할 수 있는 옵션에 대해 알아봅니다. 옵션은 콘솔 또는 CLI를 사용하는지에 따라 다를 수 있습니다.

메모리 및 CPU

앱을 배치할 때 앱에서 이용할 수 있는 메모리 및 CPU의 양을 지정할 수 있습니다. CPU 및 메모리의 양은 앱이 컴퓨팅 집약적 또는 메모리 집약적인지 아니면 균형을 이루고 있는지에 따라 다를 수 있습니다.

기본적으로 애플리케이션에는 4G 메모리와 1개의 vCPU가 지정됩니다. 메모리 및 CPU 선택에 대한 자세한 정보는 지원되는 메모리와 CPU 조합을 참조하십시오.

명령 및 인수를 사용하여 앱 배치

런타임 시 애플리케이션에서 사용할 명령 및 인수를 정의할 수 있습니다.

--cmd--arg 옵션을 app create 명령에 추가하여 애플리케이션에 대한 명령 및 인수를 정의하십시오.

ibmcloud ce app create --name myapp --image icr.io/codeengine/hello --cmd /myapp --arg --debug

cmdarg 사용에 대한 자세한 정보는 Code Engine 워크로드에 대한 명령 및 인수 정의를 참조하십시오.

환경 변수를 사용하여 앱 작성 및 실행

런타임 시 애플리케이션이 사용할 수 있는 키-값 쌍으로서 환경 변수를 정의하고 설정할 수 있습니다.

애플리케이션을 작성할 때 또는 콘솔에서 또는 CLI를 사용하여 기존 애플리케이션을 업데이트할 때 환경 변수를 정의할 수 있습니다.

환경 변수 정의에 대한 자세한 정보는 환경 변수 작업을 참조하십시오.

Code Engine은 특정 환경 변수를 앱에 자동으로 삽입합니다. 자동으로 삽입된 환경 변수에 대한 자세한 정보는 자동으로 삽입된 환경 변수를 참조하십시오.

시크릿 및 configmap 사용 시 앱 작성 및 실행

Code Engine에서 시크릿 및 configmap은 환경 변수를 사용하여 애플리케이션이 이용할 수 있습니다.

시크릿과 configmap 모두는 키-값 쌍입니다. 환경 변수로 맵핑되면, 환경 변수 이름이 해당 맵에 있는 각 항목의 "키"에 해당하고, 환경 변수 값은 해당 키의 "값"인 것과 같이 NAME=VALUE 관계가 설정됩니다.

애플리케이션은 환경 변수를 사용하여 configmap(또는 시크릿)을 완전히 참조하거나 configmap(또는 시크릿)에 있는 개별 키를 참조할 수 있습니다.

자세한 정보는 환경 변수를 사용하여 시크릿 참조환경 변수를 사용하여 configmap 참조를 참조하십시오.

애플리케이션 할당량에 대한 고려사항

애플리케이션, 기능 및 일괄처리 작업에 대해 작업할 때 이러한 자원은 Code Engine 프로젝트의 컨텍스트 내에서 실행됩니다. 자원 할당량은 프로젝트별로 정의되며 애플리케이션, 기능 및 일괄처리 작업에 대한 제한이 적용됩니다.

Code Engine 한계에 대한 자세한 정보는 Code Engine의 한계 및 할당량을 참조하십시오.

다음 단계

이제 Code Engine 애플리케이션에 대한 작업의 주요 개념에 익숙하므로 앱을 배치하고 이에 대해 작업할 준비가 되었습니까? 다음을 참조하십시오.

앱 작업에 대한 자세한 내용은 다음을 참조하세요