Provisionar uma organização paga com peering de VPC

Esta página se aplica à Apigee, mas não à Apigee híbrida.

Confira a documentação da Apigee Edge.

Neste documento, descrevemos como instalar e configurar a Apigee a partir da linha de comando com peering de VPC. Essas etapas se aplicam aos modelos de preços de assinatura e pagamento por uso para organizações pagas com ou sem a residência de dados ativada.

Resumo das etapas

As etapas de provisionamento são as seguintes:

Etapa 1: definir variáveis de ambiente

Configure gcloud e defina variáveis de ambiente para uso em etapas posteriores:

  1. Verifique se você cumpre os requisitos de configuração listados em Antes de começar.
  2. É preciso ter o SDK do Cloud instalado. Se você precisar instalá-lo, consulte Como instalar o SDK Cloud.
  3. Inicialize o SDK Cloud, conforme descrito em Como inicializar a gcloud CLI ou garanta que o projeto do Google Cloud criado em Pré-requisitos é o projeto padrão para gcloud.
  4. Defina as variáveis de ambiente a seguir no terminal de comando. Selecione a guia que corresponde ao tipo de organização de que você precisa: Sem residência de dados ou com Residência de dados:

    Sem residência de dados

    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"

    Em que:

    • AUTH define o cabeçalho Authentication com um token do portador. Você usará esse cabeçalho ao chamar as APIs Apigee. O token expira após um certo tempo. Quando isso acontecer, basta gerar o token novamente usando o mesmo comando. Saiba mais na página de referência do comando print-access-token.
    • PROJECT_ID é o ID do projeto do Cloud que você criou como parte dos Pré-requisitos.
    • PROJECT_NUMBER é o número do projeto do Cloud que você criou como parte dos Pré-requisitos.
    • RUNTIME_LOCATION é o local físico em que a instância da Apigee que você criará está localizada. Para conferir uma lista de locais disponíveis para o ambiente de execução, consulte Locais da Apigee.

    • ANALYTICS_REGION é o local físico em que os dados de análise da Apigee são armazenados. Para ver uma lista de regiões disponíveis do Apigee API Analytics, consulte Locais da Apigee.

      RUNTIME_LOCATION e RUNTIME_LOCATION podem ser a mesma região, mas não precisam ser os mesmos.

    • BILLING_TYPE é o tipo de faturamento da organização criada. Os valores válidos são:

    Residência dos dados

    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"

    Em que:

    • AUTH define o cabeçalho Authentication com um token do portador. Você usará esse cabeçalho ao chamar as APIs Apigee. O token expira após um certo tempo. Quando isso acontecer, basta gerar o token novamente usando o mesmo comando. Saiba mais na página de referência do comando print-access-token.
    • PROJECT_ID é o ID do projeto do Cloud que você criou como parte dos Pré-requisitos.
    • PROJECT_NUMBER é o número do projeto do Cloud que você criou como parte dos Pré-requisitos.
    • RUNTIME_LOCATION é o local físico em que a instância da Apigee que você criará está localizada. Para conferir uma lista de locais disponíveis para o ambiente de execução, consulte Locais da Apigee.

      O local do ambiente de execução precisa estar no local do plano de controle.
    • CONTROL_PLANE_LOCATION é o local físico em que os dados do plano de controle da Apigee serão armazenados. Para ver uma lista de locais disponíveis do plano de controle, consulte Locais da Apigee.
    • CONSUMER_DATA_REGION é uma sub-região da região do plano de controle. Você precisa especificar CONTROL_PLANE_LOCATION e CONSUMER_DATA_REGION. Para ver uma lista de regiões de dados do consumidor disponíveis, consulte Locais da Apigee.
    • BILLING_TYPE é o tipo de faturamento da organização criada. Os valores válidos são:

  5. (Opcional) Verifique seu trabalho incluindo os valores que você acabou de definir. Quando quiser usar uma variável nos comandos, coloque o cifrão ($) antes do nome dela.

    Sem residência de dados

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

    As respostas aos comandos echo precisam ser semelhantes a estas:

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

    Residência dos dados

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

    As respostas aos comandos echo precisam ser semelhantes a estas:

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

Etapa 2: ativar as APIs

  1. A Apigee requer a ativação de várias APIs do Google Cloud. Ative as APIs executando o seguinte comando services enable:

    gcloud services enable apigee.googleapis.com \
        servicenetworking.googleapis.com \
        compute.googleapis.com \
        cloudkms.googleapis.com --project=$PROJECT_ID
  2. (Opcional) Para verificar seu trabalho, use o comando services list para mostrar todas as APIs ativadas:

    gcloud services list

    A resposta mostra todos os serviços ativados, incluindo as APIs que você acabou de ativar.

Etapa 3: criar a identidade do serviço da Apigee

  1. Crie a identidade do serviço da Apigee:

    gcloud beta services identity create --service=apigee.googleapis.com \
      --project=$PROJECT_ID
  2. Verifique se o agente foi criado com sucesso. A resposta precisa mostrar o nome do agente no seguinte formato: service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com. por exemplo:

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

Etapa 4: configurar a rede de serviços

Nesta etapa, você aloca um par de intervalos de endereços IP (um intervalo CIDR /22 e /28) para a Apigee e executa o peering de VPC entre sua rede e a rede da Apigee. Cada instância da Apigee requer um intervalo CIDR não sobreposto de /22 e /28. O endereço do ambiente de execução da Apigee recebe endereços IP desse intervalo CIDR. Como resultado, é importante que o intervalo seja reservado para a Apigee e não usado por outros aplicativos na rede VPC do cliente. Para mais informações e considerações importantes, consulte Noções básicas sobre intervalos de peering.

Observe que você está criando um intervalo de IP de rede suficiente para uma instância da Apigee. Se você planeja criar outras instâncias da Apigee, repita essa etapa para cada uma. Os intervalos não podem ser compartilhados entre instâncias. Consulte também Como expandir a Apigee para várias regiões.

  1. Crie estas variáveis de ambiente:
    RANGE_NAME=YOUR_RANGE_NAME
    NETWORK_NAME=YOUR_NETWORK_NAME
    

    Em que:

    • RANGE_NAME é o nome do intervalo de endereços IP que você está criando. Você dá o nome que quiser a ele. Por exemplo: google-svcs
    • NETWORK_NAME é o nome do recurso de rede em que os endereços precisam ser reservados.

      O Google cria uma rede padrão (chamada default) para cada novo projeto, para que você possa usar isso. No entanto, o Google não recomenda usar a rede padrão para qualquer finalidade que não seja teste.

  2. Crie um intervalo de IP de rede com um comprimento CIDR de /22:
    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

    Em que --addresses permite especificar um intervalo de endereços. Por exemplo, para alocar o bloco CIDR 192.168.0.0/22, especifique 192.168.0.0 como endereço e 22 como tamanho de prefixo. Consulte também Como criar uma alocação de IP.

    Se você não fornecer o parâmetro --addresses, a gcloud selecionará um intervalo de endereços disponível.

    Em caso de sucesso, gcloud responderá com o seguinte:

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

    Depois que você criar um intervalo de endereços IP, os endereços serão associados ao projeto até que você os libere.

  3. Verifique se o intervalo de IPs da rede foi criado com um comprimento CIDR de /22:
    gcloud compute addresses list --global --project=$PROJECT_ID
    gcloud compute addresses describe $RANGE_NAME --global --project=$PROJECT_ID
  4. Crie um intervalo de IP de rede com um comprimento CIDR de /28. Esse intervalo é obrigatório e é usado pela Apigee para solução de problemas e não pode ser personalizado ou alterado.
    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

    Em que --addresses permite especificar um intervalo de endereços. Por exemplo, para alocar o bloco CIDR 192.168.0.0/28, especifique 192.168.0.0 como endereço e 28 como tamanho de prefixo. Consulte também Como criar uma alocação de IP.

    Se você não fornecer o parâmetro --addresses, a gcloud selecionará um intervalo de endereços disponível.

  5. Verifique se o intervalo de IPs da rede foi criado com um comprimento CIDR de /28:
    gcloud compute addresses list --global --project=$PROJECT_ID
    gcloud compute addresses describe google-managed-services-support-1 --global \
      --project=$PROJECT_ID
  6. Conecte os serviços à rede usando o seguinte comando:
    gcloud services vpc-peerings connect \
      --service=servicenetworking.googleapis.com \
      --network=$NETWORK_NAME \
      --ranges=$RANGE_NAME,google-managed-services-support-1 \
      --project=$PROJECT_ID

    Essa operação pode levar vários minutos para ser concluída. Em caso de sucesso, gcloud responde com o seguinte, em que OPERATION_ID é o UUID da LRO.

    Operation "operations/OPERATION_ID" finished successfully.
  7. A Apigee cria uma conexão entre sua VPC e os serviços do Google. Especificamente, a Apigee conecta seu projeto à API Service Networking usando o peering de VPC. A Apigee também associa os endereços IP ao seu projeto.

  8. Após alguns minutos, verifique se o peering de VPC foi bem-sucedido:
    gcloud services vpc-peerings list \
      --network=$NETWORK_NAME \
      --service=servicenetworking.googleapis.com \
      --project=$PROJECT_ID

Etapa 5: criar uma organização

Antes de criar uma organização, crie um keyring e uma chave de criptografia de banco de dados de ambiente de execução (consulte a etapa 1) e, se estiver usando a residência de dados, os keyrings e as chaves de criptografia do plano de controle (consulte a etapa 2). Essas chaves do Cloud KMS criptografam dados que são armazenados e replicados nos locais do plano de controle e do ambiente de execução. A Apigee usa essas entidades para criptografar dados de aplicativos, como KVMs, cache e chaves secretas do cliente, que são armazenados no banco de dados. Para mais informações, consulte Sobre as chaves de criptografia da Apigee.

  1. Crie um keyring e uma chave de criptografia do banco de dados do ambiente de execução.

    1. Defina uma variável de ambiente para o local do keyring e da chave de criptografia do banco de dados do ambiente de execução. Isso ajuda a garantir a consistência quando na criação e facilita o acompanhamento na documentação.

      O valor é o local físico em que o keyring e a chave de criptografia do banco de dados são armazenados.

      Região única

      Configurações de região única, em que você tem apenas uma instância em uma região: escolha entre os locais regionais do KMS.

      Exemplo:

      RUNTIMEDBKEY_LOCATION="us-west1"

      O valor pode ser o mesmo que $RUNTIME_LOCATION (também uma região), mas não precisa ser. No entanto, isso poderá resultar em uma melhoria no desempenho.

      Multirregião

      Configurações multirregionais: escolha entre os locais multirregionais compatíveis (como us ou europe) ou locais birregionais.

      Exemplo:

      RUNTIMEDBKEY_LOCATION="us"

      Se você tiver uma configuração multirregional nos EUA, recomendamos usar us como seu local, se possível. Do contrário, use nam4.

    2. Defina variáveis de ambiente para keyrings e nomes de chaves de bancos de dados.

      O nome do keyring precisa ser exclusivo para sua organização. Se você criar uma segunda ou uma região subsequente, o nome não poderá ser igual ao de outros keyrings.

      RUNTIMEDB_KEY_RING_NAME=YOUR_DB_KEY_RING_NAME
      RUNTIMEDB_KEY_NAME=YOUR_DB_KEY_NAME
    3. (Opcional) Verifique seu trabalho incluindo os valores que você acabou de definir. Quando quiser usar uma variável nos comandos, lembre-se de colocar o cifrão ($) antes do nome da variável.
      echo $RUNTIMEDBKEY_LOCATION
      echo $RUNTIMEDB_KEY_RING_NAME
      echo $RUNTIMEDB_KEY_NAME
    4. Crie um novo keyring:
      gcloud kms keyrings create $RUNTIMEDB_KEY_RING_NAME \
        --location $RUNTIMEDBKEY_LOCATION --project $PROJECT_ID

      O local da chave de criptografia do banco de dados da Apigee é compatível com todos os locais do Cloud KMS compatíveis com o Cloud HSM e o Cloud EKM.

    5. Crie uma chave

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

      Esse comando cria a chave e a adiciona ao keyring.

      Consiga o ID da chave:

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

      O ID da chave tem a seguinte sintaxe (semelhante a um caminho de arquivo):

      projects/PROJECT_ID/locations/RUNTIMEDBKEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME
    6. Coloque o ID da chave em uma variável de ambiente. Você vai usar essa variável em um comando futuro:

      RUNTIMEDB_KEY_ID=YOUR_RUNTIMEDB_KEY_ID
    7. Conceda acesso ao agente de serviço da Apigee para usar a nova chave:

      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

      Esse comando vincula a chave ao agente de serviços da Apigee.

      Após a conclusão dessa solicitação, gcloud responde com algo semelhante ao seguinte:

      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

      Se você receber um erro como este:

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

      Verifique se você usou o número do projeto e não o nome do projeto no endereço de e-mail da conta de serviço.

  2. Se você estiver usando a residência de dados, crie um keyring e uma chave de criptografia de plano de controle. Se você não estiver usando a residência de dados, avance para a etapa 3.
  3. Siga as etapas a seguir para criar um keyring e uma chave de criptografia de plano de controle.

    1. Defina uma variável de ambiente para o local do keyring e da chave de criptografia do banco de dados do plano de controle:
      CONTROL_PLANE_LOCATION=YOUR_CONTROL_PLANE_LOCATION
      CONSUMER_DATA_REGION=YOUR_CONSUMER_DATA_REGION

      Em que:

      • CONTROL_PLANE_LOCATION é o local físico em que os dados do plano de controle da Apigee serão armazenados. Para ver uma lista de locais disponíveis do plano de controle, consulte Locais da Apigee.
      • CONSUMER_DATA_REGION é uma sub-região da região do plano de controle. Você precisa especificar CONTROL_PLANE_LOCATION e CONSUMER_DATA_REGION. Para ver uma lista de regiões de dados do consumidor disponíveis, consulte Locais da Apigee.
    2. Defina variáveis de ambiente para os nomes de chaves e keyrings do banco de dados do plano de controle.

      O nome do keyring precisa ser exclusivo para sua organização.

      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

      Em que:

      • CONTROL_PLANE_KEY_RING_NAME é o nome do keyring que você usará para identificar seu keyring de criptografia do plano de controle.
      • CONTROL_PLANE_KEY_NAME é o nome da chave que você usará para identificar sua chave de criptografia do plano de controle.
      • CONSUMER_DATA_KEY_RING_NAME é o nome do keyring que você usará para identificar seu keyring de criptografia da região de dados do consumidor.
      • CONSUMER_DATA_KEY_NAME é o nome da chave que você usará para identificar sua chave de criptografia da região de dados do consumidor.
    3. Crie um novo keyring:
      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. Crie uma chave:
      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

      Esse comando cria a chave e a adiciona ao keyring.

      Consiga o ID da chave:

      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

      O ID da chave tem a seguinte sintaxe (semelhante a um caminho de arquivo):

      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. Coloque o ID da chave em uma variável de ambiente. Você usará essa variável em um comando futuro:
      CONTROL_PLANE_KEY_ID=YOUR_CONTROL_PLANE_KEY_ID
      
      CONSUMER_DATA_KEY_ID=YOUR_CONSUMER_DATA_KEY_ID
    6. Conceda acesso ao agente de serviço da Apigee para usar a nova chave:
      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
      

      Esse comando vincula a chave ao agente de serviços da Apigee. Após a conclusão dessa solicitação, a gcloud responde com algo semelhante a isto:

      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
      

      Se você receber um erro como este:

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

      Verifique se você usou o número do projeto e não o nome do projeto no endereço de e-mail da conta de serviço.

    Consulte também: Solução de problemas de CMEK.

  4. Crie a organização enviando a seguinte solicitação à API Organizations da Apigee:

    Sem residência de dados

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

    Em que:

    • -d define o payload de dados para a solicitação. Esse payload precisa incluir o seguinte:
      • name: identifica a nova organização. Ele precisa ter o mesmo nome do ID do projeto.

      • analyticsRegion: especifica o local físico em que os dados de análise serão armazenados.

      • runtimeType: Defina esse valor como CLOUD.
      • billingType: especifica o tipo de faturamento da organização criado.
      • authorizedNetwork: identifica a rede de peering especificada em Configurar rede de serviço.
      • runtimeDatabaseEncryptionKeyName: o ID da chave de criptografia do aplicativo que você criou na etapa anterior. Lembre-se de que o ID é estruturado como um caminho de arquivo. Por exemplo:
        projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    Residência dos dados

    Crie uma organização usando a 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"'"
      }'

    Em que:

    -d define o payload de dados para a solicitação. Esse payload precisa incluir os seguintes dados:

    • name: identifica a nova organização. Ele precisa ter o mesmo nome do ID do projeto.
    • runtimeType: Defina esse valor como CLOUD.
    • billingType: especifica o tipo de faturamento da organização criado.
    • controlPlaneEncryptionKeyName: é o ID da chave do plano de controle.
    • apiConsumerDataLocation: também é preciso especificar uma sub-região para uso de recursos internos. Consulte Regiões de residência de dados para conferir os valores aceitos.
    • apiConsumerDataEncryptionKeyName: é o ID da chave da região de dados do consumidor.
    • authorizedNetwork: identifica a rede de peering especificada em Configurar rede de serviço.
    • runtimeDatabaseEncryptionKeyName: o ID da chave de criptografia do aplicativo que você criou na etapa anterior. O ID é estruturado como um caminho de arquivo. Por exemplo:
      projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key

    Depois que você executar esse comando, a Apigee iniciará uma operação de longa duração, que pode levar alguns minutos para ser concluída.

    Se você receber um erro, verifique se colocou os valores das variáveis entre aspas no payload de dados. Coloque a variável $PROJECT_ID entre aspas duplas e simples, conforme mostrado no exemplo a seguir:

    "'"$PROJECT_ID"'"

    Se você usar strings simples (não variáveis de ambiente) como valores de solicitação, coloque-as entre aspas duplas dentro da string de payload entre aspas simples, como no exemplo abaixo:

    '{ "name":"my-gcp-project", ... }'
  5. Aguarde alguns minutos.
  6. Para verificar o status da solicitação de criação, envie uma solicitação GET para a API List organizations da Apigee, como no exemplo abaixo:

    Sem residência de dados

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

    Residência dos dados

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

    Se você vir essa resposta, a criação da organização ainda não foi concluída:

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

    Se a Apigee tiver criado uma nova organização, você receberá uma resposta semelhante a esta:

    Sem residência de dados

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

    Residência dos dados

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

    Se a Apigee retornar uma resposta de erro HTTP, consulte Como criar uma organização da Apigee.