Aprovisionar una organización de pago sin emparejamiento de VPC

Aprovisionar una organización de pago sin emparejamiento de VPC

Esta página se aplica a Apigee, pero no a Apigee Hybrid.

Consulta la documentación de Apigee Edge.

En este documento se describe cómo instalar y configurar Apigee desde la línea de comandos sin peerings de VPC. Estos pasos se aplican a los modelos de precios de suscripción y de pago por uso de las organizaciones de pago, tanto si tienen habilitada la residencia de datos como si no.

Consulta también Opciones de aprovisionamiento.

Limitaciones

La opción de instalación de peering no VPC que se describe en este documento tiene algunas limitaciones:

Para ver una lista completa de las funciones y los enfoques de redes que se admiten y no se admiten en el emparejamiento que no es de VPC, consulta Cómo elegir una opción de red.

Resumen de los pasos

Los pasos de aprovisionamiento son los siguientes:

Paso 1: Define las variables del entorno

Configura gcloud y define las variables de entorno que se usarán en pasos posteriores:

  1. Asegúrate de que has completado los requisitos de configuración que se indican en la sección Antes de empezar.
  2. Debes tener instalado el SDK de Google Cloud. Si necesitas instalarlo, consulta el artículo sobre instalar el SDK de Google Cloud.
  3. Inicializa el SDK de Cloud, tal como se describe en Inicializar la CLI de gcloud, o asegúrate de que el proyecto de Google Cloud que has creado en Requisitos sea el proyecto predeterminado de gcloud.
  4. Define las siguientes variables de entorno en el terminal de comandos. Selecciona la pestaña que corresponda al tipo de organización que necesites: Sin residencia de datos o con Residencia de datos:

    Sin residencia de datos

    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"

    Donde:

    • AUTH define el encabezado Authentication con un token de portador. Usarás este encabezado al llamar a las APIs de Apigee. Ten en cuenta que el token caduca al cabo de un periodo y, cuando lo haga, puedes volver a generarlo con el mismo comando. Para obtener más información, consulta la página de referencia del comando print-access-token.
    • PROJECT_ID es el ID del proyecto de Cloud que has creado en los requisitos previos.
    • PROJECT_NUMBER es el número del proyecto de Cloud que has creado en la sección Requisitos.
    • RUNTIME_LOCATION es la ubicación física en la que se encuentra la instancia de Apigee que crearás más adelante. Para ver una lista de las ubicaciones de tiempo de ejecución disponibles, consulta Ubicaciones de Apigee.

    • ANALYTICS_REGION es la ubicación física en la que se almacenarán los datos de analíticas de Apigee. Para ver una lista de las regiones disponibles de Apigee API Analytics, consulta Ubicaciones de Apigee.

      Tanto RUNTIME_LOCATION como ANALYTICS_REGION pueden ser la misma región, pero no es obligatorio.

    • BILLING_TYPE es el tipo de facturación de la organización que crees. Los valores válidos son estos:

    Residencia de datos

    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"

    Donde:

    • AUTH define el encabezado Authentication con un token de portador. Usarás este encabezado al llamar a las APIs de Apigee. Ten en cuenta que el token caduca al cabo de un periodo y, cuando lo haga, puedes volver a generarlo con el mismo comando. Para obtener más información, consulta la página de referencia del comando print-access-token.
    • PROJECT_ID es el ID del proyecto de Cloud que has creado en los requisitos previos.
    • PROJECT_NUMBER es el número del proyecto de Cloud que has creado en la sección Requisitos.
    • RUNTIME_LOCATION es la ubicación física en la que se encuentra la instancia de Apigee que crearás más adelante. Para ver una lista de las ubicaciones de tiempo de ejecución disponibles, consulta Ubicaciones de Apigee.

      La ubicación del tiempo de ejecución debe estar dentro de la ubicación del plano de control.
    • CONTROL_PLANE_LOCATION es la ubicación física en la que se almacenarán los datos del plano de control de Apigee. Para ver una lista de las ubicaciones del plano de control disponibles, consulta Ubicaciones de Apigee.
    • CONSUMER_DATA_REGION es una subregión de la región del plano de control. Debes especificar tanto CONTROL_PLANE_LOCATION como CONSUMER_DATA_REGION. Para ver una lista de las regiones de datos de consumidores disponibles, consulta Ubicaciones de Apigee.
    • BILLING_TYPE es el tipo de facturación de la organización que crees. Los valores válidos son estos:

  5. (Opcional) Comprueba tu trabajo repitiendo los valores que acabas de definir. Ten en cuenta que, si quieres usar una variable en tus comandos, debes escribir el nombre de la variable precedido del signo de dólar ($).

    Sin residencia de datos

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

    Las respuestas a tus comandos de echo deberían tener un aspecto similar al siguiente:

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

    Residencia de datos

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

    Las respuestas a tus comandos de echo deberían tener un aspecto similar al siguiente:

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

Paso 2: Habilita las API

  1. Apigee requiere que habilites varias APIs de Google Cloud. Para habilitarlos, ejecuta el siguiente comando services enable:

    gcloud services enable apigee.googleapis.com \
        apihub.googleapis.com \
        compute.googleapis.com \
        cloudkms.googleapis.com --project=$PROJECT_ID
  2. (Opcional) Para comprobar tu trabajo, usa el comando services list para mostrar todas las APIs habilitadas:

    gcloud services list

    En la respuesta se muestran todos los servicios habilitados, incluidas las APIs que acabas de habilitar.

Paso 3: Crea la identidad de servicio de Apigee

  1. Crea la identidad de servicio de Apigee:

    gcloud beta services identity create --service=apigee.googleapis.com \
      --project=$PROJECT_ID
  2. Comprueba que el agente se haya creado correctamente. En la respuesta se debe mostrar el nombre del agente con el siguiente formato: service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com. por ejemplo:

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

Paso 4: Crea una organización

Antes de crear una organización, debes crear un conjunto de claves y una clave de cifrado de la base de datos de tiempo de ejecución (consulta el paso 1) y, si usas la residencia de datos, conjuntos de claves y claves de cifrado del plano de control (consulta el paso 2). Estas claves de Cloud KMS cifran los datos que se almacenan y replican en las ubicaciones del tiempo de ejecución y del plano de control. Apigee usa estas entidades para cifrar datos de aplicaciones, como KVMs, caché y secretos de clientes, que se almacenan en la base de datos. Para obtener más información, consulta el artículo Acerca de las claves de cifrado de Apigee.

  1. Crea un conjunto de claves y una clave de encriptado de la base de datos de tiempo de ejecución.

    1. Define una variable de entorno para la ubicación del anillo y la clave de cifrado de tu base de datos de tiempo de ejecución. De esta forma, se mantiene la coherencia al crearlos y te resulta más fácil seguir la documentación.

      El valor es la ubicación física donde se almacenan el conjunto de claves y la clave de cifrado de la base de datos de tiempo de ejecución.

      Una sola región

      Configuraciones de una sola región: en las que solo tienes una instancia en una región. Elige entre las ubicaciones regionales de KMS admitidas.

      Por ejemplo:

      RUNTIMEDBKEY_LOCATION="us-west1"

      El valor puede ser el mismo que el de $RUNTIME_LOCATION (también una región), pero no es obligatorio. Sin embargo, puede que el rendimiento mejore si son iguales.

      Multirregional

      Configuraciones multirregionales: elige entre las ubicaciones multirregionales admitidas (como us o europe) o las ubicaciones birregionales.

      Por ejemplo:

      RUNTIMEDBKEY_LOCATION="us"

      Si tienes una configuración multirregional en EE. UU., te recomendamos que uses us para tu ubicación, si es posible. Si no, usa nam4.

    2. Define variables de entorno para los conjuntos de claves y los nombres de las claves de la base de datos.

      El nombre del conjunto de claves debe ser único en tu organización. Si creas una segunda región o una posterior, el nombre no puede ser el mismo que el de otros conjuntos de claves.

      RUNTIMEDB_KEY_RING_NAME=YOUR_DB_KEY_RING_NAME
      RUNTIMEDB_KEY_NAME=YOUR_DB_KEY_NAME
    3. (Opcional) Comprueba tu trabajo repitiendo los valores que acabas de definir. Recuerda que, si quieres usar una variable en tus comandos, debes escribir el nombre de la variable precedido de un signo de dólar ($).
      echo $RUNTIMEDBKEY_LOCATION
      echo $RUNTIMEDB_KEY_RING_NAME
      echo $RUNTIMEDB_KEY_NAME
    4. Para crear un conjunto de claves:
      gcloud kms keyrings create $RUNTIMEDB_KEY_RING_NAME \
        --location $RUNTIMEDBKEY_LOCATION --project $PROJECT_ID

      La ubicación de la clave de cifrado de la base de datos de tiempo de ejecución de Apigee admite todas las ubicaciones de Cloud KMS que admiten Cloud HSM y Cloud EKM.

    5. Para crear una clave, sigue estos pasos:

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

      Este comando crea la clave y la añade al conjunto de claves.

      Obtén el ID de la clave:

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

      El ID de clave tiene la siguiente sintaxis (similar a una ruta de archivo):

      projects/PROJECT_ID/locations/RUNTIMEDBKEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME
    6. Coloca el ID de la clave en una variable de entorno. Usarás esta variable en un comando posterior:

      RUNTIMEDB_KEY_ID=YOUR_RUNTIMEDB_KEY_ID
    7. Concede acceso al agente de servicio de Apigee para que use la nueva clave:

      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

      Este comando vincula la clave al agente de servicio de Apigee.

      Si esta solicitud se completa correctamente, gcloud responde con algo similar a lo siguiente:

      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

      Si aparece un error como el siguiente:

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

      Asegúrate de haber usado el número del proyecto y no su nombre en la dirección de correo de la cuenta de servicio.

  2. Si usas la residencia de datos, crea un conjunto de claves y una clave de encriptado del plano de control. Si no usa la residencia de datos, vaya al paso 3.
  3. Sigue estos pasos para crear un conjunto de claves y una clave de cifrado del plano de control.

    1. Define una variable de entorno para la ubicación del anillo y la clave de cifrado de la base de datos del plano de control:
      CONTROL_PLANE_LOCATION=YOUR_CONTROL_PLANE_LOCATION
      CONSUMER_DATA_REGION=YOUR_CONSUMER_DATA_REGION

      Donde:

      • CONTROL_PLANE_LOCATION es la ubicación física en la que se almacenarán los datos del plano de control de Apigee. Para ver una lista de las ubicaciones del plano de control disponibles, consulta Ubicaciones de Apigee.
      • CONSUMER_DATA_REGION es una subregión de la región del plano de control. Debes especificar tanto CONTROL_PLANE_LOCATION como CONSUMER_DATA_REGION. Para ver una lista de las regiones de datos de consumidores disponibles, consulta Ubicaciones de Apigee.
    2. Define variables de entorno para los conjuntos de claves y los nombres de claves de la base de datos del plano de control.

      El nombre del conjunto de claves debe ser único en tu organización.

      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

      Donde:

      • CONTROL_PLANE_KEY_RING_NAME es el nombre del conjunto de claves que usarás para identificar tu conjunto de claves de cifrado del plano de control.
      • CONTROL_PLANE_KEY_NAME es el nombre de la clave que usarás para identificar tu clave de cifrado del plano de control.
      • CONSUMER_DATA_KEY_RING_NAME es el nombre del conjunto de claves que usarás para identificar tu conjunto de claves de cifrado de la región de datos de consumidor.
      • CONSUMER_DATA_KEY_NAME es el nombre de la clave que usarás para identificar tu clave de encriptado de la región de datos de consumidor.
    3. Para crear un conjunto de claves:
      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. Para crear una clave, sigue estos pasos:
      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

      Este comando crea la clave y la añade al conjunto de claves.

      Obtén el ID de la clave:

      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

      El ID de clave tiene la siguiente sintaxis (similar a una ruta de archivo):

      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. Coloca el ID de la clave en una variable de entorno. Usarás esta variable en un comando posterior:
      CONTROL_PLANE_KEY_ID=YOUR_CONTROL_PLANE_KEY_ID
      
      CONSUMER_DATA_KEY_ID=YOUR_CONSUMER_DATA_KEY_ID
    6. Concede acceso al agente de servicio de Apigee para que use la nueva clave:
      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
      

      Este comando vincula la clave al agente de servicio de Apigee. Si esta solicitud se completa correctamente, gcloud responde con un mensaje similar al siguiente:

      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

      Si aparece un error como el siguiente:

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

      Asegúrate de haber usado el número del proyecto y no el nombre del proyecto en la dirección de correo de la cuenta de servicio.

    Consulta también la sección Solución de problemas de CMEK.

  4. Para crear la organización, envía la siguiente solicitud a la API organizations de Apigee:

    Sin residencia de datos

    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"'",
        "disableVpcPeering":"true",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

    Donde:

    • -d define la carga útil de datos de la solicitud. Esta carga útil debe incluir lo siguiente:
      • name: identifica tu nueva organización. Debe ser el mismo nombre que el ID de tu proyecto.

      • analyticsRegion: especifica la ubicación física en la que se almacenarán sus datos analíticos.

      • runtimeType: asigna el valor CLOUD.
      • billingType: especifica el tipo de facturación de la organización creada.
      • disableVpcPeering: defina el valor true si no quiere usar el emparejamiento de VPC. Predeterminado: false
      • runtimeDatabaseEncryptionKeyName: el ID de la clave de cifrado de la aplicación que has creado en el paso anterior. Recuerda que el ID tiene una estructura similar a la de una ruta de archivo. Por ejemplo:
        projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    Residencia de datos

    Crea una organización con la 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"'",
        "disableVpcPeering":"true",
        "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'"
      }'

    Donde:

    -d define la carga útil de datos de la solicitud. Esta carga útil debe incluir lo siguiente:

    • name: identifica tu nueva organización. Debe ser el mismo nombre que el ID de tu proyecto.
    • runtimeType: asigna el valor CLOUD.
    • billingType: especifica el tipo de facturación de la organización creada.
    • controlPlaneEncryptionKeyName: es el ID de la clave del plano de control.
    • apiConsumerDataLocation: también debes especificar una subregión para que la usen los recursos internos. Consulta Regiones de residencia de datos para ver los valores admitidos.
    • apiConsumerDataEncryptionKeyName: es el ID de la clave de la región de tus datos de consumidor.
    • disableVpcPeering: defina el valor true si no quiere usar el emparejamiento de VPC. Predeterminado: false
    • runtimeDatabaseEncryptionKeyName: el ID de la clave de cifrado de la aplicación que has creado en el paso anterior. Recuerda que el ID tiene la estructura de una ruta de archivo. Por ejemplo:
      projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    Después de ejecutar este comando, Apigee inicia una operación de larga duración, que puede tardar unos minutos en completarse.

    Si se produce un error, comprueba que has usado comillas alrededor de los valores de las variables en la carga útil de datos. Asegúrate de que la variable $PROJECT_ID esté entre comillas dobles, simples y dobles, como se muestra en el siguiente ejemplo:

    "'"$PROJECT_ID"'"

    Si usa cadenas simples (no variables de entorno) para los valores de las solicitudes, puede incluirlas entre comillas dobles en la cadena de carga útil entre comillas simples, como se muestra en el siguiente ejemplo:

    '{ "name":"my-gcp-project", ... }'
  5. Espera unos minutos.
  6. Para comprobar el estado de tu solicitud de creación, puedes enviar una solicitud GET a la API List organizations de Apigee, como se muestra en el siguiente ejemplo:

    Sin residencia de datos

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

    Residencia de datos

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

    Si ves esta respuesta, significa que la creación de la organización aún no se ha completado:

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

    Si la operación se realiza correctamente, el objeto de respuesta indicará "state": "ACTIVE" y podrás continuar con el siguiente paso.

    Si Apigee devuelve una respuesta de error HTTP, consulta Crear una organización de Apigee.

Paso 5: Crea una instancia de entorno de ejecución

Una instancia de tiempo de ejecución es el lugar donde se almacenan tu proyecto de Apigee y los servicios relacionados. Proporciona el endpoint visible para los usuarios de tus servicios. Para crear una instancia de tiempo de ejecución:

  1. Comprueba que Apigee haya terminado de crear tu organización. Has enviado una solicitud para crear una organización en Crear una organización de Apigee, pero debes asegurarte de que se haya completado antes de continuar.

    Para ello, envía la siguiente solicitud a la API Organizations:

    Sin residencia de datos

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

    Residencia de datos

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

    Si la organización existe (y tienes los permisos adecuados para verla), Apigee responde con información detallada sobre ella. Si Apigee responde con un error, espera un par de minutos y vuelve a enviar la solicitud.

  2. Al igual que en la tarea anterior, en la que creaste una clave de cifrado para la base de datos, ahora debes crear una clave de Cloud KMS que se use para cifrar los datos del lado del servidor. Para empezar, define las siguientes variables de entorno:
    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. Donde:

    • INSTANCE_NAME: nombre de la nueva instancia. Por ejemplo, my-runtime-instance. El nombre debe empezar por una letra en minúscula, tener una longitud máxima de 32 caracteres y solo puede incluir letras en minúscula, números y guiones. No puede empezar ni acabar con un guion y debe tener al menos dos caracteres.
    • RUNTIME_LOCATION es el lugar físico en el que se aloja tu clúster. Los valores válidos son cualquier ubicación permitida por Compute Engine. (Consulta las regiones y zonas disponibles). En este ejemplo se usa us-west1.
    • DISK_KEY_RING_NAME es el nombre del conjunto de claves de cifrado de disco.
    • DISK_KEY_NAME es el nombre de la clave de cifrado de disco.
  4. Crea una clave de encriptado del disco:
    1. Crea un conjunto de claves de disco:
      gcloud kms keyrings create $DISK_KEY_RING_NAME \
        --location $RUNTIME_LOCATION \
        --project $PROJECT_ID

      El conjunto de claves de disco debe estar en la misma ubicación que la instancia. Cada instancia y llavero debe tener su propia ubicación.

    2. Crea una clave de disco:
      gcloud kms keys create $DISK_KEY_NAME \
        --keyring $DISK_KEY_RING_NAME \
        --location $RUNTIME_LOCATION \
        --purpose "encryption" \
        --project $PROJECT_ID

      Se puede hacer referencia a la clave mediante su ruta de clave. Puedes obtener la ruta de la clave con el siguiente comando:

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

      La ruta de la clave tiene un aspecto similar al siguiente:

      projects/PROJECT_ID/locations/RUNTIME_LOCATION/keyRings/my-disk-key-ring/cryptoKeys/my-disk-key
    3. Coloca la ruta de la clave en una variable de entorno. Usarás esta variable en un comando posterior:

      DISK_KEY_ID=YOUR_DISK_KEY_ID

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

    4. Concede acceso al agente de servicio de Apigee para que use la nueva clave:

      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

      Este comando vincula la clave al agente de servicio de Apigee.

    Para obtener más información, consulta el artículo Acerca de las claves de cifrado de Apigee.

  5. Para crear una instancia de tiempo de ejecución para tu proyecto, envía una solicitud POST a la API Instances de Apigee:

    Sin residencia de datos

    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"'"]
      }'

    Residencia de datos

    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"'"]
      }'

    Donde:

    • consumerAcceptList (Opcional) Especifica una lista de IDs de proyectos de Google Cloud que pueden conectarse de forma privada al adjunto de servicio de la VPC de Apigee. Una vinculación de servicio es una entidad que se usa con Private Service Connect de Google Cloud para permitir que los productores de servicios (en este caso, Apigee) expongan servicios a los consumidores (en este caso, uno o varios proyectos de Cloud de tu propiedad). De forma predeterminada, usamos el proyecto de Cloud que ya está asociado a tu organización de Apigee. Por ejemplo: "consumerAcceptList": ["project1", "project2", "project3"]

      Ten en cuenta que también puedes definir y cambiar la lista de proyectos aceptados en la interfaz de usuario de la instancia. Para obtener más información, consulta el artículo Gestionar instancias.

    Esta solicitud puede tardar hasta 20 minutos en completarse, ya que Apigee debe crear e iniciar un nuevo clúster de Kubernetes, instalar los recursos de Apigee en ese clúster y configurar el balanceo de carga.

    Si Apigee devuelve un error, consulta Crear una instancia.

  6. Para comprobar el estado de tu solicitud de creación de instancias de tiempo de ejecución, ejecuta el siguiente comando. Cuando el estado sea ACTIVO, puedes continuar con el siguiente paso.

    Sin residencia de datos

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

    Residencia de datos

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

Paso 6: Crea un entorno

Para crear un entorno y asociarlo al tiempo de ejecución en la línea de comandos, sigue estos pasos:

  1. Define las variables de entorno que se van a usar en esta sección. Las variables de entorno específicas que crees dependerán de si estás creando un entorno para una organización con una suscripción o con pago por uso.

    Suscripción

    En un entorno de suscripción, crea estas variables:

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

    Donde:

    • ENVIRONMENT_NAME es un nombre de cadena. Por ejemplo: test
    • ENV_GROUP_NAME es un nombre de cadena. Por ejemplo: test-group
    • ENV_GROUP_HOSTNAME es un nombre de host de dominio válido. Por ejemplo: foo.example.com

    Pago por uso

    En un entorno de pago por uso, cree estas variables:

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

    Donde:

    • ENVIRONMENT_NAME es un nombre de cadena. Por ejemplo: test
    • ENVIRONMENT_TYPE es el tipo de entorno de este entorno y solo se aplica a los usuarios de Pay-as-you-go, que deben especificar uno de estos valores: BASE, INTERMEDIATE o COMPREHENSIVE. Los demás usuarios deben omitir el tipo de entorno.
    • ENV_GROUP_NAME es un nombre de cadena. Por ejemplo: test-group
    • ENV_GROUP_HOSTNAME es un nombre de host de dominio válido. Por ejemplo: foo.example.com
  2. Crea un entorno con la API Environments. Los comandos específicos que utilices dependerán de si estás creando un entorno para una organización de suscripción o de pago por uso.

    Suscripción

    Para un nuevo entorno de suscripción, usa el siguiente comando:

    Sin residencia de datos

    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"'"
      }'

    Residencia de datos

    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 crea un nuevo entorno.

    Pago por uso

    Para crear un entorno de pago por uso, usa el siguiente comando:

    Sin residencia de datos

    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"'"
      }'

    Residencia de datos

    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 crea un nuevo entorno.

  3. Antes de continuar, comprueba que Apigee ha terminado de crear el nuevo entorno llamando a la API Environments:

    Sin residencia de datos

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

    Residencia de datos

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

    Apigee responde con una lista de los entornos disponibles. Por ejemplo, si el nombre de tu entorno es test, Apigee responde con lo siguiente:

    [
      "test"
    ]
  4. Adjunta el nuevo entorno a la instancia del entorno de ejecución:

    Sin residencia de datos

    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"'"
        }'

    Residencia de datos

    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"'"
        }'

    Esta operación puede tardar varios minutos en completarse. Para comprobar si se ha completado el adjunto, ejecuta este comando:

    Sin residencia de datos

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

    Residencia de datos

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

    Cuando veas un resultado como el siguiente, puedes ir al paso siguiente:

    {
      "attachments": [
        {
          "name": "ed628782-c893-4095-b71c-f4731805290a",
          "environment": "test",
          "createdAt": "1641604447542"
        }
      ]
    }
  5. Crea un grupo de entornos con el siguiente comando. Para obtener más información, consulta el artículo Acerca de los entornos y los grupos de entornos.

    Sin residencia de datos

    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"'"]
      }'

    Residencia de datos

    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. Espera a que termine la operación. Puedes consultar el estado de tu nuevo grupo con una solicitud como la siguiente:

    Sin residencia de datos

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

    Residencia de datos

    curl -i -H "Authorization: Bearer $AUTH" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME"
  7. Asocia el nuevo entorno al nuevo grupo de entornos con el siguiente comando:

    Sin residencia de datos

    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"'"
      }'

    Residencia de datos

    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. Para comprobar el estado de la operación, llama a esta API:

    Sin residencia de datos

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

    Residencia de datos

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

Paso 7: Configura el enrutamiento

En este paso, se configura cómo se comunican las aplicaciones cliente con Apigee. El tráfico de cliente a Apigee también se denomina tráfico "de entrada". Las opciones de configuración de la comunicación hacia el norte son las siguientes. Ve a la opción de configuración que quieras usar y sigue los pasos correspondientes:

Tipo de acceso Descripción del proceso de configuración e implementación
Interno con PSC (nuevo)

Permite solo el acceso interno a tus proxies de API desde cualquiera de tus proyectos de Google Cloud mediante Private Service Connect (PSC).

PSC permite la conexión privada entre un productor de servicios (Apigee) y un consumidor de servicios (el proyecto de VPC emparejado u otros proyectos de Cloud que controles). Con este método, las solicitudes pasan por un punto final de servicio o por un balanceador de carga interno regional hasta un único punto de vinculación, denominado vinculación de servicio. Esta configuración permite que tus clientes internos envíen solicitudes de proxy de API de Apigee desde cualquier máquina con conexión de red.

Externo con PSC (nuevo)

Permite el acceso externo a tus proxies de API mediante Private Service Connect (PSC).

Usa Private Service Connect (PSC) para habilitar la conexión privada entre un productor de servicios (Apigee) y un consumidor de servicios (el proyecto de VPC emparejado u otro proyecto de Cloud que controles). Con este método, las solicitudes pasan por un balanceador de carga externo global o por un balanceador de carga externo regional a un único punto de acoplamiento, denominado acoplamiento de servicio. Esta configuración te permite enviar solicitudes de proxy de API de Apigee desde cualquier máquina con conexión de red.

Cada uno de estos métodos de enrutamiento se presenta en las instrucciones que se indican a continuación.

Rutas internas (PSC)

En esta sección se explica cómo permitir solo el acceso interno a tus proxies de API desde cualquiera de tus proyectos de Google Cloud mediante Private Service Connect (PSC).

Tienes dos opciones para configurar el acceso interno con PSC:

  • Punto final de servicio: las solicitudes pasan por un punto final de servicio a un único punto de vinculación, llamado vinculación de servicio.
  • Balanceador de carga regional interno: las solicitudes pasan por un balanceador de carga HTTP(S) interno regional. Consulta también Balanceo de carga global y regional.

Selecciona la pestaña correspondiente a tu configuración y sigue los pasos:

Punto final de servicio

Crear un endpoint de servicio de PSC para la vinculación de servicio

  1. Obtén el adjunto de servicio de la instancia que has creado anteriormente:

    Sin residencia de datos

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

    Residencia de datos

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

    En el siguiente ejemplo de salida, el valor de serviceAttachment se muestra en negrita:

    {
      "instances": [
        {
          "name": "us-west1",
          "location": "us-west1",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "runtimeVersion": "1-7-0-20220228-190814",
          "consumerAcceptList": [
            "my-project"
          ],
          "serviceAttachment": "projects/bfac74a67a320c43a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw1"
        }
      ]
    }
  2. Crea un endpoint de servicio de PSC que apunte a la vinculación de servicio que has obtenido del cuerpo de respuesta de la instancia en el paso anterior, tal como se explica en Crear un endpoint de Private Service Connect.
  3. El aprovisionamiento de Apigee se ha completado. Ve a Despliega un proxy de ejemplo.

Balanceador de carga regional interno

Paso 7a: Configura las variables de entorno

En las instrucciones de esta sección se usan variables de entorno para hacer referencia a cadenas que se usan repetidamente. Asegúrate de haber definido las variables en Definir variables de entorno.

Además, define las siguientes variables de entorno:

NEG_NAME=YOUR_NEG_NAME
  NETWORK_NAME=YOUR_NETWORK_NAME
  SUBNET_NAME=YOUR_SUBNET_NAME
  TARGET_SERVICE=TARGET_SERVICE_ATTACHMENT

Donde:

  • NEG_NAME: nombre del grupo de puntos finales de red.
  • NETWORK_NAME: (opcional) nombre de la red en la que se crea el NEG. Si omite este parámetro, se usará la red del proyecto default.
  • SUBNET_NAME nombre de la subred que se usa para la conectividad privada con el productor. El tamaño de la subred puede ser pequeño: el NEG de PSC solo necesita una IP de la subred. En Apigee, solo se necesita un NEG de PSC por región. Las máquinas virtuales u otras entidades pueden compartir y usar la subred. Si no se especifica ninguna subred, los endpoints de red pueden pertenecer a cualquier subred de la región en la que se cree el grupo de endpoints de red.
  • TARGET_SERVICE: el adjunto de servicio al que quieres conectarte. Por ejemplo: projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7

Paso 7b: Crea una subred de solo proxy

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

Paso 7c: Crea un grupo de endpoints de red (NEG)

  1. Obtén el adjunto de servicio de la instancia que has creado anteriormente:

    Sin residencia de datos

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

    Residencia de datos

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

    En el siguiente ejemplo de salida, el valor serviceAttachment se muestra en negrita:

    {
      "instances": [
        {
          "name": "us-west1",
          "location": "us-west1",
          "createdAt": "1645731488019",
          "lastModifiedAt": "1646504754219",
          "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek",
          "state": "ACTIVE",
          "runtimeVersion": "1-7-0-20220228-190814",
          "consumerAcceptList": [
            "my-project"
          ],
          "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7"
        }
      ]
      }
  2. Crea un NEG de Private Service Connect que apunte a la vinculación de servicio que has obtenido del cuerpo de respuesta de la instancia en el paso anterior.

    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
    --network=$NETWORK_NAME
    --subnet=$SUBNET_NAME
    

    Dónde

    • $PROJECT_ID puede ser el proyecto de Cloud que ya esté asociado a tu organización de Apigee o un proyecto de Cloud incluido en el consumerAcceptlist cuando se creó la instancia de tiempo de ejecución de Apigee.

Paso 7d: Configura el balanceador de carga interno regional

  1. Reserva una dirección IPv4 interna para el balanceador de carga.
    gcloud compute addresses create ADDRESS_NAME \
    --ip-version=IPV4 --subnet=$SUBNET_NAME \
    --region=$RUNTIME_LOCATION --project=$PROJECT_ID

    Sustituye ADDRESS_NAME por el nombre del recurso de dirección IP.

    Ejecuta este comando para ver la dirección IP reservada:

    gcloud compute addresses describe ADDRESS_NAME \
    --format="get(address)" --region=$RUNTIME_LOCATION --project=$PROJECT_ID
  2. Crea un servicio de backend para el NEG.
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTPS \
    --region=$RUNTIME_LOCATION \
    --project=$PROJECT_ID
  3. Sustituye BACKEND_SERVICE_NAME por el nombre del servicio de backend.

  4. Añade el NEG al servicio de backend:
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
    --network-endpoint-group=$NEG_NAME \
    --region=$RUNTIME_LOCATION \
    --project=$PROJECT_ID

    Haz los cambios siguientes:

    • NEG_NAME: el nombre del grupo de endpoints de red.
    • BACKEND_SERVICE_NAME con el nombre del servicio de backend.
  5. Para crear un balanceador de carga HTTPS, debes tener un recurso de certificado SSL que usar en el proxy HTTPS de destino.

    Usa este comando para crear un recurso de certificado SSL autogestionado. Para crear un certificado SSL autogestionado, necesitas un archivo de clave privada local y un archivo de certificado local. Si necesitas crear estos archivos, consulta el paso 1 para usar certificados SSL autogestionados.

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

    Haz los cambios siguientes:

    • CERTIFICATE: un nombre para el certificado.
    • LB_CERT: la ruta al archivo de certificado con formato PEM de tu certificado autogestionado.
    • LB_PRIVATE_KEY: la ruta al archivo de clave privada con formato PEM de tu certificado autogestionado.
  6. Crea un mapa de URLs para el balanceador de carga.

    Un mapa de URLs debe hacer referencia a un servicio de backend predeterminado. Define como predeterminado el servicio de backend que acabas de crear.

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

    Haz los cambios siguientes:

    • URL_MAP_NAME: nombre del mapa de URLs.
    • DEFAULT_BACKEND_SERVICE_NAME: el nombre del servicio de backend predeterminado del balanceador de carga. El valor predeterminado se usa cuando ninguna regla de host coincide con el nombre de host solicitado.
  7. Usa el recurso de certificado SSL para crear un proxy HTTPS de destino.

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

    Haz los cambios siguientes:

    • PROXY_NAME: nombre del proxy HTTPS de destino.
    • URL_MAP_NAME: nombre del mapa de URLs.
    • CERTIFICATE: el nombre del recurso de certificado.
  8. Crea la regla de reenvío.
    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 \
    --network=$NETWORK_NAME \
    --subnet=$SUBNET_NAME
    

    Haz los cambios siguientes:

    • FWD_RULE: el nombre de la regla de reenvío.
    • ADDRESS_NAME: el recurso de dirección IP que has reservado para usarlo en la regla de reenvío.
    • PROXY_NAME: nombre del proxy HTTPS de destino.
    • NETWORK_NAME: (opcional) nombre de la red en la que se crea el NEG. Si omite este parámetro, se usará la red del proyecto default.
    • SUBNET_NAME nombre de la subred que se usa para la conectividad privada con el productor.
  9. El aprovisionamiento de Apigee se ha completado. Ve a Despliega un proxy de ejemplo.

Enrutamiento externo (PSC)

En esta sección se describe cómo configurar el enrutamiento externo mediante Private Service Connect (PSC) para permitir la comunicación entre Apigee y las VPCs que controlas. Debes hacerlo antes de poder enviar una solicitud desde un cliente externo a tu instancia de tiempo de ejecución de Apigee.

Paso 7b: Crea un NEG y configura el balanceador de carga

Puedes crear un balanceador de carga global o regional.

Balanceador de carga externo global

Configura un balanceador de carga HTTP(S) externo global (con el esquema de balanceo de carga definido como EXTERNAL_MANAGED).

Aunque el NEG de Private Service Connect es regional, el resto de los componentes de balanceo de carga de esta configuración son globales.

  1. Asegúrate de haber definido las variables de entorno en Definir variables de entorno.
  2. Obtén el adjunto de servicio de la instancia que has creado anteriormente:

    Sin residencia de datos

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

    Residencia de datos

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

    En el siguiente ejemplo de salida, el valor serviceAttachment se muestra en negrita:

    {
      "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. Crea un NEG de Private Service Connect que apunte a la vinculación de servicio que has obtenido del cuerpo de respuesta de la instancia en el paso anterior.

      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
    

    Haz los cambios siguientes:

    • NEG_NAME: nombre del grupo de endpoints de red.
    • TARGET_SERVICE: el archivo adjunto de servicio al que quieras conectarte. Usa el valor de adjunto de servicio devuelto por el comando anterior. Por ejemplo: projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
    • NETWORK_NAME: (Opcional) Nombre de la red en la que se crea el NEG. Si omite este parámetro, se usará la red del proyecto default.
    • SUBNET_NAME: nombre de la subred usada para la conectividad privada con el productor. El tamaño de la subred puede ser pequeño: el NEG de PSC solo necesita una IP de la subred. En Apigee, solo se necesita un NEG de PSC por región. Las subredes se pueden compartir y usar en VMs u otras entidades. Si no se especifica ninguna subred, los endpoints de red pueden pertenecer a cualquier subred de la región en la que se cree el grupo de endpoints de red.
    • $PROJECT_ID: el proyecto de Cloud que ya está asociado a tu organización de Apigee o un proyecto de Cloud incluido en consumerAcceptlist cuando se creó la instancia de tiempo de ejecución de Apigee. Si aún no lo has hecho, crea una variable de entorno para almacenar el ID del proyecto, ya que se usa en la mayoría de los comandos siguientes.
  4. Reserva una dirección IPv4 externa global para el balanceador de carga.
    gcloud compute addresses create ADDRESS_NAME \
        --ip-version=IPV4 --global --project=$PROJECT_ID

    Sustituye ADDRESS_NAME por el nombre del recurso de dirección IP.

    Ejecuta este comando para ver la dirección IP reservada:

    gcloud compute addresses describe ADDRESS_NAME \
        --format="get(address)" --global --project=$PROJECT_ID
  5. Crea un servicio de backend para el NEG.
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTPS \
        --global --project=$PROJECT_ID
  6. Sustituye BACKEND_SERVICE_NAME por el nombre del servicio de backend.

  7. Añade el NEG al servicio de backend.
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --network-endpoint-group=NEG_NAME \
        --network-endpoint-group-region=REGION \
        --global --project=$PROJECT_ID

    Haz los cambios siguientes:

    • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
    • NEG_NAME: el nombre del grupo de endpoints de red.
    • REGION: la región del grupo de puntos finales de red.
  8. Crea un mapa de URLs para el balanceador de carga.

    Un mapa de URLs debe hacer referencia a un servicio de backend predeterminado. Define como predeterminado el servicio de backend que acabas de crear.

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

    Haz los cambios siguientes:

    • URL_MAP_NAME: nombre del mapa de URLs.
    • DEFAULT_BACKEND_SERVICE_NAME: el nombre del servicio de backend predeterminado del balanceador de carga. El valor predeterminado se usa cuando ninguna regla de host coincide con el nombre de host solicitado.
  9. Crea el proxy HTTPS de destino.

    Para crear un balanceador de carga HTTPS, debes tener un recurso de certificado SSL que usar en el proxy HTTPS de destino. Puedes crear un recurso de certificado SSL con un certificado SSL gestionado por Google o con un certificado SSL autogestionado. Te recomendamos que uses certificados gestionados por Google, ya que Google Cloud los obtiene, gestiona y renueva automáticamente.

    Para crear un certificado gestionado por Google, debes tener un dominio.

    Usa este comando para crear un recurso de certificado SSL gestionado por Google:

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

    Haz los cambios siguientes:

    • CERTIFICATE: un nombre para el certificado.
    • DOMAIN: el nombre de dominio de tu balanceador de carga.

    Usa este comando para crear un recurso de certificado SSL autogestionado. Para crear un certificado SSL autogestionado, necesitas un archivo de clave privada local y un archivo de certificado local. Si necesitas crear estos archivos, consulta el paso 1 para usar certificados SSL autogestionados.

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

    Haz los cambios siguientes:

    • CERTIFICATE: un nombre para el certificado.
    • LB_CERT: la ruta al archivo de certificado con formato PEM de tu certificado autogestionado.
    • LB_PRIVATE_KEY: la ruta al archivo de clave privada con formato PEM de tu certificado autogestionado.

    Usa el recurso de certificado SSL para crear un proxy HTTPS de destino.

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

    Haz los cambios siguientes:

    • PROXY_NAME: nombre del proxy HTTPS de destino.
    • URL_MAP_NAME: nombre del mapa de URLs.
    • CERTIFICATE: el nombre del recurso de certificado.
  10. Crea la regla de reenvío.
    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

    Haz los cambios siguientes:

    • FWD_RULE: el nombre de la regla de reenvío.
    • ADDRESS_NAME: el recurso de dirección IP que has reservado para usarlo en la regla de reenvío.
    • PROXY_NAME: nombre del proxy HTTPS de destino.

Balanceador de carga externo regional

Configura un balanceador de carga HTTP(S) externo regional. Consulta también la descripción general de los balanceadores de carga HTTP y HTTPS externos.

  1. Asegúrate de haber definido las variables en Definir variables de entorno.
  2. Crea una subred de solo proxy:
    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

    Haz los cambios siguientes:

    • SUBNET_NAME: el nombre de la subred.
    • (Opcional) NETWORK_NAME: nombre de la red en la que se crea la subred. Si omite este parámetro, se usará la red del proyecto predeterminada.
  3. Obtén el adjunto de servicio de la instancia que has creado anteriormente:

    Sin residencia de datos

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

    Residencia de datos

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

    En el siguiente ejemplo de salida, el valor serviceAttachment se muestra en negrita:

    {
      "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. Crea un grupo de endpoints de red.
    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

    Haz los cambios siguientes:

    • NEG_NAME: el nombre del grupo de endpoints de red.
    • TARGET_SERVICE: el nombre del archivo adjunto de servicio al que quieras conectarte. Por ejemplo: projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
  5. Crea un servicio de backend para el NEG.
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --protocol=HTTPS \
      --region=$RUNTIME_LOCATION  \
      --project=$PROJECT_ID
  6. Sustituye BACKEND_SERVICE_NAME por el nombre del servicio de backend.

  7. Añade el NEG al servicio de backend.
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --network-endpoint-group=NEG_NAME \
      --region=$RUNTIME_LOCATION  \
      --project=$PROJECT_ID

    Haz los cambios siguientes:

    • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
    • NEG_NAME: el nombre del grupo de endpoints de red.
  8. Crea un mapa de URLs para el balanceador de carga.

    Un mapa de URLs debe hacer referencia a un servicio de backend predeterminado. Define como predeterminado el servicio de backend que acabas de crear.

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

    Haz los cambios siguientes:

    • URL_MAP_NAME: nombre del mapa de URLs.
    • DEFAULT_BACKEND_SERVICE_NAME: el nombre del servicio de backend predeterminado del balanceador de carga. El valor predeterminado se usa cuando ninguna regla de host coincide con el nombre de host solicitado.
  9. Crea el proxy HTTPS de destino.

    Para crear un balanceador de carga HTTPS, debes tener un recurso de certificado SSL que usar en el proxy HTTPS de destino.

    Usa este comando para crear un recurso de certificado SSL autogestionado. Para crear un certificado SSL autogestionado, necesitas un archivo de clave privada local y un archivo de certificado local. Si necesitas crear estos archivos, consulta el paso 1 para usar certificados SSL autogestionados.

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

    Haz los cambios siguientes:

    • CERTIFICATE: un nombre para el certificado.
    • LB_CERT: la ruta al archivo de certificado con formato PEM de tu certificado autogestionado.
    • LB_PRIVATE_KEY: la ruta al archivo de clave privada con formato PEM de tu certificado autogestionado.

    Usa el recurso de certificado SSL para crear un proxy HTTPS de destino.

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

    Haz los cambios siguientes:

    • PROXY_NAME: nombre del proxy HTTPS de destino.
    • URL_MAP_NAME: nombre del mapa de URLs.
    • CERTIFICATE: el nombre del recurso de certificado.
  10. Reserva una dirección externa regional para el balanceador de carga. Ten en cuenta que el nivel de red debe ser STANDARD.
    gcloud compute addresses create ADDRESS_NAME \
          --region=$RUNTIME_LOCATION --network-tier=STANDARD \
          --project=$PROJECT_ID

    Sustituye ADDRESS_NAME por el nombre del recurso de dirección IP.

    Ejecuta este comando para ver la dirección IP reservada:

    gcloud compute addresses describe ADDRESS_NAME \
          --format="get(address)" --region=$RUNTIME_LOCATION \
          --project=$PROJECT_ID
  11. Crea la regla de reenvío.
    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

    Haz los cambios siguientes:

    • FWD_RULE: el nombre de la regla de reenvío.
    • ADDRESS_NAME: el recurso de dirección IP que has reservado para usarlo en la regla de reenvío.
    • PROXY_NAME: nombre del proxy HTTPS de destino.

El aprovisionamiento de Apigee se ha completado. Ve a Despliega un proxy de ejemplo.

Paso 8: Despliega un proxy de ejemplo

  1. Descarga el proxy de ejemplo de GitHub. El objetivo del proxy es el servicio httpbin.org, que es un servicio público de solicitud y respuesta de uso habitual.
  2. Sube el paquete de proxy de la API al tiempo de ejecución mediante la API Apigee apis:

    Sin residencia de datos

    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'

    Residencia de datos

    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'

    Donde PATH_TO_ZIP_FILE es la ruta al directorio que contiene el archivo ZIP descargado.

  3. Despliega el proxy de API en el entorno que has creado anteriormente:

    Sin residencia de datos

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

    Residencia de datos

    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. Confirma que la implementación se ha completado correctamente con esta llamada a la API:

    Sin residencia de datos

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

    Residencia de datos

    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. Llama al proxy de API:

    Envía una solicitud al proxy de API desde cualquier máquina con conexión de red ejecutando el siguiente comando:

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

    Si es necesario, puedes usar esta API para obtener el valor ENV_GROUP_HOSTNAME:

    Sin residencia de datos

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

    Residencia de datos

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

    Si aparece un error como este: CONNECT_CR_SRVR_HELLO:sslv3 alert handshake failure, comprueba que el certificado SSL que has creado anteriormente se haya aprovisionado. Usa este comando para comprobar el estado del aprovisionamiento. Cuando se aprovisiona el certificado, su estado es ACTIVE.

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

    Si la operación se realiza correctamente, el proxy de API de ejemplo devuelve una respuesta similar a esta:

    {
        "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"
        }
    }

Para obtener más información sobre cómo implementar proxies, incluida información adicional para solucionar problemas, consulta Implementar un proxy de API.