Hosted Targets 작업

현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서로 이동
정보

호스팅된 대상 프록시 배포 취소

호스팅된 타겟 애플리케이션이 포함된 Edge 프록시를 배포 해제하면 연결된 호스팅된 타겟 앱은 배포 해제되지만 기본 애플리케이션 이미지는 삭제되지 않습니다. 프록시를 다시 배포하면 호스팅된 타겟 앱이 다시 배포됩니다.

Hosted 대상 프록시 삭제

호스팅된 타겟 프록시를 삭제하면 기본 런타임 인스턴스가 일정 시간 내에 실행을 중지합니다. 그러나 애플리케이션 코드는 유지됩니다.

로그 파일 액세스

로그 파일은 디버깅 및 문제 해결에 유용합니다. 호스팅된 타겟 배포의 두 가지 유형의 로그 파일을 볼 수 있습니다.

  • 빌드 로그 - 호스팅된 대상 앱의 배포 및 빌드와 관련된 출력을 보여줍니다.
  • 런타임 로그 - 실행 중인 호스팅된 대상 앱과 관련된 출력을 표시합니다. 런타임 로그 범위는 환경으로 지정되며 현재 배포된 프록시 버전의 로그 정보를 표시합니다.

Edge UI에서 로그 액세스

  1. apigee.com/edge로 이동합니다.
  2. 로그인 사용자 인증 정보를 입력하고 로그인을 클릭합니다.
  3. 측면 탐색 메뉴에서 개발 > API 프록시를 선택합니다.
  4. 로그를 보려는 프록시를 선택합니다.
  5. 개발 탭을 클릭합니다.
  6. 빌드 로그를 보려면 빌드 로그를 클릭합니다.
  7. 런타임 로그를 보려면 런타임 로그를 클릭합니다.

API로 로그 액세스

Edge API를 사용하여 호스팅된 타겟 로그를 가져올 수도 있습니다. 자세한 내용은 캐시된 Node.js 로그 가져오기를 참고하세요.

비공개 npm 저장소 사용

이 섹션에서는 개발 환경에서 비공개 NPM 저장소를 사용하는 경우 호스팅된 대상에 Node.js 프록시를 배포하는 방법을 설명합니다.

비공개 저장소 사용에 관해 알아야 할 사항

Node.js 앱을 Edge에 배포하면 배포 프로세스의 일부로 모든 프로젝트의 종속 항목을 자동으로 가져옵니다. 기본적으로 호스팅된 대상은 배포 시 코드에서 npm install를 실행합니다. 하지만 개발 환경에서 비공개 NPM 저장소를 사용하는 경우 비공개 종속 항목을 클라우드에서 확인할 수 없습니다. 이 경우 배포 유틸리티 apigeetool을 사용할 때 --bundled-dependencies 옵션을 사용하는 것이 해결 방법입니다. 시스템에서 Edge에 Node.js 배포도 참조하세요.

apigeetool에서 --bundled-dependencies 플래그를 사용하면 Node.js 앱이 호스팅된 타겟에 업로드되고 package.jsonbundledDependencies 배열에 나열된 모든 로컬/비공개 파일이 압축되어 번들과 함께 업로드됩니다.

일반적인 상황은 아니지만 공개 NPM 저장소를 내부적으로 미러링하는 경우 배포 번들에 비공개 미러를 가리키는 .npmrc 또는 package-lock.json 파일이 포함되어 있으면 배포가 실패합니다. 이 경우 배포하려는 프록시 번들에서 .npmrc 또는 package-lock.json를 생략해야 합니다.

비공개 NPM 저장소를 사용하여 배포

비공개 NPM 저장소에서 제공된 모듈을 사용하려면 다음 단계를 따르세요.

  1. npm에 로그인합니다.
    npm login
  2. npm 인증 토큰을 가져옵니다.
    1. .npmrc를 찾습니다 (~/.npmrc에 있음).
    2. .npmrc에서 줄 끝에 있는 토큰을 확인합니다.

      //registry.npmjs.org/:_authToken=****
    3. 또는 npm token <list | create | revoke> 명령어를 사용하여 인증 토큰을 나열, 생성 또는 취소합니다. 자세한 내용은 npm-token 문서를 참고하세요.
  3. 아래 설명에 따라 키-값 맵 구성 페이지에 액세스합니다.

    Edge

    Edge UI를 사용하여 키-값 맵 구성 페이지에 액세스하려면 다음 안내를 따르세요.

    1. apigee.com/edge에 로그인합니다.
    2. 왼쪽 탐색 메뉴에서 관리 > 환경 > 키-값 맵을 선택합니다.

    Classic Edge (Private Cloud)

    기본 Edge UI를 사용하여 키-값 맵 구성 페이지에 액세스하려면 다음 안내를 따르세요.

    1. http://ms-ip:9000에 로그인합니다. 여기서 ms-ip는 관리 서버 노드의 IP 주소 또는 DNS 이름입니다.
    2. 상단 탐색 메뉴에서 API > 환경 구성 > 키-값 맵을 선택합니다.
  4. + 키 값 맵을 클릭합니다.
  5. 새 키 값 맵 대화상자에서 이름을 입력하고 암호화됨을 선택합니다.
  6. 추가를 클릭합니다.
  7. 이전에 찾았거나 만든 인증 토큰을 방금 만든 각 KVM에 새 항목으로 추가합니다.
  8. app.yaml 파일에 npm 인증 토큰과 연결된 KVM 및 키를 참조하는 항목을 추가합니다. 예를 들면 다음과 같습니다.
  9. env:
    - name: NPM_TOKEN
     valueRef:
       name: npm_store
       key: private_token

    각 항목의 의미는 다음과 같습니다.

    • 최상위 name 속성은 생성될 환경 변수의 이름에 해당합니다.
    • valueRef 아래의 name은 이전에 만든 KVM에 해당합니다.
    • key 속성은 KVM에 추가한 npm 토큰에 매핑되는 키에 해당합니다.
  10. package.json과 동일한 디렉터리에 .npmrc 파일을 만듭니다. 이 파일은 다음과 같이 표시됩니다.
    //registry.npmjs.org/:_authToken=${NPM_TOKEN}
    registry.npmjs.org를 사용하지 않는 경우 다음과 같은 줄을 추가하여 .npmrc 파일에서 범위를 설정할 수 있습니다.@myscope:registry=https://mycustomregistry.example.org npmrc 문서도 참고하세요.
  11. .npmrc 파일과 app.yaml 파일이 포함된 Node.js 프록시를 업로드하거나 업데이트합니다.
  12. 새 프록시 또는 업데이트된 프록시가 원하는 비공개 저장소 모듈로 배포되고 작동하는지 확인합니다.
  13. 프록시가 배포되지 않으면 빌드 로그에서 비공개 npm 모듈 설치에 실패했는지 확인하세요. 이 경우 다음 단계를 따르세요.
    1. 개발 탭에서 .npmrc가 있는지 확인합니다.
    2. 토큰이 유효한지 확인합니다. kvm에 있는 토큰으로 모듈을 로컬에 설치해 봅니다.
    3. 맞춤 범위를 사용하는 경우 맞춤 범위가 설정되어 있는지 확인합니다.

번들된 종속 항목의 NPM 버전 지정

기본적으로 NPM v4는 호스팅된 타겟 환경에서 번들 종속 항목을 설치하는 데 사용됩니다. 그러나 다른 NPM 버전을 사용하려면 NPM_VERSION 환경 변수에 지정하면 됩니다. 이 변수는 애플리케이션의 매니페스트 파일에서 설정할 수 있습니다. 자세한 내용은 매니페스트 파일 요소를 참고하세요.

번들 종속 항목을 사용하는 경우 NPM_VERSION을 지정하지 않으면 호스팅된 대상이 기본적으로 NPM v4를 사용합니다. 번들 종속 항목을 사용하지 않는 경우 지정된 Node.js 런타임에 포함된 NPM 버전이 사용됩니다.

번들로 묶인 종속 항목 예시

호스팅된 대상이 있는 번들 종속 항목 기능을 보여주는 예는 커스텀 모듈을 사용하여 호스팅된 함수로 Node.js 애플리케이션을 만드는 방법을 참조하세요.

상태 점검 엔드포인트 추가

Node.js 애플리케이션에 상태 확인 엔드포인트를 구현할 수 있습니다. Apigee는 Node.js 애플리케이션이 애플리케이션이 컨테이너에서 실행 중인지 확인하기 시작할 때 이 엔드포인트를 사용합니다.

기본적으로 Apigee에서 예상하는 엔드포인트는 /health입니다. HOSTED_TARGET_HEALTH_CHECK_PATH이라는 환경 변수에 엔드포인트를 지정하여 기본 엔드포인트를 변경할 수 있습니다. 애플리케이션의 매니페스트 파일에서 이 변수를 설정할 수 있습니다. 자세한 내용은 매니페스트 파일 요소를 참고하세요.

상태 점검 엔드포인트를 구현할 필요는 없습니다. 하지만 상태 확인 엔드포인트를 구현하는 경우 다음 사항에 유의하세요.

  • Apigee가 엔드포인트에 도달할 때 애플리케이션이 종료되면 애플리케이션이 예상대로 시작되지 않습니다.
  • 엔드포인트가 404 Not Found HTTP 상태를 반환해도 괜찮습니다. /health 또는 HOSTED_TARGET_HEALTH_CHECK_PATH는 애플리케이션이 실행 중인지 확인하는 용도로만 사용됩니다. 실제 응답은 무시됩니다.

NPM 캐시 위치 변경

최신 버전의 Node.js는 NPM 캐시에 /root/.npm를 사용하는 NPM 버전을 사용합니다. 이 위치는 호스팅된 타겟 런타임에서 /tmp만 쓸 수 있는 tmpfs 파일 시스템을 사용하므로 디렉터리 위치가 읽기 전용이라는 점에서 호스팅된 타겟에 문제가 됩니다. 이 문제를 해결하려면 애플리케이션의 app.yaml파일(매니페스트 파일)에서 npm_config_cache 환경 변수를 /tmp 내 디렉터리로 설정하면 됩니다. 예를 들면 다음과 같습니다.

  runtime: node
  application: my-express-app
  env:
    - name: npm_config_cache
      value: /tmp/.npm
    - name: NODE_ENV
      value: production
    - name: LOG_LEVEL
      value: 3
  

NPM 없이 애플리케이션 실행

기본적으로 호스팅된 타겟은 npm start를 사용하여 호스팅된 타겟 애플리케이션을 실행합니다. 하지만 이전 작업에서 NPM을 사용할 때 발생하는 문제를 설명했습니다. 최신 버전에서는 NPM 캐시용으로 /root/.npm를 사용하려고 시도하는데, 이 캐시는 쓸 수 없으며 호스팅된 타겟이 시작되지 않는 결과를 초래합니다. 이전 작업을 통해 이 문제를 해결할 수 있지만 NPM 없이 애플리케이션을 실행하는 것도 또 다른 방법입니다. 이렇게 하려면 애플리케이션의 app.yaml파일 (매니페스트 파일)에서 commandargs 값을 사용하고 node index.js를 사용하여 호스팅된 타겟을 직접 실행하면 됩니다. 예를 들면 다음과 같습니다.

  runtime: node
  application: my-express-app
  command: node
  args:
    - index.js
  env:
    - name: NODE_ENV
      value: production
    - name: LOG_LEVEL
      value: 3
  
물론 적절하다고 생각되는 명령어를 사용해도 되며 node index.js는 단지 예시일 뿐입니다.