Passo 2: crie uma organização

Neste passo, cria uma organização do Apigee.

Para criar uma nova organização e aprovisioná-la:

  1. Na linha de comando, obtenha as suas credenciais de autenticação gcloud através do seguinte comando:

    Linux / MacOS

    export TOKEN=$(gcloud auth print-access-token)

    Para verificar se o token foi preenchido, use echo, como mostra o exemplo seguinte:

    echo $TOKEN

    Esta ação deve apresentar o seu token como uma string codificada.

    Windows

    for /f "tokens=*" %a in ('gcloud auth print-access-token') do set TOKEN=%a

    Para verificar se o token foi preenchido, use echo, como mostra o exemplo seguinte:

    echo %TOKEN%

    Esta ação deve apresentar o seu token como uma string codificada.

  2. No passo 1, criou a variável de ambiente PROJECT_ID. Adicione as seguintes variáveis de ambiente. Selecione o separador que corresponde ao tipo de organização de que precisa: Sem residência de dados ou com Residência de dados:

    Sem residência de dados

    Linux / MacOS

    export ORG_NAME=$PROJECT_ID
    export ANALYTICS_REGION="ANALYTICS_REGION"
    export RUNTIMETYPE=HYBRID

    Windows

    set ORG_NAME=$PROJECT_ID
    set ANALYTICS_REGION="ANALYTICS_REGION"
    set RUNTIMETYPE=HYBRID

    Onde:

    • ORG_NAME (Obrigatório): este valor tem de corresponder ao PROJECT_ID.
    • ANALYTICS_REGION (Obrigatório): a região principal para o armazenamento de dados de estatísticas. Para uma lista das regiões da API Apigee Analytics disponíveis, consulte Localizações do Apigee.
    • RUNTIMETYPE (Obrigatório): tem de estar definido como HYBRID.

    Residência dos dados

    Linux / MacOS

    export ORG_NAME=$PROJECT_ID
    export RUNTIMETYPE=HYBRID
    export CONTROL_PLANE_LOCATION="YOUR_CONTROL_PLANE_LOCATION"
    export CONSUMER_DATA_REGION="YOUR_CONSUMER_DATA_REGION"
    export BILLING_TYPE="SUBSCRIPTION"

    Windows

    set ORG_NAME=$PROJECT_ID
    set RUNTIMETYPE=HYBRID
    set CONTROL_PLANE_LOCATION="YOUR_CONTROL_PLANE_LOCATION"
    set CONSUMER_DATA_REGION="YOUR_CONSUMER_DATA_REGION"
    set BILLING_TYPE="SUBSCRIPTION"

    Onde:

    • ORG_NAME: este valor tem de corresponder a PROJECT_ID.
    • RUNTIMETYPE: tem de estar definido como HYBRID.
    • CONTROL_PLANE_LOCATION: a localização onde o conteúdo principal do cliente, como pacotes de proxy, está armazenado. Para ver uma lista, consulte o artigo Regiões do plano de controlo da API Apigee disponíveis.
    • CONSUMER_DATA_REGION: uma sub-região da região do plano de controlo. Tem de especificar o CONTROL_PLANE_LOCATION e o CONSUMER_DATA_REGION. Para ver uma lista das regiões de dados de consumidores disponíveis, consulte as localizações do Apigee.
    • BILLING_TYPE: tem de estar definido como "SUBSCRIPTION". Este é o tipo de faturação da sua organização do Apigee Hybrid. Consulte o artigo Direitos de subscrição para mais informações.

    Por exemplo:

    export ORG_NAME=$PROJECT_ID
    export RUNTIMETYPE=HYBRID
    export CONSUMER_DATA_REGION="us-west1"
    export CONTROL_PLANE_LOCATION="us"
    export BILLING_TYPE="SUBSCRIPTION"
    
  3. Chame a seguinte API Apigee para criar a organização:

    Sem residência de dados

    curl -H "Authorization: Bearer $TOKEN" -X POST -H "content-type:application/json" \
      -d '{
        "name":"'"$ORG_NAME"'",
        "runtimeType":"'"$RUNTIMETYPE"'",
        "analyticsRegion":"'"$ANALYTICS_REGION"'"
      }' \
      "https://apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID"

    Residência dos dados

    curl -H "Authorization: Bearer $TOKEN" -X POST -H "content-type:application/json" \
      -d '{
        "name":"'"$ORG_NAME"'",
        "billingType":"'"$BILLING_TYPE"'",
        "runtimeType":"'"$RUNTIMETYPE"'",
        "apiConsumerDataLocation":"'"$CONSUMER_DATA_REGION"'"
      }' \
      "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID"

    Num pedido de criação bem-sucedido, a API Organizations responde com uma mensagem semelhante à seguinte:

    {
      "name": "organizations/org_name/operations/LONG_RUNNING_OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.apigee.v1.OperationMetadata",
        "operationType": "INSERT",
        "targetResourceName": "organizations/org_name",
        "state": "IN_PROGRESS"
      }
    }

    Onde:

    • LONG_RUNNING_OPERATION_ID é o UUID de uma operação assíncrona de longa duração. Pode usar este ID para verificar o estado do seu pedido de criação da organização (descrito no passo 5).
    • org_name é o ID da sua nova organização que está atualmente a ser criada.

    Como a propriedade state na resposta indica, o Apigee começou a criar a nova organização, pelo que o respetivo estado é IN_PROGRESS. Este processo pode demorar vários minutos.

    Se receber um erro, consulte o artigo Resolução de problemas de criação de organizações.

  4. Guarde o ID da operação de longa duração numa variável de ambiente. Vai ser útil para tarefas de gestão futuras.

    Sintaxe

    export LONG_RUNNING_OPERATION_ID=LONG_RUNNING_OPERATION_ID

    Exemplo

    export LONG_RUNNING_OPERATION_ID=6abc8a72-46de-f9da-bcfe-70d9ab347e4f
  5. Pode verificar o estado da operação de longa duração cujo ID foi devolvido pelo pedido de criação. Para o fazer, use a API Operations. Por exemplo:

    Sem residência de dados

    curl -H "Authorization: Bearer $TOKEN" \
      "https://apigee.googleapis.com/v1/organizations/$ORG_NAME/operations/$LONG_RUNNING_OPERATION_ID"

    Os exemplos seguintes mostram possíveis respostas a este pedido:

    IN_PROGRESS

    Se o Apigee ainda estiver a criar a organização, o Apigee responde com o estado IN_PROGRESS. Por exemplo:

    {
      "name": "organizations/ORG_NAME/operations/LONG_RUNNING_OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.apigee.v1.OperationMetadata",
        "operationType": "INSERT",
        "targetResourceName": "organizations/ORG_NAME",
        "state": "IN_PROGRESS"
      }
    }

    Deve aguardar um pouco mais antes de tentar validar se o processo de criação está concluído.

    CONCLUÍDO

    Quando a organização tiver sido aprovisionada, o estado da operação de longa duração é FINISHED. Por exemplo:

    {
      "name": "organizations/ORG_NAME/operations/LONG_RUNNING_OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.apigee.v1.OperationMetadata",
        "operationType": "INSERT",
        "targetResourceName": "organizations/ORG_NAME",
        "state": "FINISHED"
      },
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.apigee.v1.Organization",
        "name": "ORG_NAME",
        "description": "",
        "createdAt": "1626237148461",
        "lastModifiedAt": "1626237149384",
        "properties": {
          "property": [
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            },
            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            }
          ]
        },
        "analyticsRegion": "ANALYTICS_REGION",
        "runtimeType": "HYBRID",
        "subscriptionType": "TRIAL",
        "state": "ACTIVE",
        "billingType": "EVALUATION",
        "expiresAt": "1631421073171",
        "addonsConfig": {
          "advancedApiOpsConfig": {},
          "integrationConfig": {},
          "monetizationConfig": {}
        }
      }
    }

    Residência dos dados

    curl -H "Authorization: Bearer $TOKEN" \
      "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$ORG_NAME/operations/$LONG_RUNNING_OPERATION_ID"

    Os exemplos seguintes mostram possíveis respostas a este pedido:

    IN_PROGRESS

    Se o Apigee ainda estiver a criar a organização, o Apigee responde com o estado IN_PROGRESS. Por exemplo:

    {
      "name": "organizations/ORG_NAME/operations/LONG_RUNNING_OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.apigee.v1.OperationMetadata",
        "operationType": "INSERT",
        "targetResourceName": "organizations/ORG_NAME",
        "state": "IN_PROGRESS"
      }
    }

    Deve aguardar um pouco mais antes de tentar validar se o processo de criação está concluído.

    CONCLUÍDO

    Quando a organização tiver sido aprovisionada, o estado da operação de longa duração é FINISHED. Por exemplo:

    {
      "name": "organizations/ORG_NAME/operations/LONG_RUNNING_OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.apigee.v1.OperationMetadata",
        "operationType": "INSERT",
        "targetResourceName": "organizations/ORG_NAME",
        "state": "FINISHED"
      },
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.apigee.v1.Organization",
        "name": "ORG_NAME",
        "description": "",
        "createdAt": "1626237148461",
        "lastModifiedAt": "1626237149384",
        "properties": {
          "property": [
            {
              "name": "features.hybrid.enabled",
              "value": "true"
            },
            {
              "name": "features.mart.connect.enabled",
              "value": "true"
            }
          ]
        },
        "analyticsRegion": "ANALYTICS_REGION",
        "runtimeType": "HYBRID",
        "subscriptionType": "TRIAL",
        "state": "ACTIVE",
        "billingType": "SUBSCRIPTION",
        "apiConsumerDataLocation": "CONSUMER_DATA_REGION",
        "expiresAt": "1631421073171",
        "addonsConfig": {
          "advancedApiOpsConfig": {},
          "integrationConfig": {},
          "monetizationConfig": {}
        }
      }
    }
  6. Pode usar a API de organizações do Apigee para obter informações sobre uma organização depois de esta ser criada.

    Por exemplo:

    Sem residência de dados

    curl -H "Authorization: Bearer $TOKEN" \
      "https://apigee.googleapis.com/v1/organizations/$ORG_NAME"

    A resposta ao seu pedido contém detalhes sobre a organização especificada no formato JSON.

    {
      "name": "apigee-example",
      "createdAt": "1626237148461",
      "lastModifiedAt": "1626237149384",
      "properties": {
        "property": [
          {
            "name": "features.hybrid.enabled",
            "value": "true"
          },
          {
            "name": "features.mart.connect.enabled",
            "value": "true"
          }
        ]
      },
      "analyticsRegion": "us-west1",
      "runtimeType": "HYBRID",
      "subscriptionType": "PAID",
      "projectId": "apigee-example",
      "state": "ACTIVE",
      "billingType": "SUBSCRIPTION",
      "expiresAt": "1631421073171",
      "addonsConfig": {
        "advancedApiOpsConfig": {},
        "integrationConfig": {},
        "monetizationConfig": {}
      }
    }

    Residência dos dados

    curl -H "Authorization: Bearer $TOKEN" \
      "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$ORG_NAME"

    A resposta ao seu pedido contém detalhes sobre a organização especificada no formato JSON.

    {
      "name": "apigee-example",
      "createdAt": "1626237148461",
      "lastModifiedAt": "1626237149384",
      "properties": {
        "property": [
          {
            "name": "features.hybrid.enabled",
            "value": "true"
          },
          {
            "name": "features.mart.connect.enabled",
            "value": "true"
          }
        ]
      },
      "analyticsRegion": "us-west1",
      "runtimeType": "HYBRID",
      "subscriptionType": "PAID",
      "projectId": "apigee-example",
      "state": "ACTIVE",
      "billingType": "SUBSCRIPTION",
      "expiresAt": "1631421073171",
      "addonsConfig": {
        "advancedApiOpsConfig": {},
        "integrationConfig": {},
        "monetizationConfig": {}
      }
    }

Resolução de problemas de criação da organização

Quando cria uma organização com a API Create organizations, pode receber uma resposta de erro. As respostas têm o seguinte aspeto:

{
  "error": {
    "code": HTTP_error_code,
    "message": "short_error_message",
    "status": "high_level_error_type",
    "details": [
      {
        "@type": "specific_error_type",
        "detail": "expanded_error_description"
      }
    ]
  }
}

A tabela seguinte apresenta os erros que pode receber e as potenciais resoluções quando tenta criar uma nova organização:

Código de erro HTTP Erro HTTP Descrição
400 Invalid JSON payload received A estrutura dos dados no seu pedido contém um erro de sintaxe ou o caminho para o ponto final está incorreto.
400 Invalid organization ID O ID da organização que pede não pode conter letras maiúsculas nem carateres especiais, exceto hífenes. Tem de conter apenas letras minúsculas, números e/ou hífenes. Pode ter um comprimento máximo de 32 carateres.
400 Unsupported analytics region Não especificou o valor de analyticsRegion no corpo do pedido ou o valor especificado não é uma das opções válidas.
400 Does not have an Apigee entitlement O seu projeto do Google Cloud ainda não foi ativado para o modo híbrido. Isto pode indicar um problema com a faturação ou outro erro relacionado com a sua conta do Google Cloud. Para mais informações, contacte a equipa de vendas do Apigee.
400 'global' violates constraint in constraints/gcp.resourceLocations on the resource projects/PROJECT_ID, Control Plane Region Tentou criar uma organização que pode não ter direito a uma subscrição PAGA. As organizações do Apigee Hybrid do tipo EVAL não suportam a residência de dados.
400 runtimeType HYBRID is not supported for PAYG_V2, use CLOUD instead: invalid argument Tentou criar uma organização num projeto com uma autorização "Pague à medida que usa" (PAYG). Contacte o representante da sua conta do Google Cloud se tiver dúvidas sobre a autorização da organização.
401 Request had invalid authentication credentials O seu token de autenticação gcloud é inválido ou está desatualizado, ou não incluiu um no pedido. Gere um novo token e reenvie a morada.
403 Permission denied on resource project PROJECT_ID Pode ter enviado um pedido que continha um ID do projeto ou um caminho incorreto.
403 Unable to retrieve project information A organização ainda não foi criada nem aprovisionada. Pode emitir um pedido para a API Operations para verificar o estado da operação de longa duração, conforme descrito no passo 5.
403 Permission denied on resource project organizations/PROJECT_ID/deployedIngressConfig Tentou criar uma organização, mas esta não tem as autorizações corretas. Contacte o representante da sua conta do Google Cloud se tiver dúvidas sobre a autorização da organização.
409 Organization already exists Tentou criar mais do que uma organização para o projeto do Google Cloud. Só pode criar uma organização por projeto.
409 Org PROPOSED_ORG_NAME already exists Tentou criar uma organização com o mesmo ID de uma organização que já existe. Os IDs das organizações têm de ser exclusivos para todos os clientes híbridos. Reenvie com um novo ID da organização proposto. Por exemplo, acrescente um valor numérico ao final do ID anterior que tentou.

Passo seguinte

Aceda ao Passo 3: crie um grupo de ambientes.