VPC 피어링으로 유료 조직 프로비저닝

이 페이지는 Apigee에 적용되지만 Apigee Hybrid에는 적용되지 않습니다.

Apigee Edge 문서 보기

이 문서에서는 VPC 피어링으로 명령줄에서 Apigee를 설치하고 구성하는 방법을 설명합니다. 이 단계는 데이터 상주의 사용 설정 여부와 관계없이 유료 조직의 구독 및 사용한 만큼만 지불 가격 책정 모델에 모두 적용됩니다.

단계 요약

프로비저닝 단계는 다음과 같습니다.

1단계: 환경 변수 정의

gcloud를 설정하고 이후 단계에서 사용할 환경 변수를 정의합니다.

  1. 시작하기 전에에 나열된 설정 요구사항을 완료했는지 확인합니다.
  2. Cloud SDK가 설치되어 있어야 합니다. 이를 설치하려면 Cloud SDK 설치를 참조하세요.
  3. gcloud CLI 초기화의 설명대로 Cloud SDK를 초기화하거나 기본 요건에서 만든 Google Cloud 프로젝트가 gcloud의 기본 프로젝트인지 확인합니다.
  4. 명령어 터미널에서 다음 환경 변수를 정의합니다. 필요한 조직 유형에 해당하는 탭(데이터 상주 없음 또는 데이터 상주)을 선택합니다.

    데이터 상주 없음

    AUTH="$(gcloud auth print-access-token)"
    PROJECT_ID="YOUR_PROJECT_ID"
    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    RUNTIME_LOCATION="YOUR_RUNTIME_LOCATION"
    ANALYTICS_REGION="YOUR_ANALYTICS_REGION"
    BILLING_TYPE="YOUR_BILLING_TYPE"

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

    • AUTH는 Bearer 토큰이 있는 Authentication 헤더를 정의합니다. Apigee API를 호출할 때 이 헤더를 사용합니다. 토큰은 일정 시간 후 만료됩니다. 만료 후에는 동일 명령어를 사용해서 다시 생성할 수 있습니다. 자세한 내용은 print-access-token 명령어의 참조 페이지를 확인하세요.
    • PROJECT_ID기본 요건의 일부로 만든 Cloud 프로젝트 ID입니다.
    • PROJECT_NUMBER기본 요건의 일부로 만든 Cloud 프로젝트 번호입니다.
    • RUNTIME_LOCATION은 나중에 만들 Apigee 인스턴스가 있는 물리적 위치입니다. 사용 가능한 런타임 위치 목록은 Apigee 위치를 참조하세요.

    • ANALYTICS_REGION은 Apigee 분석 데이터가 저장되는 물리적 위치입니다. 사용 가능한 Apigee API 분석 리전 목록은 Apigee 위치를 참조하세요.

      RUNTIME_LOCATIONANALYTICS_REGION은 둘 다 같은 리전일 수 있지만 반드시 동일할 필요는 없습니다.

    • BILLING_TYPE은 만드는 조직의 결제 유형입니다. 유효한 값은 다음과 같습니다.

    데이터 상주

    AUTH="$(gcloud auth print-access-token)"
    PROJECT_ID="YOUR_PROJECT_ID"
    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    RUNTIME_LOCATION="YOUR_RUNTIME_LOCATION"
    CONTROL_PLANE_LOCATION="YOUR_CONTROL_PLANE_LOCATION"
    CONSUMER_DATA_REGION="YOUR_CONSUMER_DATA_REGION"
    BILLING_TYPE="YOUR_BILLING_TYPE"

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

    • AUTH는 Bearer 토큰이 있는 Authentication 헤더를 정의합니다. Apigee API를 호출할 때 이 헤더를 사용합니다. 토큰은 일정 시간 후 만료됩니다. 만료 후에는 동일 명령어를 사용해서 다시 생성할 수 있습니다. 자세한 내용은 print-access-token 명령어의 참조 페이지를 확인하세요.
    • PROJECT_ID기본 요건의 일부로 만든 Cloud 프로젝트 ID입니다.
    • PROJECT_NUMBER기본 요건의 일부로 만든 Cloud 프로젝트 번호입니다.
    • RUNTIME_LOCATION은 나중에 만들 Apigee 인스턴스가 있는 물리적 위치입니다. 사용 가능한 런타임 위치 목록은 Apigee 위치를 참조하세요.

      런타임 위치는 제어 영역 위치 내에 있어야 합니다.
    • CONTROL_PLANE_LOCATION은 Apigee 제어 영역 데이터가 저장되는 물리적 위치입니다. 사용 가능한 제어 영역 위치 목록은 Apigee 위치를 참조하세요.
    • CONSUMER_DATA_REGION은 제어 영역 리전의 하위 리전입니다. CONTROL_PLANE_LOCATION 및 CONSUMER_DATA_REGION을 모두 지정해야 합니다. 사용 가능한 소비자 데이터 리전 목록은 Apigee 위치를 참조하세요.
    • BILLING_TYPE은 만드는 조직의 결제 유형입니다. 유효한 값은 다음과 같습니다.

  5. (선택사항) 방금 설정한 값을 에코하여 작업을 확인합니다. 명령어에 변수를 사용하려면 변수 이름 앞에 달러 기호($)를 추가합니다.

    데이터 상주 없음

    echo $AUTH
    echo $PROJECT_ID
    echo $PROJECT_NUMBER
    echo $RUNTIME_LOCATION
    echo $ANALYTICS_REGION
    echo $BILLING_TYPE
    

    echo 명령어에 대한 응답은 다음과 같이 표시됩니다.

    YOUR_TOKEN
    my-cloud-project
    1234567890
    us-west1
    us-west1
    SUBSCRIPTION
    

    데이터 상주

    echo $AUTH
    echo $PROJECT_ID
    echo $PROJECT_NUMBER
    echo $RUNTIME_LOCATION
    echo $CONTROL_PLANE_LOCATION
    echo $CONSUMER_DATA_REGION
    echo $BILLING_TYPE
    

    echo 명령어에 대한 응답은 다음과 같이 표시됩니다.

    YOUR_TOKEN
    my-cloud-project
    1234567890
    us-west1
    us
    us-west1
    SUBSCRIPTION
    

2단계: API 사용 설정

  1. Apigee를 사용하려면 Google Cloud API를 여러 개 사용 설정해야 합니다. 이를 사용 설정하려면 다음 services enable 명령어를 실행합니다.

    gcloud services enable apigee.googleapis.com \
        servicenetworking.googleapis.com \
        compute.googleapis.com \
        cloudkms.googleapis.com --project=$PROJECT_ID
  2. (선택사항) 작업을 확인하려면 services list 명령어를 사용하여 사용 설정된 모든 API를 표시합니다.

    gcloud services list

    방금 사용 설정한 API를 포함한 사용 설정된 모든 서비스가 응답으로 표시됩니다.

3단계: Apigee 서비스 에이전트 만들기

  1. Apigee 서비스 ID를 만듭니다.

    gcloud beta services identity create --service=apigee.googleapis.com \
      --project=$PROJECT_ID
  2. 에이전트가 성공적으로 생성되었는지 확인합니다. 응답에 에이전트 이름이 service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com 형식으로 표시됩니다. 예를 들면 다음과 같습니다.

    Service identity created: service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com

4단계: 서비스 네트워킹 구성

이 단계에서는 IP 주소 범위 쌍(/22 및 /28 CIDR 범위)을 Apigee에 할당하고 네트워크와 Apigee 네트워크 간에 VPC 피어링을 수행합니다. 각 Apigee 인스턴스에는 /22 및 /28의 중첩되지 않는 CIDR 범위가 필요합니다. Apigee 런타임 영역에는 이 CIDR 범위 내의 IP 주소가 할당됩니다. 따라서 이 범위는 Apigee에 예약되어야 하며 VPC 네트워크의 다른 애플리케이션에서 사용하면 안 됩니다. 자세한 내용 및 중요한 고려사항은 피어링 범위 이해를 참조하세요.

지금 만드는 것은 Apigee 인스턴스 1개에 충분한 네트워크 IP 범위입니다. 추가 Apigee 인스턴스를 만들려면 각 인스턴스에 대해 이 단계를 반복해야 합니다. 인스턴스 간에 범위를 공유할 수 없습니다. Apigee를 여러 리전으로 확장도 참조하세요.

  1. 다음 환경 변수를 만듭니다.
    RANGE_NAME=YOUR_RANGE_NAME
    NETWORK_NAME=YOUR_NETWORK_NAME
    

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

    • RANGE_NAME은 만들려는 IP 주소 범위의 이름입니다. 범위 이름은 원하는 대로 지정할 수 있습니다. 예를 들면 google-svcs입니다.
    • NETWORK_NAME은 주소를 예약할 네트워크 리소스의 이름입니다.

      Google에서는 새 프로젝트마다 기본 네트워크(default)를 만들 수 있으므로 이를 사용할 수 있습니다. 하지만 테스트 이외의 다른 용도로는 기본 네트워크를 사용하지 않는 것이 좋습니다.

  2. CIDR 길이가 /22인 네트워크 IP 범위를 만듭니다.
    gcloud compute addresses create $RANGE_NAME \
      --global \
      --prefix-length=22 \
      --description="Peering range for Apigee services" \
      --network=$NETWORK_NAME \
      --purpose=VPC_PEERING \
      --addresses=OPTIONAL_ADDRESSES \
      --project=$PROJECT_ID

    여기서 --addresses를 사용하면 IP 주소 범위를 필요에 따라 지정할 수 있습니다. 예를 들어 CIDR 블록 192.168.0.0/22를 할당하려면 주소에 192.168.0.0을 지정하고 프리픽스 길이에 22를 지정합니다. IP 할당 만들기도 참조하세요.

    --addresses 매개변수를 제공하지 않으면 gcloud에서 사용 가능한 IP 주소 범위를 선택합니다.

    성공하면 gcloud가 다음과 같이 응답합니다.

    Created [https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/addresses/google-svcs].

    IP 주소 범위를 만든 후 주소는 해제할 때까지 프로젝트에 연결됩니다.

  3. CIDR 길이가 /22인 네트워크 IP 범위가 생성되었는지 확인합니다.
    gcloud compute addresses list --global --project=$PROJECT_ID
    gcloud compute addresses describe $RANGE_NAME --global --project=$PROJECT_ID
  4. CIDR 길이가 /28인 네트워크 IP 범위를 만듭니다. 이 범위는 필수이며 Apigee에서 문제 해결 목적으로 사용되며 맞춤설정 또는 변경할 수 없습니다.
    gcloud compute addresses create google-managed-services-support-1 \
      --global \
      --prefix-length=28 \
      --description="Peering range for supporting Apigee services" \
      --network=$NETWORK_NAME \
      --purpose=VPC_PEERING \
      --addresses=OPTIONAL_ADDRESSES \
      --project=$PROJECT_ID

    여기서 --addresses를 사용하면 IP 주소 범위를 필요에 따라 지정할 수 있습니다. 예를 들어 CIDR 블록 192.168.0.0/28를 할당하려면 주소에 192.168.0.0을 지정하고 프리픽스 길이에 28를 지정합니다. IP 할당 만들기도 참조하세요.

    --addresses 매개변수를 제공하지 않으면 gcloud에서 사용 가능한 IP 주소 범위를 선택합니다.

  5. CIDR 길이가 /28인 네트워크 IP 범위가 생성되었는지 확인합니다.
    gcloud compute addresses list --global --project=$PROJECT_ID
    gcloud compute addresses describe google-managed-services-support-1 --global \
      --project=$PROJECT_ID
  6. 다음 명령어를 사용하여 네트워크에 서비스를 연결합니다.
    gcloud services vpc-peerings connect \
      --service=servicenetworking.googleapis.com \
      --network=$NETWORK_NAME \
      --ranges=$RANGE_NAME,google-managed-services-support-1 \
      --project=$PROJECT_ID

    이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다. 성공하면 gcloud가 다음과 같이 응답합니다. 여기서 OPERATION_IDLRO의 UUID입니다.

    Operation "operations/OPERATION_ID" finished successfully.
  7. Apigee가 네트워크와 Google 서비스 간의 연결을 만듭니다. 특히 Apigee는 VPC 피어링을 통해 프로젝트를 Service Networking API에 연결합니다. 또한 Apigee는 IP 주소도 프로젝트에 연결합니다.

  8. 몇 분 후 VPC 피어링이 성공했는지 확인합니다.
    gcloud services vpc-peerings list \
      --network=$NETWORK_NAME \
      --service=servicenetworking.googleapis.com \
      --project=$PROJECT_ID

5단계: 조직 만들기

조직을 만들려면 먼저 런타임 데이터베이스 암호화 키링과 키를 만들고(1단계 참조), 데이터 상주를 사용하는 경우 제어 영역 암호화 키링과 키를 만들어야 합니다(2단계 참조). 이러한 Cloud KMS 키는 런타임 및 제어 영역 위치 전반에서 저장되고 복제되는 데이터를 암호화합니다. Apigee는 이러한 항목을 사용하여 KVM, 캐시, 데이터베이스에 저장되어 있는 클라이언트 보안 비밀번호와 같은 애플리케이션 데이터를 암호화합니다. 자세한 내용은 Apigee 암호화 키 정보를 참조하세요.

  1. 런타임 데이터베이스 암호화 키링과 키를 만듭니다.

    1. 런타임 데이터베이스 암호화 키링과 키의 위치에 대한 환경 변수를 정의합니다. 이렇게 하면 애플리케이션 키링 및 키를 만들 때 일관성을 유지하고 문서에서 더 쉽게 따를 수 있습니다.

      값은 런타임 데이터베이스 암호화 키링과 키가 저장되는 물리적 위치입니다.

      단일 리전

      단일 리전 구성(단일 리전에 인스턴스가 하나만 있는 경우): 지원되는 KMS 리전 위치에서 선택합니다.

      예를 들면 다음과 같습니다.

      RUNTIMEDBKEY_LOCATION="us-west1"

      이 값은 $RUNTIME_LOCATION(리전이라고도 함)과 같을 수 있지만 반드시 그럴 필요는 없습니다. 그러나 동일하면 성능상 이점이 있을 수 있습니다.

      멀티 리전

      멀티 리전 구성: 지원되는 멀티 리전 위치(예: us 또는 europe) 또는 이중 리전 위치에서 선택합니다.

      예를 들면 다음과 같습니다.

      RUNTIMEDBKEY_LOCATION="us"

      미국에서의 멀티 리전 구성을 갖고 있으면 가능한 경우 us를 사용자 위치로 사용합니다. 그렇지 않은 경우 nam4를 사용하세요.

    2. 데이터베이스 키링 및 키 이름의 환경 변수를 정의합니다.

      키링의 이름은 조직에서 고유해야 합니다. 두 번째 또는 후속 리전을 만드는 경우 이름은 다른 키링의 이름과 동일할 수 없습니다.

      RUNTIMEDB_KEY_RING_NAME=YOUR_DB_KEY_RING_NAME
      RUNTIMEDB_KEY_NAME=YOUR_DB_KEY_NAME
    3. (선택사항) 방금 설정한 값을 에코하여 작업을 확인합니다. 명령어에 변수를 사용하려면 변수 이름 앞에 달러 기호($)를 추가합니다.
      echo $RUNTIMEDBKEY_LOCATION
      echo $RUNTIMEDB_KEY_RING_NAME
      echo $RUNTIMEDB_KEY_NAME
    4. 새 키링을 만듭니다.
      gcloud kms keyrings create $RUNTIMEDB_KEY_RING_NAME \
        --location $RUNTIMEDBKEY_LOCATION --project $PROJECT_ID

      Apigee 런타임 데이터베이스 암호화 키의 위치는 Cloud HSMCloud EKM을 지원하는 모든 Cloud KMS 위치를 지원합니다.

    5. 키를 만듭니다.

      gcloud kms keys create $RUNTIMEDB_KEY_NAME \
        --keyring $RUNTIMEDB_KEY_RING_NAME \
        --location $RUNTIMEDBKEY_LOCATION \
        --purpose "encryption" \
        --project $PROJECT_ID

      이 명령어는 키링을 만들어 지정된 키링에 추가합니다.

      키 ID를 가져옵니다.

      gcloud kms keys list \
        --location=$RUNTIMEDBKEY_LOCATION \
        --keyring=$RUNTIMEDB_KEY_RING_NAME \
        --project=$PROJECT_ID

      키 ID에는 다음 문법(파일 경로와 유사)이 포함됩니다.

      projects/PROJECT_ID/locations/RUNTIMEDBKEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME
    6. 키 ID를 환경 변수에 입력합니다. 이후 명령어에서 이 변수를 사용하게 됩니다.

      RUNTIMEDB_KEY_ID=YOUR_RUNTIMEDB_KEY_ID
    7. Apigee 서비스 에이전트가 새 키를 사용할 수 있는 액세스 권한을 부여합니다.

      gcloud kms keys add-iam-policy-binding $RUNTIMEDB_KEY_NAME \
        --location $RUNTIMEDBKEY_LOCATION \
        --keyring $RUNTIMEDB_KEY_RING_NAME \
        --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project $PROJECT_ID

      이 명령어는 키를 Apigee 서비스 에이전트에 결합합니다.

      이 요청이 완료되면 gcloud는 다음과 비슷한 응답을 보냅니다.

      Updated IAM policy for key [runtime].
      bindings:
      - members:
        - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
        role: roles/cloudkms.cryptoKeyEncrypterDecrypter
      etag: BwWqgEuCuwk=
      version: 1

      다음과 같은 오류가 표시되는 경우:

      INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.

      서비스 계정 이메일 주소에 있는 프로젝트 이름이 아닌 프로젝트 번호를 사용했는지 확인합니다.

  2. 데이터 상주를 사용하는 경우 제어 영역 암호화 키링과 키를 만듭니다. 데이터 상주를 사용하지 않는 경우 3단계로 이동합니다.
  3. 다음 단계를 수행하여 제어 영역 암호화 키링 및 키를 만듭니다.

    1. 제어 영역 데이터베이스 암호화 키링과 키의 위치에 대한 환경 변수를 정의합니다.
      CONTROL_PLANE_LOCATION=YOUR_CONTROL_PLANE_LOCATION
      CONSUMER_DATA_REGION=YOUR_CONSUMER_DATA_REGION

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

      • CONTROL_PLANE_LOCATION은 Apigee 제어 영역 데이터가 저장되는 물리적 위치입니다. 사용 가능한 제어 영역 위치 목록은 Apigee 위치를 참조하세요.
      • CONSUMER_DATA_REGION은 제어 영역 리전의 하위 리전입니다. CONTROL_PLANE_LOCATION 및 CONSUMER_DATA_REGION을 모두 지정해야 합니다. 사용 가능한 소비자 데이터 리전 목록은 Apigee 위치를 참조하세요.
    2. 제어 영역 데이터베이스 키링과 키 이름에 대한 환경 변수를 정의합니다.

      키링의 이름은 조직에서 고유해야 합니다.

      CONTROL_PLANE_KEY_RING_NAME=YOUR_CONTROL_PLANE_KEY_RING_NAME
      CONTROL_PLANE_KEY_NAME=YOUR_CONTROL_PLANE_KEY_NAME
      CONSUMER_DATA_KEY_RING_NAME=YOUR_CONSUMER_DATA_KEY_RING_NAME
      CONSUMER_DATA_KEY_NAME=YOUR_CONSUMER_DATA_REGION_KEY_NAME

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

      • CONTROL_PLANE_KEY_RING_NAME은 제어 영역 암호화 키링을 식별하는 데 사용할 키링의 이름입니다.
      • CONTROL_PLANE_KEY_NAME은 제어 영역 암호화 키를 식별하는 데 사용할 키의 이름입니다.
      • CONSUMER_DATA_KEY_RING_NAME은 소비자 데이터 리전 암호화 키링을 식별하는 데 사용할 키링의 이름입니다.
      • CONSUMER_DATA_KEY_NAME은 소비자 데이터 리전 암호화 키를 식별하는 데 사용할 키의 이름입니다.
    3. 새 키링을 만듭니다.
      gcloud kms keyrings create $CONTROL_PLANE_KEY_RING_NAME \
        --location $CONTROL_PLANE_LOCATION \
        --project $PROJECT_ID
      gcloud kms keyrings create $CONSUMER_DATA_KEY_RING_NAME \
        --location $CONSUMER_DATA_REGION \
        --project $PROJECT_ID
    4. 키를 만듭니다.
      gcloud kms keys create $CONTROL_PLANE_KEY_NAME \
        --keyring $CONTROL_PLANE_KEY_RING_NAME \
        --location $CONTROL_PLANE_LOCATION \
        --purpose "encryption" \
        --project $PROJECT_ID
      gcloud kms keys create $CONSUMER_DATA_KEY_NAME \
        --keyring $CONSUMER_DATA_KEY_RING_NAME \
        --location $CONSUMER_DATA_REGION \
        --purpose "encryption" \
        --project $PROJECT_ID

      이 명령어는 키링을 만들어 지정된 키링에 추가합니다.

      키 ID를 가져옵니다.

      gcloud kms keys list \
      --location=$CONTROL_PLANE_LOCATION \
      --keyring=$CONTROL_PLANE_KEY_RING_NAME \
      --project=$PROJECT_ID
      gcloud kms keys list \
      --location=$CONSUMER_DATA_REGION \
      --keyring=$CONSUMER_DATA_KEY_RING_NAME \
      --project=$PROJECT_ID

      키 ID에는 다음 문법(파일 경로와 유사)이 포함됩니다.

      projects/PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/CONTROL_PLANE_KEY_RING_NAME/cryptoKeys/CONTROL_PLANE_KEY_NAME
      projects/PROJECT_ID/locations/CONSUMER_DATA_REGION/keyRings/CONSUMER_DATA_KEY_RING_NAME/cryptoKeys/CONSUMER_DATA_KEY_NAME
    5. 키 ID를 환경 변수에 입력합니다. 이후 명령어에서 이 변수를 사용하게 됩니다.
      CONTROL_PLANE_KEY_ID=YOUR_CONTROL_PLANE_KEY_ID
      
      CONSUMER_DATA_KEY_ID=YOUR_CONSUMER_DATA_KEY_ID
    6. Apigee 서비스 에이전트가 새 키를 사용할 수 있는 액세스 권한을 부여합니다.
      gcloud kms keys add-iam-policy-binding $CONTROL_PLANE_KEY_NAME \
        --location $CONTROL_PLANE_LOCATION \
        --keyring $CONTROL_PLANE_KEY_RING_NAME \
        --member "serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project $PROJECT_ID
      
      gcloud kms keys add-iam-policy-binding $CONSUMER_DATA_KEY_NAME \
       --location $CONSUMER_DATA_REGION \
       --keyring $CONSUMER_DATA_KEY_RING_NAME \
       --member "serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
       --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
       --project $PROJECT_ID
      

      이 명령어는 키를 Apigee 서비스 에이전트에 결합합니다. 이 요청이 완료되면 gcloud에서 다음과 같이 응답합니다.

      Updated IAM policy for key [runtime].
      bindings:
      - members:
        - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
        role: roles/cloudkms.cryptoKeyEncrypterDecrypter
      etag: BwWqgEuCuwk=
      version: 1
      

      다음과 같은 오류가 표시되는 경우:

      INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.
      

      서비스 계정 이메일 주소에 있는 프로젝트 이름이 아닌 프로젝트 번호를 사용했는지 확인합니다.

    참조: CMEK 문제 해결

  4. Apigee organizations API에 다음 요청을 전송하여 조직을 만듭니다.

    데이터 상주 없음

    curl "https://apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID"  \
      -H "Authorization: Bearer $AUTH" \
      -X POST \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$PROJECT_ID"'",
        "analyticsRegion":"'"$ANALYTICS_REGION"'",
        "runtimeType":"CLOUD",
        "billingType":"'"$BILLING_TYPE"'",
        "authorizedNetwork":"'"$NETWORK_NAME"'",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

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

    • -d: 요청의 데이터 페이로드를 정의합니다. 이 페이로드에는 다음이 포함되어야 합니다.
      • name: 새 조직의 식별자입니다. 프로젝트 ID와 동일한 이름이어야 합니다.

      • analyticsRegion: 분석 데이터가 저장되는 물리적 위치입니다.

      • runtimeType: 이 값을 CLOUD로 설정합니다.
      • billingType: 만든 조직의 결제 유형을 지정합니다.
      • authorizedNetwork: 서비스 네트워킹 구성에서 지정한 피어링 네트워크를 식별합니다.
      • runtimeDatabaseEncryptionKeyName: 이전 단계에서 만든 애플리케이션 암호화 키의 ID입니다. ID는 파일 경로와 같이 구성되어 있습니다. 예를 들면 다음과 같습니다.
        projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    데이터 상주

    API를 사용하여 조직을 만듭니다.

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID"  \
      -H "Authorization: Bearer $AUTH" \
      -X POST \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$PROJECT_ID"'",
        "runtimeType":"CLOUD",
        "billingType":"'"$BILLING_TYPE"'",
        "controlPlaneEncryptionKeyName":"'"$CONTROL_PLANE_KEY_ID"'",
        "apiConsumerDataLocation":"'"$CONSUMER_DATA_REGION"'",
        "apiConsumerDataEncryptionKeyName":"'"$CONSUMER_DATA_KEY_ID"'",
        "authorizedNetwork":"'"$NETWORK_NAME"'",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

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

    -d: 요청의 데이터 페이로드를 정의합니다. 이 페이로드에는 다음이 포함되어야 합니다.

    • name: 새 조직의 식별자입니다. 프로젝트 ID와 동일한 이름이어야 합니다.
    • runtimeType: 이 값을 CLOUD로 설정합니다.
    • billingType: 만든 조직의 결제 유형을 지정합니다.
    • controlPlaneEncryptionKeyName: 제어 영역 키 ID입니다.
    • apiConsumerDataLocation: 내부 리소스에서 사용할 하위 리전도 지정해야 합니다. 지원되는 값은 데이터 상주 리전을 참조하세요.
    • apiConsumerDataEncryptionKeyName: 소비자 데이터 리전 키 ID입니다.
    • authorizedNetwork: 서비스 네트워킹 구성에서 지정한 피어링 네트워크를 식별합니다.
    • runtimeDatabaseEncryptionKeyName: 이전 단계에서 만든 애플리케이션 암호화 키의 ID입니다. ID는 파일 경로와 같이 구성되어 있습니다. 예를 들면 다음과 같습니다.
      projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    이 명령어를 실행하면 Apigee가 장기 실행 작업을 시작합니다. 이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다.

    오류가 발생하면 데이터 페이로드의 변수 값에 따옴표를 사용했는지 확인합니다. 다음 예시와 같이 $PROJECT_ID 변수를 큰따옴표-작은따옴표-큰따옴표로 묶어야 합니다.

    "'"$PROJECT_ID"'"

    요청 값에 일반 문자열(환경 변수 아님)을 사용하는 경우 다음 예시와 같이 작은따옴표로 묶은 페이로드 문자열 안에 큰따옴표로 묶을 수 있습니다.

    '{ "name":"my-gcp-project", ... }'
  5. 잠시만 기다려 주세요.
  6. 생성 요청의 상태를 확인하려면 다음 예시와 같이 Apigee List organizations APIGET 요청을 보내면 됩니다.

    데이터 상주 없음

    curl -H "Authorization: Bearer $AUTH" "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    데이터 상주

    curl -H "Authorization: Bearer $AUTH" "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    이 응답이 표시되면 조직 만들기가 아직 완료되지 않은 것입니다.

    {
      "error": {
        "code": 403,
        "message": "Permission denied on resource \"organizations/apigee-docs-m\" (or it may not exist)",
        "status": "PERMISSION_DENIED"
      }
    }

    Apigee가 새 조직을 성공적으로 만들면 다음과 비슷한 응답이 수신됩니다.

    데이터 상주 없음

    {
      "name": "my-cloud-project",
      "createdAt": "1592586495539",
      "lastModifiedAt": "1592586495539",
      "environments": [],
      "properties": {
        "property": [
          {
            "name": "features.hybrid.enabled",
            "value": "true"
          },
          {
            "name": "features.mart.connect.enabled",
            "value": "true"
          }
        ]
      },
      "analyticsRegion": "us-west1",
      "runtimeType": "CLOUD",
      "subscriptionType": "PAID",
      "caCertificate": "YOUR_CERTIFICATE",
      "authorizedNetwork": "my-network",
      "projectId": "my-cloud-project"
    }

    데이터 상주

      {
        "name": "my-cloud-project",
        "createdAt": "1681412783749",
        "lastModifiedAt": "1681412783749",
        "environments": [
          "test-env"
        ],
        "properties": {
          "property": [
            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            },
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            }
          ]
        },
        "authorizedNetwork": "default",
        "runtimeType": "CLOUD",
        "subscriptionType": "PAID",
        "caCertificate": "YOUR_CERTIFICATE",
        "runtimeDatabaseEncryptionKeyName": "projects/my-cloud-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-key-name",
        "projectId": "my-cloud-project",
        "state": "ACTIVE",
        "billingType": "PAYG",
        "addonsConfig": {
          "advancedApiOpsConfig": {},
          "integrationConfig": {},
          "monetizationConfig": {},
          "connectorsPlatformConfig": {}
        },
        "apiConsumerDataEncryptionKeyName": "projects/my-cloud-project/locations/us-central1/keyRings/my-key-ring/cryptoKeys/my-key-name",
        "controlPlaneEncryptionKeyName": "projects/my-cloud-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-key-name",
        "apiConsumerDataLocation": "us-central1",
        "apigeeProjectId": "i0c2a37e80f9850ab-tp"
      }
    
    

    Apigee가 HTTP 오류 응답을 반환하는 경우 Apigee 조직 만들기를 참조하세요.

6단계: 런타임 인스턴스 만들기

런타임 인스턴스는 Apigee 프로젝트 및 관련 서비스가 저장된 위치입니다. 이 위치는 서비스에 대한 사용자 대상 엔드포인트를 제공합니다. 새 런타임 인스턴스를 만들려면 다음 안내를 따르세요.

  1. Apigee에서 조직 생성을 완료했는지 확인합니다. Apigee 조직 만들기에서 새 조직을 만들도록 요청을 제출했지만 계속하기 전에 작업을 완료해야 합니다.

    이렇게 하려면 다음 요청을 Organizations API로 전송하세요.

    데이터 상주 없음

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    데이터 상주

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID"

    조직이 존재하고 조직을 볼 수 있는 적절한 권한이 있는 경우 Apigee가 이에 대한 세부 정보로 응답합니다. Apigee가 오류로 응답하면 몇 분 정도 기다린 후 요청을 다시 보냅니다.

  2. 데이터베이스의 암호화 키를 만든 이전 작업과 비슷하게 이제 서버 측에서 데이터를 암호화하는 데 사용되는 Cloud KMS 키를 만들어야 합니다. 시작하려면 다음 환경 변수를 정의합니다.
    INSTANCE_NAME=YOUR_INSTANCE_NAME
    RUNTIME_LOCATION=YOUR_RUNTIME_LOCATION
    DISK_KEY_RING_NAME=YOUR_DISK_KEY_RING_NAME
    DISK_KEY_NAME=YOUR_DISK_KEY_NAME
  3. 각 항목의 의미는 다음과 같습니다.

    • INSTANCE_NAME: 새 인스턴스의 이름입니다. 예를 들면 my-runtime-instance입니다. 이름은 소문자로 시작해야 하며 최대 32자(영문 기준)이고 소문자, 숫자, 하이픈만 포함할 수 있습니다. 하이픈으로 시작하거나 끝날 수 없으며 2자(영문 기준) 이상이어야 합니다.
    • RUNTIME_LOCATION은 클러스터가 호스팅되는 물리적 위치입니다. 유효한 값은 Compute Engine에서 허용하는 위치입니다. 사용 가능한 리전 및 영역을 참조하세요. 이 예시에서는 us-west1를 사용합니다.
    • DISK_KEY_RING_NAME은 디스크 암호화 키링의 이름입니다.
    • DISK_KEY_NAME은 디스크 암호화 키의 이름입니다.
  4. 디스크 암호화 키를 만듭니다.
    1. 새 디스크 키링을 만듭니다.
      gcloud kms keyrings create $DISK_KEY_RING_NAME \
        --location $RUNTIME_LOCATION \
        --project $PROJECT_ID

      디스크 키링이 인스턴스와 동일한 위치로 설정되어야 합니다. 각 인스턴스와 키링에 고유한 위치가 있어야 합니다.

    2. 새 디스크 키를 만듭니다.
      gcloud kms keys create $DISK_KEY_NAME \
        --keyring $DISK_KEY_RING_NAME \
        --location $RUNTIME_LOCATION \
        --purpose "encryption" \
        --project $PROJECT_ID

      키 경로로 해당 키를 참조할 수 있습니다. 다음 명령어를 사용하여 키 경로를 가져올 수 있습니다.

      gcloud kms keys list \
        --location=$RUNTIME_LOCATION \
        --keyring=$DISK_KEY_RING_NAME \
        --project=$PROJECT_ID

      키 경로는 다음과 같습니다.

      projects/PROJECT_ID/locations/RUNTIME_LOCATION/keyRings/my-disk-key-ring/cryptoKeys/my-disk-key
    3. 키 경로를 환경 변수에 입력합니다. 이후 명령어에서 이 변수를 사용하게 됩니다.

      DISK_KEY_ID=YOUR_DISK_KEY_ID

      예: DISK_KEY_ID=projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    4. Apigee 서비스 에이전트가 새 키를 사용할 수 있는 액세스 권한을 부여합니다.

      gcloud kms keys add-iam-policy-binding $DISK_KEY_NAME \
        --location $RUNTIME_LOCATION \
        --keyring $DISK_KEY_RING_NAME \
        --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project $PROJECT_ID

      이 명령어는 키를 Apigee 서비스 에이전트에 결합합니다.

    자세한 내용은 Apigee 암호화 키 정보를 참조하세요.

  5. Apigee 인스턴스 만들기에 사용되는 IP 범위를 예약합니다.
  6. Apigee Instances APIPOST 요청을 전송하여 프로젝트의 새 런타임 인스턴스를 만듭니다.

    데이터 상주 없음

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances" \
      -X POST -H "Authorization: Bearer $AUTH" \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$INSTANCE_NAME"'",
        "location":"'"$RUNTIME_LOCATION"'",
        "diskEncryptionKeyName":"'"$DISK_KEY_ID"'",
        "consumerAcceptList":["'"$PROJECT_ID"'"]
      }'

    데이터 상주

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances" \
      -X POST -H "Authorization: Bearer $AUTH" \
      -H "Content-Type:application/json" \
      -d '{
        "name":"'"$INSTANCE_NAME"'",
        "location":"'"$RUNTIME_LOCATION"'",
        "diskEncryptionKeyName":"'"$DISK_KEY_ID"'",
        "consumerAcceptList":["'"$PROJECT_ID"'"]
      }'

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

    • consumerAcceptList (선택사항) Apigee VPC의 서비스 연결에 비공개로 연결할 수 있는 Google Cloud 프로젝트 ID 목록을 지정합니다. 서비스 연결은 Google Cloud Private Service Connect와 사용되는 항목이며, 서비스 프로듀서(이 경우 Apigee)가 소비자(이 경우 하나 이상의 Cloud 프로젝트)에게 서비스를 노출할 수 있도록 합니다. 기본적으로 Apigee 조직과 이미 연결된 Cloud 프로젝트를 사용합니다. 예를 들면 다음과 같습니다. "consumerAcceptList": ["project1", "project2", "project3"]

      인스턴스 UI에서 허용되는 프로젝트 목록을 설정하고 변경할 수도 있습니다. 자세한 내용은 인스턴스 관리를 참조하세요.

    Apigee가 새 Kubernetes 클러스터를 만들어 실행하고 해당 클러스터에 Apigee 리소스를 설치하며 부하 분산을 설정해야 하므로 이 요청을 완료하는 데는 최대 20분이 소요될 수 있습니다.

    Apigee에서 오류가 반환되면 새 인스턴스 만들기를 참조하세요.

  7. 런타임 인스턴스 생성 요청의 상태를 확인하려면 다음 명령어를 실행합니다. 활성 상태이면 다음 단계로 넘어갈 수 있습니다.

    데이터 상주 없음

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME"

    데이터 상주

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME"

7단계: 환경 만들기

환경을 만들어 명령줄의 런타임에 연결하려면 다음 절차를 따르세요.

  1. 이 섹션에 사용할 환경 변수를 정의합니다. 만드는 특정 환경 변수는 구독 또는 사용한 만큼만 지불 조직에 대한 환경을 만드는지 여부에 따라 다릅니다.

    구독

    구독 환경의 경우 다음 변수를 만듭니다.

    ENVIRONMENT_NAME="YOUR_ENV_NAME"
    ENV_GROUP_NAME="YOUR_ENV_GROUP_NAME"
    ENV_GROUP_HOSTNAME="YOUR_ENV_GROUP_HOSTNAME"

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

    • ENVIRONMENT_NAME은 문자열 이름입니다. 예를 들면 test입니다.
    • ENV_GROUP_NAME은 문자열 이름입니다. 예를 들면 test-group입니다.
    • ENV_GROUP_HOSTNAME은 유효한 도메인 호스트 이름입니다. 예를 들면 foo.example.com입니다.

    사용한 만큼만 지불

    사용한 만큼만 지불 환경의 경우 다음 변수를 만듭니다.

    ENVIRONMENT_NAME="YOUR_ENV_NAME"
    ENVIRONMENT_TYPE="YOUR_ENV_TYPE"
    ENV_GROUP_NAME="YOUR_ENV_GROUP_NAME"
    ENV_GROUP_HOSTNAME="YOUR_ENV_GROUP_HOSTNAME"

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

    • ENVIRONMENT_NAME은 문자열 이름입니다. 예를 들면 test입니다.
    • ENVIRONMENT_TYPE은 이 환경의 환경 유형이며 BASE, INTERMEDIATE 또는 COMPREHENSIVE 값 중 하나를 지정해야 하는 사용한 만큼만 지불 사용자에게만 해당됩니다. 다른 사용자는 환경 유형을 생략해야 합니다.
    • ENV_GROUP_NAME은 문자열 이름입니다. 예를 들면 test-group입니다.
    • ENV_GROUP_HOSTNAME은 유효한 도메인 호스트 이름입니다. 예를 들면 foo.example.com입니다.
  2. Environments API로 새 환경 만들기. 사용하는 특정 명령어는 구독 또는 사용한 만큼만 지불 조직에 대한 환경을 만드는지 여부에 따라 다릅니다.

    구독

    새 구독 환경의 경우 다음 명령어를 사용합니다.

    데이터 상주 없음

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name":"'"$ENVIRONMENT_NAME"'"
      }'

    데이터 상주

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name":"'"$ENVIRONMENT_NAME"'"
      }'

    Apigee에서 새 환경을 만듭니다.

    사용한 만큼만 지불

    사용한 만큼만 지불 환경의 경우 다음 명령어를 사용합니다.

    데이터 상주 없음

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name":"'"$ENVIRONMENT_NAME"'",
          "type":"'"$ENVIRONMENT_TYPE"'"
      }'

    데이터 상주

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name":"'"$ENVIRONMENT_NAME"'",
          "type":"'"$ENVIRONMENT_TYPE"'"
      }'

    Apigee에서 새 환경을 만듭니다.

  3. 계속하기 전에 Environments API를 호출하여 Apigee가 새 환경 만들기를 완료했는지 확인합니다.

    데이터 상주 없음

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments"

    데이터 상주

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments"

    Apigee는 사용 가능한 환경 목록으로 응답합니다. 예를 들어 환경 이름이 test인 경우 Apigee는 다음과 같이 응답합니다.

    [
      "test"
    ]
  4. 런타임 인스턴스에 새 환경을 연결합니다.

    데이터 상주 없음

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments" \
        -X POST -H "Authorization: Bearer $AUTH" \
        -H "content-type:application/json" \
        -d '{
          "environment":"'"$ENVIRONMENT_NAME"'"
        }'

    데이터 상주

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments" \
        -X POST -H "Authorization: Bearer $AUTH" \
        -H "content-type:application/json" \
        -d '{
          "environment":"'"$ENVIRONMENT_NAME"'"
        }'

    이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다. 연결이 완료되었는지 확인하려면 다음 명령어를 실행합니다.

    데이터 상주 없음

    curl -i -H "Authorization: Bearer $AUTH" \
      "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments"

    데이터 상주

    curl -i -H "Authorization: Bearer $AUTH" \
      "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments"

    다음과 같은 출력이 표시되면 다음 단계로 넘어가도 됩니다.

    {
      "attachments": [
        {
          "name": "ed628782-c893-4095-b71c-f4731805290a",
          "environment": "test",
          "createdAt": "1641604447542"
        }
      ]
    }
  5. 다음 명령어를 사용하여 새 환경 그룹을 만듭니다. 자세한 내용은 환경 및 환경 그룹 정보를 참조하세요.

    데이터 상주 없음

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name": "'"$ENV_GROUP_NAME"'",
          "hostnames":["'"$ENV_GROUP_HOSTNAME"'"]
      }'

    데이터 상주

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups" \
        -H "Authorization: Bearer $AUTH" \
        -X POST \
        -H "Content-Type:application/json" \
        -d '{
          "name": "'"$ENV_GROUP_NAME"'",
          "hostnames":["'"$ENV_GROUP_HOSTNAME"'"]
      }'
  6. 작업이 완료될 때까지 기다립니다. 다음과 같은 요청을 사용하여 새 그룹의 상태를 확인할 수 있습니다.

    데이터 상주 없음

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME"

    데이터 상주

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME"
  7. 다음 명령어를 사용하여 새 환경을 새 환경 그룹에 연결합니다.

    데이터 상주 없음

    curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments" \
        -X POST \
        -H "Authorization: Bearer $AUTH" \
        -H "content-type:application/json" \
        -d '{
          "environment":"'"$ENVIRONMENT_NAME"'"
      }'

    데이터 상주

    curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments" \
        -X POST \
        -H "Authorization: Bearer $AUTH" \
        -H "content-type:application/json" \
        -d '{
          "environment":"'"$ENVIRONMENT_NAME"'"
      }'
  8. 작업 상태를 확인하려면 이 API를 호출합니다.

    데이터 상주 없음

    curl -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments"

    데이터 상주

    curl -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments"

8단계: 라우팅 구성

이 단계에서는 클라이언트 애플리케이션이 Apigee와 통신하는 방법을 구성합니다. 클라이언트-Apigee 트래픽을 '상위' 트래픽이라고도 합니다. 상위 구성 옵션은 다음과 같습니다. 사용할 구성 옵션으로 이동하고 해당 옵션에 대한 단계를 수행합니다.

액세스 유형 구성 및 배포 프로세스 설명
VPC 피어링으로 내부

API 프록시에 대한 내부 액세스만 허용합니다.

네트워크 내부에 새 VM을 만들고 연결해야 합니다. 새 VM에서 Apigee API 프록시에 요청을 보낼 수 있습니다.

MIG로 외부

API 프록시에 대한 외부 액세스를 허용합니다.

관리형 인스턴스 그룹(MIG)을 사용하여 전역 부하 분산기의 백엔드 서비스에서 Apigee로 API 트래픽을 보냅니다. 이 구성을 사용하면 Apigee는 피어링된 VPC에만 연결할 수 있습니다. 이 구성을 사용하면 네트워크가 사용 설정된 모든 머신에서 Apigee API 프록시 요청을 보낼 수 있습니다.

내부로 PSC(신규)

Private Service Connect(PSC)를 사용하여 모든 Google Cloud 프로젝트의 API 프록시에 대한 내부 액세스만 허용합니다.

PSC를 사용하면 서비스 프로듀서(Apigee)와 서비스 소비자(피어링된 VPC 프로젝트 또는 사용자가 제어하는 하나 이상의 클라우드 프로젝트) 간의 비공개 연결을 사용 설정할 수 있습니다. 이 방법을 사용하면 요청이 서비스 엔드포인트 또는 리전 내부 부하 분산기를 통해 서비스 연결이라는 단일 연결 지점으로 전달됩니다. 이 구성을 사용하면 내부 클라이언트가 네트워크가 사용 설정된 모든 머신에서 Apigee API 프록시 요청을 보낼 수 있습니다.

외부로 PSC(신규)

Private Service Connect(PSC)를 사용하여 API 프록시에 대한 외부 액세스를 허용합니다.

Private Service Connect(PSC)를 사용하여 서비스 프로듀서(Apigee)와 서비스 소비자(피어링된 VPC 프로젝트 또는 제어하는 하나 이상의 다른 Cloud 프로젝트) 간의 비공개 연결을 사용 설정합니다. 이 방법을 사용하면 요청이 전역 외부 부하 분산기나 리전 외부 부하 분산기를 통해 서비스 연결이라는 단일 연결 지점으로 전달됩니다. 이 구성을 사용하면 네트워크가 사용 설정된 모든 머신에서 Apigee API 프록시 요청을 보낼 수 있습니다.

이러한 각 라우팅 방식은 아래의 안내에 나와 있습니다.

내부 라우팅(VPC)

내부 클라이언트에서 Apigee로 트래픽을 라우팅하기 위해 TLS 종료를 사용할지 여부를 선택할 수 있습니다.

  • TLS 옵션: TLS가 사용 설정된 내부 클라이언트에서 API 프록시를 호출하려면 다음 두 가지 중에서 선택할 수 있습니다.
    • (옵션 1) 내부 부하 분산기(ILB)를 구성합니다.
      1. 프로젝트에서 관리형 인스턴스 그룹(MIG)을 만듭니다. MIG를 만들려면 외부 라우팅(MIG) 탭에서 8a, 8b, 8c 단계를 따르세요.
      2. 내부 HTTPS(S) 부하 분산기 (ILB)를 생성 및 구성하고 VM 인스턴스 그룹 백엔드로 내부 HTTP(S) 설정에 설명된 대로, 생성된 MIG를 ILB의 백엔드 서비스에 연결합니다. ILB 구성을 사용하면 ILB와 함께 사용되는 CA 인증서를 완전히 제어할 수 있습니다.
      3. 설정을 테스트하려면 내부 전용 액세스로 API 프록시 호출로 이동하세요.
    • (옵션 2) Apigee 인스턴스의 내부의 정규화된 기본 도메인 이름과 내부 부하 분산기 IP를 사용합니다. 이 사례는 테스트 목적으로만 권장되며 프로덕션 환경에서는 권장되지 않습니다. 이 경우 Apigee에서 만든 자체 서명 인증서가 Apigee의 내부 부하 분산기와 함께 사용되며 변경할 수 없습니다. 내부 전용 액세스로 API 프록시 호출을 참조하세요.
  • 비TLS 옵: TLS 종료를 사용 설정할 필요가 없으면 클라이언트가 TLS를 사용 중지하는 API 프록시를 호출할 수 있습니다. 예를 들어 cURL로 -k 옵션을 사용하면 TLS를 사용 중지할 수 있습니다. 내부 전용 액세스로 API 프록시 호출을 참조하세요.

외부 라우팅(MIG)

이 섹션에서는 관리형 인스턴스 그룹(MIG)을 사용하여 전역 부하 분산기의 백엔드 서비스에서 Apigee로 API 트래픽을 전송하는 API 프록시에 대한 외부 액세스를 허용하는 라우팅을 구성하는 방법을 설명합니다. 외부 클라이언트에서 Apigee 런타임 인스턴스로 요청을 보내려면 먼저 이 작업을 수행해야 합니다.

일반적인 과정은 다음과 같습니다.

8a단계: VPC 네트워크의 서브넷에 비공개 Google 액세스 사용 설정
8b단계: 환경 변수 설정
8c단계: 관리형 인스턴스 그룹 만들기
8d단계: 부하 분산기에 대한 SSL 인증서 및 키 만들기
8e단계: 전역 부하 분산기 만들기
8f단계: 예약된 IP 주소 가져오기 및 방화벽 규칙 만들기

다음 섹션에서 각 단계를 설명합니다.

8a단계: VPC 네트워크의 서브넷에 비공개 Google 액세스 사용 설정

VPC 네트워크의 서브넷에 비공개 Google 액세스를 사용 설정하려면 비공개 Google 액세스 사용 설정에 나와 있는 단계를 따르세요.

8b단계: 환경 변수 설정

이 섹션의 절차에서는 환경 변수를 사용하여 반복적으로 사용되는 문자열을 참조합니다. 계속하기 전에 이를 설정하는 것이 좋습니다.

MIG_NAME=apigee-mig-MIG_NAME   # You can choose a different name if you like
VPC_NAME=default       # If you are using a shared VPC, use the shared VPC name
VPC_SUBNET=default     # Private Google Access must be enabled for this subnet
REGION=RUNTIME_REGION        # The same region as your Apigee runtime instance
APIGEE_ENDPOINT=APIGEE_INSTANCE_IP     # See the tip below for details on getting this IP address value

나머지 프로세스에서는 이러한 변수를 여러 번 사용합니다. 여러 리전을 구성하려면 각 리전별 값으로 변수를 만듭니다.

8c단계: 관리형 인스턴스 그룹 만들기

이 단계에서는 관리형 인스턴스 그룹(MIG)을 만들고 구성합니다. 이후 단계에서는 전역 부하 분산기에 연결된 백엔드 서비스에 MIG를 추가합니다. MIG는 전역 부하 분산기의 백엔드 서비스에서 Apigee로 API 트래픽을 전송하는 데 필요합니다.

MIG를 만들려면 다음 안내를 따르세요.

  1. 다음 명령어를 실행하여 인스턴스 템플릿을 만듭니다.
    gcloud compute instance-templates create $MIG_NAME \
    --project $PROJECT_ID \
    --region $REGION \
    --network $VPC_NAME \
    --subnet $VPC_SUBNET \
    --tags=https-server,apigee-mig-proxy,gke-apigee-proxy \
    --machine-type e2-medium --image-family debian-10 \
    --image-project debian-cloud --boot-disk-size 20GB \
    --no-address \
    --metadata ENDPOINT=$APIGEE_ENDPOINT,startup-script-url=gs://apigee-5g-saas/apigee-envoy-proxy-release/latest/conf/startup-script.sh

    이 명령어에서 볼 수 있듯이 머신은 e2-medium 유형입니다. 이러한 머신은 Debian 10을 실행하며 20GB의 디스크를 보유하고 있습니다. startup-script.sh 스크립트는 MIG가 부하 분산기에서 Apigee 인스턴스로 인바운드 트래픽을 라우팅하도록 MIG를 구성합니다.

  2. 다음 명령어를 실행하여 관리형 인스턴스 그룹을 만듭니다.
    gcloud compute instance-groups managed create $MIG_NAME \
    --project $PROJECT_ID --base-instance-name apigee-mig \
    --size 2 --template $MIG_NAME --region $REGION
  3. 다음 명령어를 실행하여 그룹의 자동 확장을 구성합니다.
    gcloud compute instance-groups managed set-autoscaling $MIG_NAME \
    --project $PROJECT_ID --region $REGION --max-num-replicas 3 \
    --target-cpu-utilization 0.75 --cool-down-period 90
  4. 다음 명령어를 실행하여 이름이 지정된 포트를 정의합니다.
    gcloud compute instance-groups managed set-named-ports $MIG_NAME \
    --project $PROJECT_ID --region $REGION --named-ports https:443

8d단계: 부하 분산기에 대한 SSL 인증서 및 키 만들기

단일 리전 또는 멀티 리전 등 어디에 설치하든 상관없이 사용자 인증 정보를 한 번만 만들면 됩니다. 이후 단계에서 이러한 사용자 인증 정보를 부하 분산기의 대상 HTTPS 프록시와 연결하게 됩니다.

다음을 사용하여 사용자 인증 정보를 만들 수 있습니다.

Google Cloud 부하 분산기의 SSL 인증서 만들기 및 사용에 대한 자세한 내용은 SSL 인증서SSL 인증서 개요를 참조하세요.

다음 예시에서는 Google 관리 SSL 인증서를 만듭니다.

  1. 다음 환경 변수를 만듭니다.
    CERTIFICATE_NAME=YOUR_CERT_NAME
    DOMAIN_HOSTNAME=YOUR_DOMAIN_HOSTNAME 

    DOMAIN_HOSTNAME을 등록한 유효한 도메인 호스트 이름으로 설정합니다. 이후 단계에서 부하 분산기의 IP 주소를 가져오고 이 주소를 가리키도록 도메인 A 레코드를 업데이트하게 됩니다. 예를 들어 도메인 호스트 이름은 foo.example.com과 같습니다.

  2. gcloud compute ssl-certificates create 명령어를 실행합니다.
    gcloud compute ssl-certificates create $CERTIFICATE_NAME \
      --domains=$DOMAIN_HOSTNAME \
      --project $PROJECT_ID \
      --global

    인증서를 프로비저닝하려면 최대 1시간까지 걸릴 수 있습니다. 프로비저닝 상태를 확인하려면 다음 명령어를 실행합니다.

    gcloud compute ssl-certificates describe $CERTIFICATE_NAME \
     --global \
     --format="get(name,managed.status, managed.Status)"

8e단계: 전역 부하 분산기 만들기

  1. 상태 점검을 만듭니다.
    gcloud compute health-checks create https HEALTH_CHECK_NAME \
    --project $PROJECT_ID --port 443 --global \
    --request-path /healthz/ingress

    이 상태 확인을 사용하여 백엔드 서비스가 실행 중인지 확인합니다. 특정 프록시에 대해 고급 상태 확인을 구성하려면 상태 확인 수행을 참조하세요.

  2. 백엔드 서비스를 만듭니다.
    gcloud compute backend-services create PROXY_BACKEND_NAME \
    --project $PROJECT_ID \
    --protocol HTTPS \
    --health-checks HEALTH_CHECK_NAME \
    --port-name https \
    --timeout 302s \
    --connection-draining-timeout 300s \
    --global
  3. 다음 명령어를 사용하여 백엔드 서비스에 MIG를 추가합니다.
    gcloud compute backend-services add-backend PROXY_BACKEND_NAME \
    --project $PROJECT_ID --instance-group $MIG_NAME \
    --instance-group-region $REGION \
    --balancing-mode UTILIZATION --max-utilization 0.8 --global
  4. 다음 명령어를 사용하여 부하 분산 URL 지도를 만듭니다.
    gcloud compute url-maps create MIG_PROXY_MAP_NAME \
    --project $PROJECT_ID --default-service PROXY_BACKEND_NAME
  5. 다음 명령어를 사용하여 부하 분산 대상 HTTPS 프록시를 만듭니다.
    gcloud compute target-https-proxies create MIG_HTTPS_PROXY_NAME \
    --project $PROJECT_ID --url-map MIG_PROXY_MAP_NAME \
    --ssl-certificates $CERTIFICATE_NAME

8f단계: 예약된 IP 주소 가져오기 및 방화벽 규칙 만들기

부하 분산기에 IP 주소를 할당한 다음 부하 분산기가 MIG에 액세스하도록 허용하는 규칙을 만들어야 합니다. 이 단계는 단일 리전에 설치하든 멀티 리전에 설치하든 한 번만 실행하면 됩니다.

  1. 부하 분산기의 IP 주소를 예약합니다.
    gcloud compute addresses create ADDRESSES_NAME \
    --project $PROJECT_ID \
    --ip-version=IPV4 \
    --global
  2. 다음 명령어를 사용하여 전역 전달 규칙을 만듭니다.
    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
    --project $PROJECT_ID --address ADDRESSES_NAME --global \
    --target-https-proxy MIG_HTTPS_PROXY_NAME --ports 443
  3. 다음 명령어를 실행하여 예약된 IP 주소를 가져옵니다.
    gcloud compute addresses describe ADDRESSES_NAME \
    --project $PROJECT_ID --format="get(address)" --global
  4. 중요 단계: DNS 레코드가 관리되는 사이트, DNS 호스트, ISP로 이동하고 도메인의 DNS 레코드가 Google Cloud 부하 분산기의 IP 주소로 확인되는지 확인합니다. 이 주소는 마지막 단계에서 반환된 IP 값입니다. 자세한 내용은 부하 분산기의 IP 주소를 가리키도록 DNS A 및 AAAA 레코드 업데이트를 참조하세요.
  5. 다음 명령어를 사용하여 부하 분산기가 MIG에 액세스할 수 있도록 허용하는 방화벽 규칙을 만듭니다.
    gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --description "Allow incoming from GLB on TCP port 443 to Apigee Proxy" \
    --project $PROJECT_ID --network $VPC_NAME --allow=tcp:443 \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=gke-apigee-proxy

    IP 주소 범위 130.211.0.0/2235.191.0.0/16은 Google 부하 분산의 소스 IP 주소 범위입니다. 이 방화벽 규칙을 사용하면 Google Cloud Load Balancing이 MIG에 상태 확인을 요청할 수 있습니다.

Apigee 프로비저닝이 완료되었습니다. 샘플 프록시 배포로 이동합니다.

내부 라우팅(PSC)

이 섹션에서는 Private Service Connect(PSC)를 사용하여 모든 Google Cloud 프로젝트의 API 프록시에 대한 내부 액세스만 허용하는 방법을 설명합니다.

PSC로 내부 액세스를 구성하는 두 가지 옵션은 다음과 같습니다.

선택한 옵션에 따라 아래 탭을 선택하고 다음 단계를 따르세요.

서비스 엔드포인트

서비스 연결을 위한 PSC 서비스 엔드포인트 만들기

  1. 이전에 만든 인스턴스에서 서비스 연결을 가져옵니다.

    데이터 상주 없음

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
    "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    데이터 상주

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
    "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    다음 샘플 출력에서 serviceAttachment 값은 굵게 표시됩니다.

    {
      "instances": [
        {
          "name": "us-west1",
          "location": "us-west1",
          "host": "10.82.192.2",
          "port": "443",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "peeringCidrRange": "SLASH_22",
          "runtimeVersion": "1-7-0-20220228-190814",
          "ipRange": "10.82.192.0/22,10.82.196.0/28",
          "consumerAcceptList": [
            "875609189304"
          ],
          "serviceAttachment": "projects/bfac74a67a320c43a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw1"
        }
      ]
    }
  2. Private Service Connect 엔드포인트 만들기에 설명된 대로 이전 단계의 인스턴스 응답 본문에서 얻은 서비스 연결을 가리키는 PSC 서비스 엔드포인트를 만듭니다.
  3. 설정을 테스트하려면 내부 전용 액세스로 API 프록시 호출을 참조하세요.

내부 리전 LB

8a단계: 환경 변수 설정

이 섹션의 절차에서는 환경 변수를 사용하여 반복적으로 사용되는 문자열을 참조합니다. 환경 변수 정의에서 변수를 설정해야 합니다.

또한 다음 환경 변수를 설정합니다.

NEG_NAME=YOUR_NEG_NAME"
TARGET_SERVICE=YOUR_TARGET_SERVICE"
NETWORK_NAME=YOUR_NETWORK_NAME"
SUBNET_NAME=YOUR_SUBNET_NAME"

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

  • NEG_NAME: 네트워크 엔드포인트 그룹의 이름입니다.
  • TARGET_SERVICE: 연결할 서비스 연결입니다. 예를 들면 projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7입니다.
  • NETWORK_NAME: (선택사항) NEG가 생성되는 네트워크의 이름입니다. 이 매개변수를 생략하면 default 프로젝트 네트워크가 사용됩니다.
  • SUBNET_NAME: 제작자에 대한 비공개 연결에 사용되는 서브넷의 이름입니다. 서브넷 크기는 작을 수 있습니다. PSC NEG에는 서브넷에서 하나의 IP만 있으면 됩니다. Apigee의 경우 리전당 하나의 PSC NEG만 필요합니다. 서브넷은 VM 또는 다른 항목에서 공유하고 사용할 수 있습니다. 서브넷이 지정되지 않은 경우 네트워크 엔드포인트는 네트워크 엔드포인트 그룹이 생성된 리전의 모든 서브네트워크에 속할 수 있습니다.

8b단계: 프록시 전용 서브넷 만들기

gcloud compute networks subnets create testproxyonlysubnet \
--purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE --region=$RUNTIME_REGION --network=$NETWORK_NAME \
--range=100.0.0.0/24 --project=$PROJECT_ID

8c단계: 네트워크 엔드포인트 그룹(NEG) 만들기

  1. 이전에 만든 인스턴스에서 서비스 연결을 가져옵니다.

    데이터 상주 없음

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
    "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    데이터 상주

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
    "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    다음 샘플 출력에서 serviceAttachment 값은 굵게 표시됩니다.

    {
    "instances": [
      {
        "name": "us-west1",
        "location": "us-west1",
        "host": "10.82.192.2",
        "port": "443",
        "createdAt": "1645731488019",
        "lastModifiedAt": "1646504754219",
        "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
        "state": "ACTIVE",
        "peeringCidrRange": "SLASH_22",
        "runtimeVersion": "1-7-0-20220228-190814",
        "ipRange": "10.82.192.0/22,10.82.196.0/28",
        "consumerAcceptList": [
          "875609189304"
        ],
      "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7"
      }
    ]
    }
  2. 이전 단계의 인스턴스 응답 본문에서 얻은 서비스 연결을 가리키는 Private Service Connect NEG를 만듭니다.

    gcloud compute network-endpoint-groups create $NEG_NAME \
    --network-endpoint-type=private-service-connect \
    --psc-target-service=$TARGET_SERVICE \
    --region=$RUNTIME_LOCATION \
    --project=$PROJECT_ID
    

    $PROJECT_ID는 Apigee 조직과 이미 연결된 Cloud 프로젝트 또는 Apigee 런타임 인스턴스 생성consumerAcceptlist에 포함된 Cloud 프로젝트입니다.

8d단계: 리전 내부 부하 분산기 구성

  1. 부하 분산기의 내부 IPv4 주소를 예약합니다.
    gcloud compute addresses create ADDRESS_NAME \
    --ip-version=IPV4 --subnet=$SUBNET_NAME \
    --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    ADDRESS_NAME를 IP 주소 리소스의 이름으로 바꿉니다

    다음 명령어를 실행하여 예약된 IP 주소를 확인합니다.

    gcloud compute addresses describe ADDRESS_NAME \
    --format="get(address)" --region=$RUNTIME_LOCATION --project=$PROJECT_ID
  2. NEG의 백엔드 서비스를 만듭니다.
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTPS \
    --region=$RUNTIME_REGION \
    --project=$PROJECT_ID
  3. BACKEND_SERVICE_NAME을 백엔드 서비스 이름으로 바꿉니다.

  4. NEG에 백엔드 서비스를 추가합니다.
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
    --network-endpoint-group=$NEG_NAME \
    --region=$RUNTIME_LOCATION \
    --project=$PROJECT_ID

    다음을 바꿉니다.

    • NEG_NAME: 네트워크 엔드포인트 그룹의 이름입니다.
    • BACKEND_SERVICE_NAME을 백엔드 서비스 이름으로 바꿉니다.
  5. HTTPS 부하 분산기를 만들려면 HTTPS 대상 프록시에서 사용할 SSL 인증서 리소스가 있어야 합니다.

    자체 관리형 SSL 인증서 리소스를 만들려면 이 명령어를 사용합니다. 자체 관리형 SSL 인증서를 만들려면 로컬 비공개 키 파일과 로컬 인증서 파일이 필요합니다. 이러한 파일을 만들어야 하는 경우 자체 관리형 SSL 인증서 사용 1단계를 참조하세요.

    gcloud compute ssl-certificates create CERTIFICATE \
    --certificate LB_CERT \
    --private-key LB_PRIVATE_KEY
    --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    다음을 바꿉니다.

    • CERTIFICATE: 인증서의 이름입니다.
    • LB_CERT: 자체 관리형 인증서에 대한 PEM 형식 인증서의 경로입니다.
    • LB_PRIVATE_KEY: 자체 관리형 인증서에 대한 PEM 형식 비공개 키 파일의 경로입니다.
  6. 부하 분산기의 URL 맵을 만듭니다.

    URL 맵은 기본 백엔드 서비스를 참조해야 합니다. 방금 만든 백엔드 서비스를 기본값으로 설정합니다.

    gcloud compute url-maps create URL_MAP_NAME \
    --default-service=DEFAULT_BACKEND_SERVICE_NAME \
    --global --project=$PROJECT_ID

    다음을 바꿉니다.

    • URL_MAP_NAME: URL 맵의 이름입니다.
    • DEFAULT_BACKEND_SERVICE_NAME: 부하 분산기의 기본 백엔드 서비스 이름입니다. 요청된 호스트 이름과 일치하는 호스트 규칙이 없는 경우 기본값이 사용됩니다.
  7. SSL 인증서 리소스를 사용하여 대상 HTTPS 프록시를 만듭니다.

    gcloud compute target-https-proxies create PROXY_NAME \
    --url-map=URL_MAP_NAME \
    --ssl-certificates=CERTIFICATE \
    --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    다음을 바꿉니다.

    • PROXY_NAME: 대상 HTTPS 프록시의 이름입니다.
    • URL_MAP_NAME: URL 맵의 이름입니다.
    • CERTIFICATE: 인증서 리소스의 이름입니다.
  8. 전달 규칙을 만듭니다.
    gcloud compute forwarding-rules create FWD_RULE \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --address=ADDRESS_NAME \
    --target-https-proxy=PROXY_NAME \
    --ports=443 \
    --target-https-proxy-region=$RUNTIME_REGION \
    --region=$RUNTIME_REGION
    --project=$PROJECT_ID

    다음을 바꿉니다.

    • FWD_RULE: 전달 규칙의 이름입니다.
    • ADDRESS_NAME: 전달 규칙에 사용하도록 예약한 IP 주소 리소스입니다.
    • PROXY_NAME: 대상 HTTPS 프록시의 이름입니다.
  9. Apigee 프로비저닝이 완료되었습니다. 샘플 프록시 배포로 이동합니다.

외부 라우팅(PSC)

이 섹션에서는 Apigee 및 제어하는 VPC 사이의 통신을 허용하도록 Private Service Connect(PSC)를 사용하여 외부 라우팅을 구성하는 방법을 설명합니다. 외부 클라이언트에서 Apigee 런타임 인스턴스로 요청을 보내려면 먼저 이 작업을 수행해야 합니다.

8b단계: NEG 만들기 및 부하 분산기 구성

전역 또는 리전 부하 분산기를 만들 수 있습니다.

전역 외부 LB

전역 외부 HTTP(S) 부하 분산기(부하 분산 스키마를 EXTERNAL_MANAGED로 설정)를 구성합니다.

Private Service Connect NEG는 리전별이지만 이 구성의 다른 모든 부하 분산 구성요소는 전역적입니다.

  1. 환경 변수 정의에서 환경 변수를 설정했는지 확인합니다.
  2. 이전에 만든 인스턴스에서 서비스 연결을 가져옵니다.

    데이터 상주 없음

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    데이터 상주

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    다음 샘플 출력에서 serviceAttachment 값은 굵게 표시됩니다.

    {
      "instances": [
        {
          "name": "us-west1",
          "location": "us-west1",
          "host": "10.82.192.2",
          "port": "443",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "peeringCidrRange": "SLASH_22",
          "runtimeVersion": "1-7-0-20220228-190814",
          "ipRange": "10.82.192.0/22,10.82.196.0/28",
          "consumerAcceptList": [
            "875609189304"
          ],
          "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7"
        }
      ]
    }
  3. 이전 단계의 인스턴스 응답 본문에서 얻은 서비스 연결을 가리키는 Private Service Connect NEG를 만듭니다.

      gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=TARGET_SERVICE \
        --region=$RUNTIME_LOCATION \
        --network=NETWORK_NAME \
        --subnet=SUBNET_NAME \
        --project=$PROJECT_ID
    

    다음을 바꿉니다.

    • NEG_NAME: 네트워크 엔드포인트 그룹의 이름입니다.
    • TARGET_SERVICE: 연결할 서비스 연결입니다. 이전 명령어에서 반환된 서비스 연결 값을 사용합니다. 예를 들면 projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7입니다.
    • NETWORK_NAME: (선택사항) NEG가 생성되는 네트워크의 이름입니다. 이 매개변수를 생략하면 default 프로젝트 네트워크가 사용됩니다.
    • SUBNET_NAME: 제작자에 대한 비공개 연결에 사용되는 서브넷의 이름입니다. 서브넷 크기는 작을 수 있습니다. PSC NEG에는 서브넷에서 하나의 IP만 있으면 됩니다. Apigee의 경우 리전당 하나의 PSC NEG만 필요합니다. 서브넷은 VM 또는 다른 항목에서 공유하고 사용할 수 있습니다. 서브넷이 지정되지 않은 경우 네트워크 엔드포인트는 네트워크 엔드포인트 그룹이 생성된 리전의 모든 서브네트워크에 속할 수 있습니다.
    • $PROJECT_ID는 Apigee 조직과 이미 연결된 Cloud 프로젝트 또는 Apigee 런타임 인스턴스 생성consumerAcceptlist에 포함된 Cloud 프로젝트입니다. 프로젝트 ID를 포함할 환경 변수를 아직 만들지 않은 경우 다음 명령어 중 대부분에서 사용되므로 지금 만듭니다.
  4. 부하 분산기의 전역 외부 IPv4 주소를 예약합니다.
    gcloud compute addresses create ADDRESS_NAME \
        --ip-version=IPV4 --global --project=$PROJECT_ID

    ADDRESS_NAME를 IP 주소 리소스의 이름으로 바꿉니다

    다음 명령어를 실행하여 예약된 IP 주소를 확인합니다.

    gcloud compute addresses describe ADDRESS_NAME \
        --format="get(address)" --global --project=$PROJECT_ID
  5. NEG의 백엔드 서비스를 만듭니다.
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTPS \
        --global --project=$PROJECT_ID
  6. BACKEND_SERVICE_NAME을 백엔드 서비스 이름으로 바꿉니다.

  7. NEG에 백엔드 서비스를 추가합니다.
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --network-endpoint-group=NEG_NAME \
        --network-endpoint-group-region=REGION \
        --global --project=$PROJECT_ID

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: 백엔드 서비스의 이름입니다.
    • NEG_NAME: 네트워크 엔드포인트 그룹의 이름입니다.
    • REGION: 네트워크 엔드포인트 그룹의 리전입니다.
  8. 부하 분산기의 URL 맵을 만듭니다.

    URL 맵은 기본 백엔드 서비스를 참조해야 합니다. 방금 만든 백엔드 서비스를 기본값으로 설정합니다.

    gcloud compute url-maps create URL_MAP_NAME \
        --default-service=DEFAULT_BACKEND_SERVICE_NAME \
        --global --project=$PROJECT_ID

    다음을 바꿉니다.

    • URL_MAP_NAME: URL 맵의 이름입니다.
    • DEFAULT_BACKEND_SERVICE_NAME: 부하 분산기의 기본 백엔드 서비스 이름입니다. 요청된 호스트 이름과 일치하는 호스트 규칙이 없는 경우 기본값이 사용됩니다.
  9. 대상 HTTPS 프록시를 만듭니다.

    HTTPS 부하 분산기를 만들려면 HTTPS 대상 프록시에서 사용할 SSL 인증서 리소스가 있어야 합니다. Google 관리형 SSL 인증서 또는 자체 관리형 SSL 인증서를 사용하여 SSL 인증서 리소스를 만들 수 있습니다. Google Cloud는 이러한 인증서를 자동으로 가져오고 관리하며 갱신하므로 Google 관리형 인증서를 사용하는 것이 좋습니다.

    Google 관리형 인증서를 만들려면 도메인이 있어야 합니다.

    이 명령어를 사용하여 Google 관리형 SSL 인증서 리소스를 만듭니다.

    gcloud compute ssl-certificates create CERTIFICATE \
        --domains DOMAIN --project=$PROJECT_ID

    다음을 바꿉니다.

    • CERTIFICATE: 인증서의 이름입니다.
    • DOMAIN: 부하 분산기의 도메인 이름입니다.

    자체 관리형 SSL 인증서 리소스를 만들려면 이 명령어를 사용합니다. 자체 관리형 SSL 인증서를 만들려면 로컬 비공개 키 파일과 로컬 인증서 파일이 필요합니다. 이러한 파일을 만들어야 하는 경우 자체 관리형 SSL 인증서 사용 1단계를 참조하세요.

    gcloud compute ssl-certificates create CERTIFICATE \
        --certificate LB_CERT \
        --private-key LB_PRIVATE_KEY --project=$PROJECT_ID

    다음을 바꿉니다.

    • CERTIFICATE: 인증서의 이름입니다.
    • LB_CERT: 자체 관리형 인증서에 대한 PEM 형식 인증서의 경로입니다.
    • LB_PRIVATE_KEY: 자체 관리형 인증서에 대한 PEM 형식 비공개 키 파일의 경로입니다.

    SSL 인증서 리소스를 사용하여 대상 HTTPS 프록시를 만듭니다.

    gcloud compute target-https-proxies create PROXY_NAME \
        --url-map=URL_MAP_NAME \
        --ssl-certificates=CERTIFICATE --project=$PROJECT_ID

    다음을 바꿉니다.

    • PROXY_NAME: 대상 HTTPS 프록시의 이름입니다.
    • URL_MAP_NAME: URL 맵의 이름입니다.
    • CERTIFICATE: 인증서 리소스의 이름입니다.
  10. 전달 규칙을 만듭니다.
    gcloud compute forwarding-rules create FWD_RULE \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=PREMIUM \
        --address=ADDRESS_NAME \
        --target-https-proxy=PROXY_NAME \
        --ports=443 \
        --global --project=$PROJECT_ID

    다음을 바꿉니다.

    • FWD_RULE: 전달 규칙의 이름입니다.
    • ADDRESS_NAME: 전달 규칙에 사용하도록 예약한 IP 주소 리소스입니다.
    • PROXY_NAME: 대상 HTTPS 프록시의 이름입니다.

리전 외부 LB

리전 외부 HTTP(S) 부하 분산기를 구성합니다. 외부 HTTP(S) 부하 분산기 개요도 참조하세요.

  1. 환경 변수 정의에서 변수를 설정해야 합니다.
  2. 프록시 전용 서브넷 만들기:
    gcloud compute networks subnets create SUBNET_NAME \
          --purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE \
          --region=$RUNTIME_LOCATION --network=NETWORK_NAME \
          --range=100.0.0.0/24 --project=$PROJECT_ID

    다음을 바꿉니다.

    • SUBNET_NAME: 서브넷의 이름입니다.
    • (선택사항) NETWORK_NAME을 서브넷이 생성되는 네트워크의 이름으로 바꿉니다. 이 매개변수를 생략하면 기본 프로젝트 네트워크가 사용됩니다.
  3. 이전에 만든 인스턴스에서 서비스 연결을 가져옵니다.

    데이터 상주 없음

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    데이터 상주

    curl -i -X GET -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"

    다음 샘플 출력에서 serviceAttachment 값은 굵게 표시됩니다.

    {
      "instances": [
        {
          "name": "us-west1",
          "location": "us-west1",
          "host": "10.82.192.2",
          "port": "443",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "peeringCidrRange": "SLASH_22",
          "runtimeVersion": "1-7-0-20220228-190814",
          "ipRange": "10.82.192.0/22,10.82.196.0/28",
          "consumerAcceptList": [
            "875609189304"
          ],
          "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7"
        }
      ]
    }
  4. 네트워크 엔드포인트 그룹 만들기
    gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=TARGET_SERVICE \
        --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    다음을 바꿉니다.

    • NEG_NAME: 네트워크 엔드포인트 그룹의 이름입니다.
    • TARGET_SERVICE: 연결할 서비스 연결의 이름입니다. 예를 들면 projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7입니다.
  5. NEG의 백엔드 서비스를 만듭니다.
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --protocol=HTTPS \
      --region=$RUNTIME_LOCATION  \
      --project=$PROJECT_ID
  6. BACKEND_SERVICE_NAME을 백엔드 서비스 이름으로 바꿉니다.

  7. NEG에 백엔드 서비스를 추가합니다.
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --network-endpoint-group=NEG_NAME \
      --region=$RUNTIME_LOCATION  \
      --project=$PROJECT_ID

    다음을 바꿉니다.

    • BACKEND_SERVICE_NAME: 백엔드 서비스의 이름입니다.
    • NEG_NAME: 네트워크 엔드포인트 그룹의 이름입니다.
  8. 부하 분산기의 URL 맵을 만듭니다.

    URL 맵은 기본 백엔드 서비스를 참조해야 합니다. 방금 만든 백엔드 서비스를 기본값으로 설정합니다.

    gcloud compute url-maps create URL_MAP_NAME \
      --default-service=DEFAULT_BACKEND_SERVICE_NAME \
      --region=$RUNTIME_LOCATION  \
      --project=$PROJECT_ID

    다음을 바꿉니다.

    • URL_MAP_NAME: URL 맵의 이름입니다.
    • DEFAULT_BACKEND_SERVICE_NAME: 부하 분산기의 기본 백엔드 서비스 이름입니다. 요청된 호스트 이름과 일치하는 호스트 규칙이 없는 경우 기본값이 사용됩니다.
  9. 대상 HTTPS 프록시를 만듭니다.

    HTTPS 부하 분산기를 만들려면 HTTPS 대상 프록시에서 사용할 SSL 인증서 리소스가 있어야 합니다.

    자체 관리형 SSL 인증서 리소스를 만들려면 이 명령어를 사용합니다. 자체 관리형 SSL 인증서를 만들려면 로컬 비공개 키 파일과 로컬 인증서 파일이 필요합니다. 이러한 파일을 만들어야 하는 경우 자체 관리형 SSL 인증서 사용 1단계를 참조하세요.

    gcloud compute ssl-certificates create CERTIFICATE \
      --certificate LB_CERT \
      --private-key LB_PRIVATE_KEY --region=$RUNTIME_LOCATION \
      --project=$PROJECT_ID

    다음을 바꿉니다.

    • CERTIFICATE: 인증서의 이름입니다.
    • LB_CERT: 자체 관리형 인증서에 대한 PEM 형식 인증서의 경로입니다.
    • LB_PRIVATE_KEY: 자체 관리형 인증서에 대한 PEM 형식 비공개 키 파일의 경로입니다.

    SSL 인증서 리소스를 사용하여 대상 HTTPS 프록시를 만듭니다.

    gcloud compute target-https-proxies create PROXY_NAME \
      --url-map=URL_MAP_NAME --region=$RUNTIME_LOCATION \
      --ssl-certificates=CERTIFICATE --project=$PROJECT_ID

    다음을 바꿉니다.

    • PROXY_NAME: 대상 HTTPS 프록시의 이름입니다.
    • URL_MAP_NAME: URL 맵의 이름입니다.
    • CERTIFICATE: 인증서 리소스의 이름입니다.
  10. 부하 분산기의 리전 외부 주소를 예약합니다. 네트워크 등급은 STANDARD로 설정해야 합니다.
    gcloud compute addresses create ADDRESS_NAME \
          --region=$RUNTIME_LOCATION --network-tier=STANDARD \
          --project=$PROJECT_ID

    ADDRESS_NAME를 IP 주소 리소스의 이름으로 바꿉니다

    다음 명령어를 실행하여 예약된 IP 주소를 확인합니다.

    gcloud compute addresses describe ADDRESS_NAME \
          --format="get(address)" --region=$RUNTIME_LOCATION \
          --project=$PROJECT_ID
  11. 전달 규칙을 만듭니다.
    gcloud compute forwarding-rules create FWD_RULE \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network-tier=STANDARD \
      --address=ADDRESS_NAME \
      --target-https-proxy=PROXY_NAME \
      --ports=443  --region=$RUNTIME_LOCATION \
      --target-https-proxy-region=$RUNTIME_LOCATION --project=$PROJECT_ID

    다음을 바꿉니다.

    • FWD_RULE: 전달 규칙의 이름입니다.
    • ADDRESS_NAME: 전달 규칙에 사용하도록 예약한 IP 주소 리소스입니다.
    • PROXY_NAME: 대상 HTTPS 프록시의 이름입니다.

Apigee 프로비저닝이 완료되었습니다. 샘플 프록시 배포로 이동합니다.

9단계: 샘플 프록시 배포

  1. GitHub에서 샘플 프록시를 다운로드합니다. 프록시 대상은 일반적으로 사용되는 공개 요청 및 응답 서비스인 httpbin.org 서비스입니다.
  2. Apigee apis API를 사용하여 API 프록시 번들을 런타임에 업로드합니다.

    데이터 상주 없음

    curl -i -X POST -H "Authorization: Bearer $AUTH" \
        -H "Content-Type:multipart/form-data" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/apis?name=httpbin&action=import" \
        -F 'file=@PATH_TO_ZIP_FILE/httpbin_rev1_2020_02_02.zip'

    데이터 상주

    curl -i -X POST -H "Authorization: Bearer $AUTH" \
        -H "Content-Type:multipart/form-data" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/apis?name=httpbin&action=import" \
        -F 'file=@PATH_TO_ZIP_FILE/httpbin_rev1_2020_02_02.zip'

    여기서 PATH_TO_ZIP_FILE은 다운로드한 ZIP 파일이 포함된 디렉터리의 경로입니다.

  3. 이전에 만든 환경에 API 프록시를 배포합니다.

    데이터 상주 없음

    curl -i -H "Authorization: Bearer $AUTH" -X POST \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"

    데이터 상주

    curl -i -H "Authorization: Bearer $AUTH" -X POST \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"
  4. 이 API 호출로 배포가 성공적으로 완료되었는지 확인합니다.

    데이터 상주 없음

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"

    데이터 상주

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"
  5. API 프록시를 호출합니다.

    다음 명령어를 실행하여 모든 네트워크가 사용 설정된 머신에서 API 프록시에 요청을 보냅니다.

    curl -i -H "Host: ENV_GROUP_HOSTNAME" \
        "https://ENV_GROUP_HOSTNAME/httpbin/headers"

    필요한 경우 이 API를 사용해서 ENV_GROUP_HOSTNAME 값을 가져올 수 있습니다.

    데이터 상주 없음

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups"

    데이터 상주

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups"

    CONNECT_CR_SRVR_HELLO:sslv3 alert handshake failure와 비슷한 오류가 발생하면 이전에 만든 SSL 인증서가 프로비저닝되었는지 확인합니다. 이 명령어를 사용하여 프로비저닝 상태를 확인합니다. 인증서가 프로비저닝되었으면 상태가 ACTIVE입니다.

    gcloud compute ssl-certificates describe CERTIFICATE \
        --global \
        --format="get(name,managed.status, managed.Status)"

    성공하면 샘플 API 프록시가 다음과 비슷한 응답을 반환합니다.

    {
        "headers": {
          "Accept": "*/*",
          "Grpc-Trace-Bin": "AAD/8WC/I4AUSrMEch0E9yj+AYck1x9afwckAgA",
          "Host": "httpbin.org",
          "Traceparent": "00-fff160bf2380144ab304721d04f728fe-8724d71f5a7f0724-00",
          "User-Agent": "curl/7.77.0",
          "X-Amzn-Trace-Id": "Root=1-61d785ef-7613aa8a7fde7a910441fab9",
          "X-B3-Sampled": "0",
          "X-B3-Spanid": "8724d71f5a7f0724",
          "X-B3-Traceid": "fff160bf2380144ab304721d04f728fe",
          "X-Cloud-Trace-Context": "fff160bf2380144ab304721d04f728fe/9738144823944087332;o=0",
          "X-Envoy-Attempt-Count": "1"
        }
    }

추가 문제 해결 정보를 포함하여 프록시 배포에 대한 자세한 내용은 API 프록시 배포를 참조하세요.