플러그인 사용

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

Edge Micro Gateway v. 3.0.x

대상

이 주제는 마이크로 게이트웨이와 함께 설치된 기존 플러그인을 사용하려는 Edge Micro게이트웨이 운영자를 대상으로 합니다. 또한 급증 저지 및 할당량 플러그인 (둘 다 설치에 포함되어 있음)에 대해서도 자세히 설명합니다. 새로운 플러그인을 개발하려는 개발자라면 커스텀 플러그인 개발을 참고하세요.

Edge Micro Gateway 플러그인이란 무엇인가요?

플러그인은 Edge Micro Gateway에 기능을 추가하는 Node.js 모듈입니다. 플러그인 모듈은 일관된 패턴을 따르며 Edge Micro Gateway에 알려진 위치에 저장되므로 마이크로 게이트웨이가 자동으로 검색하고 로드할 수 있습니다. Edge Micro Gateway에는 여러 기존 플러그인이 포함되어 있으며 커스텀 플러그인 개발의 설명대로 커스텀 플러그인을 만들 수도 있습니다.

Edge Micro Gateway와 함께 번들로 제공되는 기존 플러그인

일부 기존 플러그인은 설치 시 Edge Micro Gateway와 함께 제공됩니다. 여기에는 다음이 포함됩니다.

플러그인 기본적으로 사용 설정됨 설명
분석 지원됨 Edge Micro Gateway에서 Apigee Edge로 분석 데이터를 전송합니다.
oauth 지원됨 Edge Micro Gateway에 OAuth 토큰 및 API 키 검증이 추가되었습니다. Edge Micro Gateway 설정 및 구성을 참조하세요.
할당량 No Edge Micro Gateway에 대한 요청에 할당량을 적용합니다. Apigee Edge를 사용하여 할당량을 저장하고 관리합니다. 할당량 플러그인 사용을 참조하세요.
spikearrest No 트래픽 급증 및 DoS 공격으로부터 보호 급증 저지 플러그인 사용을 참조하세요.
헤더-대문자 No 개발자가 맞춤 플러그인을 작성하는 데 도움이 되는 가이드로, 주석이 달린 샘플 프록시입니다. Edge Microgateway 샘플 플러그인을 참조하세요.
누적-요청 No 플러그인 체인의 다음 핸들러에 데이터를 전달하기 전에 요청 데이터를 단일 객체에 누적합니다. 누적된 단일 요청 콘텐츠 객체에서 작동해야 하는 변환 플러그인을 작성하는 데 유용합니다.
누적-응답 No 플러그인 체인의 다음 핸들러에 데이터를 전달하기 전에 응답 데이터를 단일 객체에 누적합니다. 누적된 단일 응답 콘텐츠 객체에서 작동해야 하는 변환 플러그인을 작성하는 데 유용합니다.
변환-대문자 No 요청 또는 응답 데이터를 변환합니다. 이 플러그인은 변환 플러그인의 권장사항 구현을 나타냅니다. 예시 플러그인은 사소한 변환(요청 또는 응답 데이터를 대문자로 변환)을 수행하지만, XML에서 JSON으로의 등 다른 종류의 변환을 수행하도록 쉽게 조정할 수 있습니다.
json2xml No 수락 또는 콘텐츠 유형 헤더를 기반으로 요청 또는 응답 데이터를 변환합니다. 자세한 내용은 GitHub의 플러그인 문서를 참조하세요.
quota-memory No Edge Micro Gateway에 대한 요청에 할당량을 적용합니다. 로컬 메모리에 할당량을 저장하고 관리합니다.
healthcheck No 메모리 사용량, CPU 사용량 등 Edge Micro게이트 프로세스에 대한 정보를 반환합니다. 플러그인을 사용하려면 Edge Microgateway 인스턴스에서 URL /healthcheck를 호출합니다. 이 플러그인은 자체 상태 확인 플러그인을 구현하는 데 사용할 수 있는 예시로 만들어졌습니다.

기존 플러그인 위치

Edge Micro Gateway와 함께 번들로 제공되는 기존 플러그인은 여기에 있으며, 여기서 [prefix]npm 프리픽스 디렉터리입니다. 이 디렉터리를 찾을 수 없으면 Edge Micro Gateway가 설치된 위치를 참조하세요.

[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins

플러그인 추가 및 구성

플러그인을 추가하고 구성하려면 다음 패턴을 따르세요.

  1. Edge Micro Gateway를 중지합니다.
  2. Edge Micro Gateway 구성 파일을 엽니다. 자세한 내용은 구성 변경에서 옵션을 확인하세요.
  3. 다음과 같이 구성 파일의 plugins:sequence 요소에 플러그인을 추가합니다. 플러그인은 이 목록에 표시된 순서대로 실행됩니다.
edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
     level: info
     dir: /var/tmp
     stats_log_interval: 60
  plugins:
     dir: ../plugins
     sequence:   
     - oauth
     - plugin-name
  1. 플러그인을 구성합니다. 일부 플러그인에는 구성 파일에서 구성할 수 있는 선택적 매개변수가 있습니다. 예를 들어 다음 스탠자를 추가하여 급증 저지 플러그인을 구성할 수 있습니다. 자세한 내용은 급증 저지 플러그인 사용을 참조하세요.
    edgemicro:
      home: ../gateway
      port: 8000
      max_connections: -1
      max_connections_hard: -1
      logging:
        level: info
        dir: /var/tmp
        stats_log_interval: 60
      plugins:
        dir: ../plugins
        sequence:
          - oauth
          - spikearrest
    spikearrest:
       timeUnit: minute
       allow: 10
    
  1. 파일을 저장합니다.
  2. 수정한 구성 파일에 따라 Edge Micro Gateway를 다시 시작하거나 새로고침합니다.

플러그인별 구성

이 디렉터리에 플러그인별 구성을 만들어 구성 파일에 지정된 플러그인 매개변수를 재정의할 수 있습니다.

[prefix]/lib/node_modules/edgemicro/node_modules/microgateway-plugins/config

여기서 [prefix]npm 프리픽스 디렉터리입니다. 이 디렉터리를 찾을 수 없으면 Edge Micro Gateway가 설치된 위치를 참조하세요.

plugins/<plugin_name>/config/default.yaml. 예를 들어 이 블록을 plugins/spikearrest/config/default.yaml에 넣으면 다른 구성 설정을 재정의합니다.

spikearrest:
   timeUnit: hour   
   allow: 10000   
   buffersize: 0

급증 저지 플러그인 사용

급증 저지 플러그인은 트래픽 급증을 방지합니다. Edge Micro Gateway 인스턴스에서 처리하는 요청 수를 제한합니다.

급증 저지 플러그인 추가

플러그인 추가 및 구성을 참조하세요.

급증 저지를 위한 샘플 구성

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
  plugins:
    dir: ../plugins
    sequence:
      - oauth
      - spikearrest
spikearrest:
   timeUnit: minute
   allow: 10
   bufferSize: 5

급증 저지 구성 옵션

  • timeUnit: 급증 저지 실행 기간이 재설정되는 빈도입니다. 유효한 값은 초 또는 분입니다.
  • allow: timeUnit 동안 허용할 최대 요청 수입니다. 여러 Edge Micro 프로세스를 실행하는 경우도 참조하세요.
  • bufferSize: (선택사항, 기본값 = 0) bufferSize > 0인 경우 급증 저지는 버퍼에 이 수의 요청을 저장합니다. 다음 실행 '기간'이 발생하는 즉시 버퍼링된 요청이 먼저 처리됩니다. 버퍼 추가도 참고하세요.

급증 체포는 어떻게 작동하나요?

급증 저지를 특정 수의 요청으로 제한하는 방법이 아니라 일반적으로 트래픽 급증으로부터 보호하는 한 가지 방법으로 생각하세요. API와 백엔드는 일정량의 트래픽을 처리할 수 있으며, 급증 저지 정책은 트래픽을 원하는 일반적인 양으로 원활히 처리하는 데 도움이 됩니다.

런타임 급증 저지 동작은 입력한 실제 분당 또는 초당 값에서 예상할 수 있는 것과 다릅니다.

예를 들어 다음과 같이 분당 요청 30개의 비율을 지정한다고 가정해 보겠습니다.

spikearrest:
   timeUnit: minute
   allow: 30

테스트에서는 1분 이내에 온다면 1초에 30개의 요청을 전송할 수 있다고 생각할 수 있습니다. 그러나 이 방법은 정책에서 설정을 적용하는 방식이 아닙니다. 생각해보면 일부 환경에서는 1초 안에 30개의 요청이 급증한 것으로 간주될 수 있습니다.

그렇다면 실제로는 무슨 일이 일어날까요? 급증 및 같은 동작을 방지하기 위해 급증 저지는 다음과 같이 설정을 더 작은 간격으로 나눠 허용되는 트래픽을 원활하게 처리합니다.

분당 요금

분당 요금은 허용된 초 간격으로 요청에 평탄화됩니다. 예를 들어 분당 30개의 요청은 다음과 같이 평활화됩니다.

60초 (1분) / 30 = 2초 간격 또는 2초마다 약 1개의 요청이 허용됩니다. 2초 이내에 두 번째 요청이 실패합니다. 또한 1분 이내에 31번째 요청이 실패합니다.

초당 속도

초당 속도는 밀리초 간격으로 허용되는 요청으로 평탄화됩니다. 예를 들어 초당 요청 10개는 다음과 같이 평활화됩니다.

1, 000밀리초 (1초) / 10 = 100밀리초 간격 또는 100밀리초마다 약 1개의 요청이 허용됩니다 . 100밀리초 이내의 두 번째 요청은 실패합니다. 또한 1초 이내에 11번째 요청이 실패합니다.

한도를 초과하는 경우

요청 수가 지정된 시간 간격 내에 한도를 초과하면 급증 저지 함수는 HTTP 503 상태와 함께 이 오류 메시지를 반환합니다.

{"error": "spike arrest policy violated"}

버퍼 추가

정책에 버퍼를 추가하는 옵션이 있습니다. 버퍼를 10으로 설정했다고 가정해 보겠습니다. 급증 저지 한도를 초과해도 API가 즉시 오류를 반환하지 않습니다. 대신 지정된 수까지 요청이 버퍼링되고, 버퍼링된 요청은 다음에 적절한 실행 기간이 제공되는 즉시 처리됩니다. 기본 bufferSize는 0입니다.

여러 Edge Micro 프로세스를 실행하는 경우

허용되는 요청 수는 실행 중인 Edge Micro worker 프로세스 수에 따라 다릅니다. 급증 저지에서는 작업자 프로세스당 허용되는 요청 수를 계산합니다. 기본적으로 Edge Micro 프로세스 수는 Edge Micro가 설치된 머신의 CPU 수와 동일합니다. 하지만 start 명령어에 --processes 옵션을 사용하여 Edge Micro를 시작할 때 작업자 프로세스 수를 구성할 수 있습니다. 예를 들어 특정 기간 동안 100개의 요청에서 급증 저지를 트리거하려는 경우 --processes 4 옵션으로 Edge Micro Gateway를 시작하는 경우 급증 저지 구성에서 allow: 25을 설정합니다. 일반적으로 allow 구성 매개변수를 '원하는 급증 저지 수 / 프로세스 수' 값으로 설정하는 것이 좋습니다.

할당량 플러그인 사용

할당량은 1시간, 1일, 1주, 1개월 동안 앱이 API에 제출할 수 있는 요청 메시지 수를 지정합니다. 앱이 할당량 한도에 도달하면 후속 API 호출이 거부됩니다. 급증 저지와 할당량의 차이점도 참조하세요.

할당량 플러그인 추가

플러그인 추가 및 구성을 참조하세요.

Apigee Edge의 제품 구성

API 제품을 구성하는 Apigee Edge UI에서 할당량을 구성합니다. 할당량으로 제한할 마이크로 게이트웨이 인식 프록시가 포함된 제품을 알아야 합니다. 이 제품을 개발자 앱에 추가해야 합니다. 개발자 앱의 키를 사용하여 인증된 API를 호출하면 해당 API 호출에 할당량이 적용됩니다.

  1. Apigee Edge 조직 계정에 로그인합니다.
  2. Edge UI에서 할당량을 적용할 마이크로 게이트웨이 인식 프록시와 연결된 제품을 엽니다.
    1. UI의 게시 메뉴에서 제품을 선택합니다.
    2. 할당량을 적용할 API가 포함된 제품을 엽니다.
    3. 수정을 클릭합니다.
    4. 할당량 필드에서 할당량 간격을 지정합니다. 예를 들어 1분마다 요청 100개입니다. 또는 2시간마다 50,000개의 요청입니다.

  1. 저장을 클릭합니다.
  2. 제품이 개발자 앱에 추가되었는지 확인하세요. 인증된 API 호출을 수행하려면 이 앱의 키가 필요합니다.

할당량 구성 샘플

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
  plugins:
    dir: ../plugins
    sequence:
      - oauth
      - quota

할당량 구성 옵션

할당량 플러그인을 구성하려면 다음 예와 같이 quotas 요소를 구성 파일에 추가합니다.

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
  plugins:
    dir: ../plugins
    sequence:
      - oauth
      - quota
quotas:
  bufferSize:
    hour: 20000
    minute: 500
    month: 1
    default: 10000
  useDebugMpId: true
  failOpen: true
  useRedis: true
  redisHost: localhost
  redisPort: 6379
  redisDb: 1
...
옵션 설명
buffersize (정수) 지정된 시간 간격에 설정할 버퍼 크기입니다. 허용되는 시간 단위는 hour, minute, day, week, month, default입니다. (추가됨: 버전 3.0.9)
failOpen 이 기능을 사용 설정한 경우 할당량 처리 오류가 발생하거나 Edge에 대한 '할당량 적용' 요청이 원격 할당량 카운터를 업데이트하지 못하면 다음에 원격 할당량 동기화가 성공할 때까지만 로컬 수를 기준으로 할당량이 처리됩니다. 두 경우 모두 요청 객체에 quota-failed-open 플래그가 설정됩니다. (추가됨: 버전 3.0.9)

할당량 'fail open' 기능을 사용 설정하려면 다음 구성을 설정합니다.

edgemicro:
...
quotas:
  failOpen: true
useDebugMpId 할당량 응답에서 MP(메시지 프로세서) ID의 로깅을 사용 설정하려면 이 플래그를 true로 설정합니다. (추가됨: 버전 3.0.9)

이 기능을 사용하려면 edgemicro-auth 프록시를 버전 3.0.7 이상으로 업데이트하고 다음 구성을 설정해야 합니다.

edgemicro:
...
quotas:
  useDebugMpId: true
...

useDebugMpId가 설정되면 Edge의 할당량 응답에 MP ID가 포함되며 Edge Micro Gateway에서 로깅합니다. 예를 들면 다음과 같습니다.

{
    "allowed": 20,
    "used": 3,
    "exceeded": 0,
    "available": 17,
    "expiryTime": 1570748640000,
    "timestamp": 1570748580323,
    "debugMpId": "6a12dd72-5c8a-4d39-b51d-2c64f953de6a"
}
useRedis (불리언) Redis 할당량 데이터베이스 모듈을 사용하려면 true로 설정합니다. 설정하면 할당량이 Redis에 연결되는 Edge Micro Gateway 인스턴스로 제한됩니다. 그 외의 경우에는 할당량 카운터가 전역입니다. 기본값: false (redis-volos-apigee 모듈 사용) (추가됨: 버전 3.0.10)
redisHost Redis 인스턴스가 실행 중인 호스트입니다. 기본값: 127.0.0.1 (추가됨: 버전 3.0.10)
redisPort Redis 인스턴스의 포트입니다. 기본값: 6379 (추가됨: 버전 3.0.10)
redisDb 사용할 Redis DB입니다. 기본값: 0 (추가됨: 버전 3.0.10)

할당량 범위 이해

할당량 수는 API 제품으로 범위가 지정됩니다. 개발자 앱에 여러 제품이 있는 경우 할당량 범위가 개별적으로 지정됩니다. 이 범위를 달성하기 위해 Edge Micro Gateway는 'appName + productName'의 조합으로 할당량 식별자를 만듭니다.

할당량 플러그인 테스트

할당량이 초과되면 HTTP 403 상태가 다음 메시지와 함께 클라이언트에 반환됩니다.

{"error": "exceeded quota"}

급증 저지와 할당량의 차이점은 무엇인가요?

당면한 작업에 적합한 도구를 선택하는 것이 중요합니다. 할당량 정책은 클라이언트 앱이 1시간, 1일, 1주 또는 1개월 동안 API에 제출할 수 있는 요청 메시지 수를 구성합니다. 할당량 정책은 수신 요청을 집계하는 분산 카운터를 유지하여 클라이언트 앱에 소비 한도를 적용합니다.

할당량 정책을 사용하여 운영 트래픽 관리가 아닌 개발자 및 파트너와의 비즈니스 계약 또는 SLA를 시행합니다. 예를 들어 무료 서비스의 트래픽은 제한하고 유료 고객에게는 전체 액세스를 허용하는 데 할당량을 사용할 수 있습니다.

급증 저지를 사용하여 API 트래픽의 급격한 급증을 방지합니다. 일반적으로 급증 저지는 DDoS 또는 기타 악의적인 공격을 차단하는 데 사용됩니다.