Esta página aplica-se ao Apigee, mas não ao Apigee Hybrid.
Veja a documentação do
Apigee Edge.
Este documento descreve como instalar e configurar o Apigee a partir da linha de comandos sem interligação de VPCs. Estes passos aplicam-se aos modelos de preços de subscrição e de pagamento conforme o uso para organizações pagas com ou sem a residência de dados ativada.
Consulte também as opções de aprovisionamento.Limitações
A opção de instalação de peering não VPC descrita neste documento tem algumas limitações:
- Os VPC Service Controls não são suportados.
Para ver uma lista completa das funcionalidades e abordagens de rede suportadas e não suportadas para o peering não VPC, consulte o artigo Como escolher uma opção de rede.
Resumo dos passos
Os passos de aprovisionamento são os seguintes:
- Passo 1: defina as variáveis de ambiente:
Configure
gcloud
e defina as variáveis de ambiente. A CLI Google Cloud gere a autenticação, a configuração local, o fluxo de trabalho do programador e as interações com as APIs Google Cloud. - Passo 2: ative as APIs: o Apigee requer que ative várias APIs do Google Cloud.
- Passo 3: crie a identidade de serviço do Apigee: esta conta de serviço é usada pelas bibliotecas cliente da Google Cloud para autenticar com as APIs Google Cloud.
- Passo 4: crie uma organização: uma organização do Apigee (por vezes, referida como uma organização) é o contentor de nível superior no Apigee. Inclui todos os seus ambientes e grupos de ambientes, utilizadores, proxies de API e recursos relacionados.
- Passo 5: crie uma instância de tempo de execução: uma instância, ou tempo de execução, é onde o seu projeto e os serviços relacionados são armazenados. Fornece o ponto final virado para o utilizador dos seus serviços.
- Passo 6: crie um ambiente: um proxy de API tem de ser implementado num ambiente e adicionado a um grupo de ambientes antes de as APIs que expõe serem acessíveis através da rede.
- Passo 7: configure o encaminhamento: permita o acesso externo ou apenas o acesso interno à sua API.
- Passo 8: implemente um proxy de exemplo: teste o aprovisionamento através da implementação e da chamada de um proxy de API.
Passo 1: defina variáveis de ambiente
Configure o gcloud
e defina variáveis de ambiente para utilização em passos posteriores:
- Certifique-se de que concluiu os requisitos de configuração indicados em Antes de começar.
- Tem de ter o Cloud SDK instalado. Se precisar de o instalar, consulte o artigo Instalar o SDK do Google Cloud.
- Inicialize o SDK do Google Cloud, conforme descrito em Inicializar a CLI gcloud, ou certifique-se de que o projeto do Google Cloud que criou em Pré-requisitos é o projeto predefinido para
gcloud
. - Defina as seguintes variáveis de ambiente no terminal de comandos.
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
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"
Onde:
-
AUTH define o cabeçalho
Authentication
com um token de portador. Vai usar este cabeçalho quando chamar as APIs Apigee. Tenha em atenção que o token expira após um período e, quando isso acontece, pode regenerá-lo facilmente através do mesmo comando. Para mais informações, consulte a página de referência do comando print-access-token. - PROJECT_ID é o ID do projeto do Google Cloud que criou como parte dos Pré-requisitos.
- PROJECT_NUMBER é o número do projeto do Google Cloud que criou como parte dos Pré-requisitos.
-
RUNTIME_LOCATION é a localização física onde a instância do Apigee que vai criar mais tarde está localizada. Para ver uma lista das localizações de tempo de execução disponíveis, consulte o artigo Localizações do Apigee.
-
ANALYTICS_REGION é a localização física na qual os dados de estatísticas do Apigee serão armazenados. Para ver uma lista das regiões da API Apigee Analytics disponíveis, consulte o artigo Localizações da Apigee.
RUNTIME_LOCATION e ANALYTICS_REGION podem ser a mesma região, mas não têm de ser.
-
BILLING_TYPE é o tipo de faturação da organização que cria. Os valores válidos são:
PAYG
para organizações com o plano Pay-as-you-go.SUBSCRIPTION
para organizações com subscriçã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"
Onde:
-
AUTH define o cabeçalho
Authentication
com um token de portador. Vai usar este cabeçalho quando chamar as APIs Apigee. Tenha em atenção que o token expira após um período e, quando isso acontece, pode regenerá-lo facilmente através do mesmo comando. Para mais informações, consulte a página de referência do comando print-access-token. - PROJECT_ID é o ID do projeto do Google Cloud que criou como parte dos Pré-requisitos.
- PROJECT_NUMBER é o número do projeto do Google Cloud que criou como parte dos Pré-requisitos.
-
RUNTIME_LOCATION é a localização física onde a instância do Apigee que vai criar mais tarde está localizada. Para ver uma lista das localizações de tempo de execução disponíveis, consulte o artigo Localizações do Apigee.
A localização do tempo de execução tem de estar dentro da localização do plano de controlo. - CONTROL_PLANE_LOCATION é a localização física na qual os dados do plano de controlo do Apigee são armazenados. Para ver uma lista de localizações do plano de controlo disponíveis, consulte o artigo Localizações do Apigee.
- CONSUMER_DATA_REGION é uma sub-região da região do plano de controlo. Tem de especificar a CONTROL_PLANE_LOCATION e a CONSUMER_DATA_REGION. Para ver uma lista das regiões de dados de consumidores disponíveis, consulte as localizações do Apigee.
-
BILLING_TYPE é o tipo de faturação da organização que cria. Os valores válidos são:
PAYG
para organizações com o plano Pay-as-you-go.SUBSCRIPTION
para organizações com subscrição.
-
AUTH define o cabeçalho
- (Opcional) Verifique o seu trabalho repetindo os valores que acabou de definir. Tenha em atenção que, quando quiser usar uma variável nos seus comandos, preceda o nome da variável com um cifrão ($).
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 seus comandos
echo
devem ter um aspeto semelhante ao seguinte: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 seus comandos
echo
devem ter um aspeto semelhante ao seguinte:YOUR_TOKEN my-cloud-project 1234567890 us-west1 us us-west1 SUBSCRIPTION
Passo 2: ative as APIs
-
O Apigee requer que ative várias APIs Google Cloud. Ative-as executando o seguinte comando
services enable
:gcloud services enable apigee.googleapis.com \ apihub.googleapis.com \ compute.googleapis.com \ cloudkms.googleapis.com --project=$PROJECT_ID
(Opcional) Para verificar o 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 acabou de ativar.
Passo 3: crie a identidade do serviço Apigee
-
Crie a identidade do serviço Apigee:
gcloud beta services identity create --service=apigee.googleapis.com \ --project=$PROJECT_ID
Verifique se o agente foi criado com êxito. A resposta deve apresentar 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
Passo 4: crie uma organização
Antes de poder criar uma organização, tem de criar um conjunto de chaves e uma chave de encriptação da base de dados de tempo de execução (consulte o passo 1) e, se estiver a usar a residência de dados, conjuntos de chaves e chaves de encriptação do plano de controlo (consulte o passo 2). Estas chaves do Cloud KMS encriptam os dados armazenados e replicados nas localizações de tempo de execução e plano de controlo. O Apigee usa estas entidades para encriptar dados de aplicações, como KVMs, cache e segredos de clientes, que são armazenados na base de dados. Para mais informações, consulte o artigo Acerca das chaves de encriptação do Apigee.
-
Crie um conjunto de chaves e uma chave de encriptação de base de dados de tempo de execução.
-
Defina uma variável de ambiente para a localização do anel de encriptação e da chave da base de dados de tempo de execução. Isto ajuda a garantir a consistência quando os cria e facilita o acompanhamento na documentação.
O valor é a localização física onde o conjunto de chaves de encriptação da base de dados de tempo de execução e a chave são armazenados.
Região única
Configurações de região única (nas quais tem apenas uma instância numa região): escolha entre as localizações regionais do KMS suportadas.
Por exemplo:
RUNTIMEDBKEY_LOCATION="us-west1"
O valor pode ser o mesmo que o seu $RUNTIME_LOCATION (também uma região), mas não tem de o ser. No entanto, pode haver uma vantagem em termos de desempenho se forem iguais.
Multirregião
Configurações multirregionais: escolha entre as localizações multirregionais suportadas (como
us
oueurope
) ou localizações birregionais.Por exemplo:
RUNTIMEDBKEY_LOCATION="us"
Recomendamos que, se tiver uma configuração multirregional nos EUA, use
us
para a sua localização, se possível. Caso contrário, usenam4
. - Defina variáveis de ambiente para os conjuntos de chaves e os nomes das chaves da base de dados.
O nome do conjunto de chaves tem de ser exclusivo da sua organização. Se criar uma segunda ou uma região subsequente, o nome não pode ser igual ao de outros nomes de conjuntos de chaves.
RUNTIMEDB_KEY_RING_NAME=YOUR_DB_KEY_RING_NAME
RUNTIMEDB_KEY_NAME=YOUR_DB_KEY_NAME
- (Opcional) Verifique o seu trabalho repetindo os valores que acabou de definir. Lembre-se de que, quando quiser
usar uma variável nos seus comandos, deve preceder o nome da variável com um cifrão
($).
echo $RUNTIMEDBKEY_LOCATION
echo $RUNTIMEDB_KEY_RING_NAME
echo $RUNTIMEDB_KEY_NAME
- Crie um novo conjunto de chaves:
gcloud kms keyrings create $RUNTIMEDB_KEY_RING_NAME \ --location $RUNTIMEDBKEY_LOCATION --project $PROJECT_ID
A localização da chave de encriptação da base de dados de tempo de execução do Apigee é compatível com todas as localizações do Cloud KMS que suportam o Cloud HSM e o Cloud EKM.
Crie uma chave:
gcloud kms keys create $RUNTIMEDB_KEY_NAME \ --keyring $RUNTIMEDB_KEY_RING_NAME \ --location $RUNTIMEDBKEY_LOCATION \ --purpose "encryption" \ --project $PROJECT_ID
Este comando cria a chave e adiciona-a ao conjunto de chaves.
Obtenha 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 ficheiro):
projects/PROJECT_ID/locations/RUNTIMEDBKEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME
Coloque o ID da chave numa variável de ambiente. Vai usar esta variável num comando posterior:
RUNTIMEDB_KEY_ID=YOUR_RUNTIMEDB_KEY_ID
Conceda acesso ao agente do serviço 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
Este comando associa a chave ao agente de serviço do Apigee.
Após a conclusão bem-sucedida deste pedido, 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 receber um erro como o seguinte:
INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.
Certifique-se de que usou o número do projeto e não o nome do projeto no endereço de email da conta de serviço.
-
- Se estiver a usar a residência de dados, crie um conjunto de chaves de encriptação do plano de controlo e uma chave. Se não estiver a usar a residência de dados, avance para o passo 3.
- Defina uma variável de ambiente para a localização do anel e da chave de encriptação da base de dados do plano de controlo:
CONTROL_PLANE_LOCATION=YOUR_CONTROL_PLANE_LOCATION
CONSUMER_DATA_REGION=YOUR_CONSUMER_DATA_REGION
Onde:
- CONTROL_PLANE_LOCATION é a localização física na qual os dados do plano de controlo do Apigee são armazenados. Para ver uma lista de localizações do plano de controlo disponíveis, consulte o artigo Localizações do Apigee.
- CONSUMER_DATA_REGION é uma sub-região da região do plano de controlo. Tem de especificar a CONTROL_PLANE_LOCATION e a CONSUMER_DATA_REGION. Para ver uma lista das regiões de dados de consumidores disponíveis, consulte as localizações do Apigee.
Defina variáveis de ambiente para os conjuntos de chaves e os nomes das chaves da base de dados do plano de controlo.
O nome do conjunto de chaves tem de ser exclusivo da 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
Onde:
- CONTROL_PLANE_KEY_RING_NAME é o nome do conjunto de chaves que vai usar para identificar o seu conjunto de chaves de encriptação do plano de controlo.
- CONTROL_PLANE_KEY_NAME é o nome da chave que vai usar para identificar a sua chave de encriptação do plano de controlo.
- CONSUMER_DATA_KEY_RING_NAME é o nome do conjunto de chaves que vai usar para identificar o seu conjunto de chaves de encriptação da região de dados do consumidor.
- CONSUMER_DATA_KEY_NAME é o nome da chave que vai usar para identificar a chave de encriptação da sua região de dados do consumidor.
- Crie um novo conjunto de chaves:
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
- 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
Este comando cria a chave e adiciona-a ao conjunto de chaves.
Obtenha 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 ficheiro):
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
- Coloque o ID da chave numa variável de ambiente. Vai usar esta variável num comando posterior:
CONTROL_PLANE_KEY_ID=YOUR_CONTROL_PLANE_KEY_ID
CONSUMER_DATA_KEY_ID=YOUR_CONSUMER_DATA_KEY_ID
- Conceda acesso ao agente do serviço 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
Este comando associa a chave ao agente de serviço do Apigee. Após a conclusão bem-sucedida deste pedido, 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 receber um erro como o seguinte:
INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.
Certifique-se de que usou o número do projeto e não o nome do projeto no endereço de email da conta de serviço.
-
Crie a organização enviando o seguinte pedido à API organizations do 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"'", "disableVpcPeering":"true", "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'" }'
Onde:
-d
define o payload de dados para o pedido. Este payload tem de incluir o seguinte:name
: identifica a sua nova organização. Tem de ser o mesmo nome que o ID do projeto.analyticsRegion
: especifica a localização física onde os seus dados de estatísticas serão armazenados.runtimeType
: defina este valor comoCLOUD
.billingType
: especifica o tipo de faturação da organização criada.disableVpcPeering
: defina comotrue
se não quiser usar o intercâmbio de VPC. Predefinição:false
runtimeDatabaseEncryptionKeyName
: O ID da chave de encriptação da aplicação que criou no passo anterior. Lembre-se de que o ID está estruturado como um caminho de ficheiro. Por exemplo:projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
Residência dos dados
Crie uma organização através da 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"'" }'
Onde:
-d
define o payload de dados para o pedido. Este payload tem de incluir o seguinte:name
: identifica a sua nova organização. Tem de ser o mesmo nome que o ID do projeto.runtimeType
: defina este valor comoCLOUD
.billingType
: especifica o tipo de faturação da organização criada.controlPlaneEncryptionKeyName
: é o ID da chave do plano de controlo.apiConsumerDataLocation
: também tem de especificar uma sub-região para utilização por recursos internos. Consulte as Regiões de residência dos dados para ver os valores suportados.apiConsumerDataEncryptionKeyName
: é o ID da chave da região de dados do consumidor.disableVpcPeering
: defina comotrue
se não quiser usar o intercâmbio de VPC. Predefinição:false
runtimeDatabaseEncryptionKeyName
: O ID da chave de encriptação da aplicação que criou no passo anterior. Lembre-se de que o ID tem a estrutura de um caminho de ficheiro. Por exemplo:
projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
Depois de executar este comando, o Apigee inicia uma operação de longa duração, que pode demorar alguns minutos a ser concluída.
Se receber um erro, verifique a utilização de aspas em torno dos valores das variáveis no payload de dados. Certifique-se de que tem aspas duplas-simples-duplas à volta da variável $PROJECT_ID, como mostra o exemplo seguinte:
"'"$PROJECT_ID"'"
Se usar strings simples (não variáveis de ambiente) para valores de pedidos, pode envolvê-las em aspas duplas na string de payload entre aspas simples, como mostra o exemplo seguinte:
'{ "name":"my-gcp-project", ... }'
- Aguarde alguns minutos.
- Para verificar o estado do seu pedido de criação, pode enviar um pedido
GET
para a API List organizations do Apigee, conforme mostra o exemplo seguinte: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 vir esta resposta, significa que 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 for bem-sucedido, o objeto de resposta indica
"state": "ACTIVE"
, e pode avançar para o passo seguinte.Se o Apigee devolver uma resposta de erro HTTP, consulte o artigo Criar uma organização do Apigee.
Execute os passos seguintes para criar um conjunto de chaves e uma chave de encriptação do plano de controlo.
Veja também: Resolução de problemas de CMEK.
Passo 5: crie uma instância de tempo de execução
Uma instância de tempo de execução é onde o seu projeto do Apigee e os serviços relacionados são armazenados. Esta fornece o ponto final virado para o utilizador dos seus serviços. Para criar uma nova instância de tempo de execução:
-
Verifique se o Apigee concluiu a criação da sua organização. Enviou um pedido para criar uma nova organização em Criar uma organização do Apigee, mas tem de se certificar de que o processo está concluído antes de continuar.
Para o fazer, envie o seguinte pedido à API Organizations:
Sem residência de dados
curl -i -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID"
Residência dos dados
curl -i -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID"
Se a organização existir (e tiver as autorizações adequadas para a ver), o Apigee responde com detalhes sobre a mesma. Se o Apigee responder com um erro, aguarde alguns minutos e envie o pedido novamente.
- Semelhante à tarefa anterior, em que criou uma chave de encriptação para a base de dados,
agora tem de criar uma chave do
Cloud KMS usada para encriptar dados no lado do servidor.
Para começar, defina as seguintes variáveis de ambiente:
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
- INSTANCE_NAME: o nome da nova instância. Por exemplo,
my-runtime-instance
. O nome tem de começar por uma letra minúscula, pode ter até 32 carateres e só pode incluir letras minúsculas, números e hífenes. Não pode começar nem terminar com um hífen e tem de ter, pelo menos, dois carateres. - RUNTIME_LOCATION é o local físico onde o cluster está alojado.
Os valores válidos são qualquer localização permitida pelo Compute Engine. (Consulte as
regiões e zonas disponíveis.) Este exemplo usa
us-west1
. - DISK_KEY_RING_NAME é o nome do conjunto de chaves de encriptação de disco.
- DISK_KEY_NAME é o nome da chave de encriptação de disco.
- Crie uma chave de encriptação de disco:
- Crie um novo conjunto de chaves de disco:
gcloud kms keyrings create $DISK_KEY_RING_NAME \ --location $RUNTIME_LOCATION \ --project $PROJECT_ID
O anel de chaves do disco tem de estar definido para a mesma localização que a instância. Cada instância e anel de chaves deve ter a sua própria localização.
- Crie uma nova chave de disco:
gcloud kms keys create $DISK_KEY_NAME \ --keyring $DISK_KEY_RING_NAME \ --location $RUNTIME_LOCATION \ --purpose "encryption" \ --project $PROJECT_ID
A chave pode ser referenciada pelo respetivo caminho da chave. Pode obter o caminho da chave com o seguinte comando:
gcloud kms keys list \ --location=$RUNTIME_LOCATION \ --keyring=$DISK_KEY_RING_NAME \ --project=$PROJECT_ID
O caminho principal tem um aspeto semelhante ao seguinte:
projects/PROJECT_ID/locations/RUNTIME_LOCATION/keyRings/my-disk-key-ring/cryptoKeys/my-disk-key
Coloque o caminho da chave numa variável de ambiente. Vai usar esta variável num comando posterior:
DISK_KEY_ID=YOUR_DISK_KEY_ID
Por exemplo:
DISK_KEY_ID=projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
Conceda acesso ao agente do serviço Apigee para usar a nova chave:
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 associa a chave ao agente de serviço do Apigee.
Para mais informações, consulte o artigo Acerca das chaves de encriptação do Apigee.
- Crie um novo conjunto de chaves de disco:
- Crie uma nova instância de tempo de execução para o seu projeto enviando um pedido
POST
para a API Instances do Apigee:Sem residência de dados
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"'"] }'
Residência dos dados
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"'"] }'
Onde:
-
consumerAcceptList
(Opcional) Especifica uma lista de IDs de projetos do Google Cloud que podem estabelecer ligação privada ao anexo de serviço da VPC do Apigee. A associação de serviços é uma entidade usada com o Google Cloud Private Service Connect para permitir que os produtores de serviços (neste caso, o Apigee) exponham serviços aos consumidores (neste caso, um ou mais projetos do Google Cloud que lhe pertencem). Por predefinição, usamos o projeto na nuvem que já está associado à sua organização do Apigee. Por exemplo:"consumerAcceptList": ["project1", "project2", "project3"]
Tenha em atenção que também pode definir e alterar a lista de projetos aceites na IU da instância. Para obter detalhes, consulte o artigo Gerir instâncias.
Este pedido pode demorar até 20 minutos a ser concluído porque o Apigee tem de criar e iniciar um novo cluster do Kubernetes, instalar os recursos do Apigee nesse cluster e configurar o equilíbrio de carga.
Se o Apigee devolver um erro, consulte o artigo Criar uma nova instância.
-
Para verificar o estado do seu pedido de criação de instância de tempo de execução, execute o seguinte comando. Quando o estado for ATIVO, pode avançar para o passo seguinte.
Sem residência de dados
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME"
Residência dos dados
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME"
Onde:
Passo 6: crie um ambiente
Para criar um ambiente e anexá-lo ao tempo de execução na linha de comandos:
- Defina as variáveis de ambiente a usar nesta secção. As variáveis de ambiente específicas que criar
dependem de estar a criar um ambiente para uma organização de subscrição ou de pagamento conforme o uso.
Subscrição
Para um ambiente de subscrição, crie estas variáveis:
ENVIRONMENT_NAME="YOUR_ENV_NAME"
ENV_GROUP_NAME="YOUR_ENV_GROUP_NAME"
ENV_GROUP_HOSTNAME="YOUR_ENV_GROUP_HOSTNAME"
Onde:
ENVIRONMENT_NAME
é um nome de string. Por exemplo:test
ENV_GROUP_NAME
é um nome de string. Por exemplo:test-group
ENV_GROUP_HOSTNAME
é um nome de anfitrião de domínio válido. Por exemplo:foo.example.com
Pay-as-you-go
Para um ambiente de pagamento conforme o uso, crie estas variáveis:
ENVIRONMENT_NAME="YOUR_ENV_NAME"
ENVIRONMENT_TYPE="YOUR_ENV_TYPE"
ENV_GROUP_NAME="YOUR_ENV_GROUP_NAME"
ENV_GROUP_HOSTNAME="YOUR_ENV_GROUP_HOSTNAME"
Onde:
ENVIRONMENT_NAME
é um nome de string. Por exemplo:test
ENVIRONMENT_TYPE
é o tipo de ambiente para este ambiente e só é aplicável a utilizadores de Pay-as-you-go, que têm de especificar um destes valores:BASE
,INTERMEDIATE
ouCOMPREHENSIVE
. Os outros utilizadores devem omitir o tipo de ambiente.ENV_GROUP_NAME
é um nome de string. Por exemplo:test-group
ENV_GROUP_HOSTNAME
é um nome de anfitrião de domínio válido. Por exemplo:foo.example.com
- Crie um novo ambiente com a API Environments. Os comandos específicos que usa
dependem do facto de estar a criar um ambiente para uma subscrição ou uma organização de pagamento conforme o uso.
Subscrição
Para um novo ambiente de subscrição, use o seguinte comando:
Sem residência de dados
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"'" }'
Residência dos dados
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"'" }'
O Apigee cria um novo ambiente.
Pay-as-you-go
Para um novo ambiente de pagamento conforme o uso, use o seguinte comando:
Sem residência de dados
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"'" }'
Residência dos dados
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"'" }'
O Apigee cria um novo ambiente.
- Antes de continuar, verifique se o Apigee terminou de criar o novo ambiente:
chamando a API Environments:
Sem residência de dados
curl -i -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments"
Residência dos dados
curl -i -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments"
O Apigee responde com uma lista de ambientes disponíveis; por exemplo, se o nome do seu ambiente for
test
, o Apigee responde com o seguinte:[ "test" ]
- Associe o novo ambiente à instância do tempo de execução:
Sem residência de dados
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"'" }'
Residência dos dados
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 operação pode demorar alguns minutos a ser concluída. Para verificar se o anexo foi concluído, execute este comando:
Sem residência de dados
curl -i -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments"
Residência dos dados
curl -i -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments"
Quando vir um resultado como o seguinte, pode avançar para o passo seguinte:
{ "attachments": [ { "name": "ed628782-c893-4095-b71c-f4731805290a", "environment": "test", "createdAt": "1641604447542" } ] }
- Crie um novo grupo de ambientes com o seguinte comando. Para mais informações, consulte o artigo
Acerca dos ambientes e dos grupos de ambientes:
Sem residência de dados
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"'"] }'
Residência dos dados
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"'"] }'
- Aguarde pela conclusão da operação. Pode verificar o estado do seu novo grupo através de um pedido como o seguinte:
Sem residência de dados
curl -i -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME"
Residência dos dados
curl -i -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME"
- Associe o novo ambiente ao novo grupo de ambientes com o seguinte comando:
Sem residência de dados
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"'" }'
Residência dos dados
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"'" }'
- Para verificar o estado da operação, chame esta API:
Sem residência de dados
curl -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments"
Residência dos dados
curl -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments"
Passo 7: configure o encaminhamento
Neste passo, configura a forma como as aplicações cliente comunicam com o Apigee. O tráfego do cliente para o Apigee também é denominado tráfego "northbound". As opções de configuração de saída incluem o seguinte. Aceda à opção de configuração que quer usar e siga os passos dessa opção:
Tipo de acesso | Descrição do processo de configuração e implementação |
---|---|
Interno com PSC (novo) |
Permita apenas o acesso interno aos seus proxies de API a partir de qualquer um dos seus projetos do Google Cloud através do Private Service Connect (PSC). O PSC permite uma ligação privada entre um produtor de serviços (Apigee) e um consumidor de serviços (o projeto de VPC com intercâmbio e/ou um ou mais outros projetos do Google Cloud que controla). Com este método, os pedidos passam por um ponto final de serviço ou um balanceador de carga interno regional para um único ponto de ligação, denominado anexo de serviço. Esta configuração permite que os seus clientes internos enviem pedidos de proxy de API do Apigee a partir de qualquer máquina com ligação à rede. |
Externo com PSC (novo) |
Permita o acesso externo aos seus proxies de API através do Private Service Connect (PSC). Use o Private Service Connect (PSC) para ativar a ligação privada entre um produtor de serviços (Apigee) e um consumidor de serviços (o projeto de VPC com peering e/ou um ou mais projetos do Google Cloud que controla). Com este método, os pedidos passam por um balanceador de carga externo global ou um balanceador de carga externo regional para um único ponto de ligação, denominado ligação de serviço. Esta configuração permite-lhe enviar pedidos de proxy de API do Apigee a partir de qualquer máquina com ligação à rede. |
Cada uma destas abordagens de encaminhamento é apresentada nas instruções abaixo.
Encaminhamento interno (PSC)
Esta secção explica como permitir apenas o acesso interno aos seus proxies de API a partir de qualquer um dos seus projetos do Google Cloud através do Private Service Connect (PSC).
Tem duas opções para configurar o acesso interno com o PSC:
- Ponto final do serviço: os pedidos passam por um ponto final do serviço para um único ponto de anexação, denominado anexação do serviço.
- Balanceador de carga regional interno: os pedidos passam por um balanceador de carga HTTP(S) interno regional. Veja também Balanceamento de carga global vs. regional.
Selecione o separador abaixo para a sua escolha de configuração e siga os passos:
Ponto final do serviço
Crie um ponto final de serviço do PSC para a associação de serviço
- Obtenha a associação de serviço da instância que criou anteriormente:
Sem residência de dados
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
Residência dos dados
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
Na saída de exemplo seguinte, o valor
serviceAttachment
é apresentado a negrito:{ "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" } ] }
- Crie um ponto final de serviço do PSC que aponte para a associação do serviço que obteve do corpo da resposta da instância no passo anterior, conforme explicado em Crie um ponto final do Private Service Connect.
- O aprovisionamento do Apigee está concluído. Aceda a Implemente um proxy de exemplo.
LB regional interno
Passo 7a: configure as variáveis de ambiente
As instruções nesta secção usam variáveis de ambiente para fazer referência a strings usadas repetidamente. Certifique-se de que definiu as variáveis em Definir variáveis de ambiente.
Além disso, defina as seguintes variáveis de ambiente:
NEG_NAME=YOUR_NEG_NAMENETWORK_NAME=YOUR_NETWORK_NAME
SUBNET_NAME=YOUR_SUBNET_NAME
TARGET_SERVICE=TARGET_SERVICE_ATTACHMENT
Onde:
- NEG_NAME: um nome para o grupo de pontos finais da rede.
- NETWORK_NAME: (Opcional) Nome da rede na qual o NEG é criado. Se omitir este parâmetro, é usada a rede do projeto
default
. - SUBNET_NAME: nome da sub-rede usada para a conetividade privada ao produtor. O tamanho da sub-rede pode ser pequeno: o NEG do PSC só precisa de um IP da sub-rede. Para o Apigee, só é necessário um NEG do PSC por região. A sub-rede pode ser partilhada e usada por VMs ou outras entidades. Se não for especificada uma sub-rede, os pontos finais de rede podem pertencer a qualquer sub-rede na região onde o grupo de pontos finais de rede é criado.
- TARGET_SERVICE: a associação de serviço à qual quer estabelecer ligação. Por exemplo:
projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
Passo 7b: crie uma sub-rede apenas de 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
Passo 7c: crie um grupo de pontos finais de rede (NEG)
- Obtenha a associação de serviço da instância que criou anteriormente:
Sem residência de dados
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
Residência dos dados
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
Na saída de exemplo seguinte, o valor
serviceAttachment
é apresentado a negrito:{ "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" } ] }
Crie um NEG do Private Service Connect que aponte para o anexo do serviço que obteve do corpo da resposta da instância no passo 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
Onde
- $PROJECT_ID pode ser o projeto do Google Cloud que já está associado à sua organização do Apigee ou um projeto do Google Cloud incluído no
consumerAcceptlist
quando a instância de runtime do Apigee foi criada.
- $PROJECT_ID pode ser o projeto do Google Cloud que já está associado à sua organização do Apigee ou um projeto do Google Cloud incluído no
Passo 7d: configure o balanceador de carga interno regional
- Reserve um endereço IPv4 interno para o balanceador de carga.
gcloud compute addresses create ADDRESS_NAME \ --ip-version=IPV4 --subnet=$SUBNET_NAME \ --region=$RUNTIME_LOCATION --project=$PROJECT_ID
Substitua ADDRESS_NAME por um nome para o recurso de endereço IP.
Execute este comando para ver o endereço IP reservado:
gcloud compute addresses describe ADDRESS_NAME \ --format="get(address)" --region=$RUNTIME_LOCATION --project=$PROJECT_ID
- Crie um serviço de back-end para o NEG.
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
- Adicione o NEG ao serviço de back-end:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=$NEG_NAME \ --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
Substitua o seguinte:
- NEG_NAME: o nome do grupo de pontos finais da rede.
- BACKEND_SERVICE_NAME com o nome do serviço de back-end.
-
Para criar um balanceador de carga HTTPS, tem de ter um recurso de certificado SSL para usar no proxy de destino HTTPS.
Use este comando para criar um recurso de certificado SSL autogerido. Para criar um certificado SSL autogerido, precisa de um ficheiro de chave privada local e um ficheiro de certificado local. Se precisar de criar estes ficheiros, consulte o passo 1 da utilização de certificados SSL autogeridos.
gcloud compute ssl-certificates create CERTIFICATE \ --certificate LB_CERT \ --private-key LB_PRIVATE_KEY --region=$RUNTIME_LOCATION --project=$PROJECT_ID
Substitua o seguinte:
- CERTIFICATE: um nome para o certificado.
- LB_CERT: o caminho para o ficheiro de certificado no formato PEM do seu certificado autogerido.
- LB_PRIVATE_KEY: o caminho para o ficheiro de chave privada no formato PEM do seu certificado autogerido.
-
Crie um mapa de URLs para o balanceador de carga.
Um mapa de URLs tem de fazer referência a um serviço de back-end predefinido. Defina o serviço de back-end que acabou de criar como predefinição.
gcloud compute url-maps create URL_MAP_NAME \ --default-service=DEFAULT_BACKEND_SERVICE_NAME \ --region=$RUNTIME_REGION \ --project=$PROJECT_ID
Substitua o seguinte:
- URL_MAP_NAME: um nome para o mapa de URLs.
- DEFAULT_BACKEND_SERVICE_NAME: o nome do serviço de back-end predefinido do balanceador de carga. A predefinição é usada quando nenhuma regra de anfitrião corresponde ao nome do anfitrião pedido.
-
Use o recurso de certificado SSL para criar um 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
Substitua o seguinte:
- PROXY_NAME: um nome para o proxy HTTPS de destino.
- URL_MAP_NAME: o nome do mapa de URLs.
- CERTIFICATE: o nome do recurso do certificado.
- Crie a regra de encaminhamento.
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
Substitua o seguinte:
- FWD_RULE: um nome para a regra de encaminhamento.
- ADDRESS_NAME: o recurso de endereço IP que reservou para usar na regra de encaminhamento.
- PROXY_NAME: o nome do proxy HTTPS de destino.
- NETWORK_NAME: (Opcional) Nome da rede na qual o NEG é criado. Se omitir este parâmetro, é usada a rede do projeto
default
. - SUBNET_NAME: nome da sub-rede usada para a conetividade privada ao produtor.
- O aprovisionamento do Apigee está concluído. Aceda a Implemente um proxy de exemplo.
Substitua BACKEND_SERVICE_NAME pelo nome do serviço de back-end.
Encaminhamento externo (PSC)
Esta secção descreve como configurar o encaminhamento externo através do Private Service Connect (PSC) para permitir a comunicação entre o Apigee e as VPCs que controla. Tem de o fazer antes de poder enviar um pedido de um cliente externo para a sua instância do tempo de execução do Apigee.
Passo 7b: crie um NEG e configure o balanceador de carga
Pode criar um balanceador de carga global ou regional.
LB externo global
Configure um balanceador de carga HTTP(S) externo global (esquema de balanceamento de carga definido como EXTERNAL_MANAGED
).
Embora o NEG do Private Service Connect seja regional, todos os outros componentes de equilíbrio de carga nesta configuração são globais.
- Certifique-se de que definiu as variáveis de ambiente em Definir variáveis de ambiente.
- Obtenha a associação de serviço da instância que criou anteriormente:
Sem residência de dados
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
Residência dos dados
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
Na saída de exemplo seguinte, o valor
serviceAttachment
é apresentado a negrito:{ "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" } ] }
Crie um NEG do Private Service Connect que aponte para a associação do serviço que obteve do corpo da resposta da instância no passo 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
Substitua o seguinte:
- NEG_NAME: um nome para o grupo de pontos finais da rede.
- TARGET_SERVICE: a associação de serviço à qual quer estabelecer ligação. Use o valor da associação de serviço devolvido pelo comando anterior. Por exemplo:
projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
- NETWORK_NAME: (Opcional) Nome da rede na qual o NEG é criado. Se omitir este parâmetro, é usada a rede do projeto
default
. - SUBNET_NAME: nome da sub-rede usada para a conetividade privada ao produtor. O tamanho da sub-rede pode ser pequeno: o NEG do PSC só precisa de um IP da sub-rede. Para o Apigee, só é necessário um NEG do PSC por região. A sub-rede pode ser partilhada e usada por VMs ou outras entidades. Se não for especificada uma sub-rede, os pontos finais de rede podem pertencer a qualquer sub-rede na região onde o grupo de pontos finais de rede é criado.
- $PROJECT_ID O projeto do Google Cloud que já está associado
à sua organização do Apigee ou um projeto do Google Cloud incluído
no
consumerAcceptlist
quando a instância de runtime do Apigee foi criada. Se ainda não o fez, crie uma variável de ambiente para guardar o ID do projeto, uma vez que é usado na maioria dos comandos seguintes.
- Reserve um endereço IPv4 externo global para o balanceador de carga.
gcloud compute addresses create ADDRESS_NAME \ --ip-version=IPV4 --global --project=$PROJECT_ID
Substitua ADDRESS_NAME por um nome para o recurso de endereço IP.
Execute este comando para ver o endereço IP reservado:
gcloud compute addresses describe ADDRESS_NAME \ --format="get(address)" --global --project=$PROJECT_ID
- Crie um serviço de back-end para o NEG.
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global --project=$PROJECT_ID
- Adicione o NEG ao serviço de back-end.
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-region=REGION \ --global --project=$PROJECT_ID
Substitua o seguinte:
- BACKEND_SERVICE_NAME: o nome do serviço de back-end.
- NEG_NAME: o nome do grupo de pontos finais da rede.
- REGION: a região do grupo de pontos finais da rede.
Crie um mapa de URLs para o balanceador de carga.
Um mapa de URLs tem de fazer referência a um serviço de back-end predefinido. Defina o serviço de back-end que acabou de criar como predefinição.
gcloud compute url-maps create URL_MAP_NAME \ --default-service=DEFAULT_BACKEND_SERVICE_NAME \ --global --project=$PROJECT_ID
Substitua o seguinte:
- URL_MAP_NAME: um nome para o mapa de URLs.
- DEFAULT_BACKEND_SERVICE_NAME: o nome do serviço de back-end predefinido do balanceador de carga. A predefinição é usada quando nenhuma regra de anfitrião corresponde ao nome do anfitrião pedido.
Crie o proxy HTTPS de destino.
Para criar um balanceador de carga HTTPS, tem de ter um recurso de certificado SSL para usar no proxy de destino HTTPS. Pode criar um recurso de certificado SSL através de um certificado SSL gerido pela Google ou de um certificado SSL autogerido. A utilização de certificados geridos pela Google é recomendada porque o Google Cloud obtém, gere e renova estes certificados automaticamente.
Para criar um certificado gerido pela Google, tem de ter um domínio.
Use este comando para criar um recurso de certificado SSL gerido pela Google:
gcloud compute ssl-certificates create CERTIFICATE \ --domains DOMAIN --project=$PROJECT_ID
Substitua o seguinte:
- CERTIFICATE: um nome para o certificado.
- DOMAIN: o nome do domínio do seu balanceador de carga.
Use este comando para criar um recurso de certificado SSL autogerido. Para criar um certificado SSL autogerido, precisa de um ficheiro de chave privada local e um ficheiro de certificado local. Se precisar de criar estes ficheiros, consulte o passo 1 da utilização de certificados SSL autogeridos.
gcloud compute ssl-certificates create CERTIFICATE \ --certificate LB_CERT \ --private-key LB_PRIVATE_KEY --project=$PROJECT_ID
Substitua o seguinte:
- CERTIFICATE: um nome para o certificado.
- LB_CERT: o caminho para o ficheiro de certificado no formato PEM do seu certificado autogerido.
- LB_PRIVATE_KEY: o caminho para o ficheiro de chave privada no formato PEM do seu certificado autogerido.
Use o recurso de certificado SSL para criar um proxy HTTPS de destino.
gcloud compute target-https-proxies create PROXY_NAME \ --url-map=URL_MAP_NAME \ --ssl-certificates=CERTIFICATE --project=$PROJECT_ID
Substitua o seguinte:
- PROXY_NAME: um nome para o proxy HTTPS de destino.
- URL_MAP_NAME: o nome do mapa de URLs.
- CERTIFICATE: o nome do recurso do certificado.
- Crie a regra de encaminhamento.
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
Substitua o seguinte:
- FWD_RULE: um nome para a regra de encaminhamento.
- ADDRESS_NAME: o recurso de endereço IP que reservou para usar na regra de encaminhamento.
- PROXY_NAME: o nome do proxy HTTPS de destino.
Substitua BACKEND_SERVICE_NAME pelo nome do serviço de back-end.
LB externo regional
Configure um balanceador de carga HTTP(S) externo regional. Consulte também Vista geral do balanceador de carga HTTP(S) externo.
- Certifique-se de que definiu as variáveis em Definir variáveis de ambiente.
- Crie uma sub-rede só de 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
Substitua o seguinte:
- SUBNET_NAME: o nome da sub-rede.
- (Opcional) NETWORK_NAME: nome da rede na qual a sub-rede é criada. Se omitir este parâmetro, é usada a rede do projeto predefinida.
- Obtenha a associação de serviço da instância que criou anteriormente:
Sem residência de dados
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
Residência dos dados
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
Na saída de exemplo seguinte, o valor
serviceAttachment
é apresentado a negrito:{ "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" } ] }
- Crie um grupo de pontos finais de rede.
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
Substitua o seguinte:
- NEG_NAME: o nome do grupo de pontos finais da rede.
- TARGET_SERVICE: o nome da associação de serviço à qual quer estabelecer ligação.
Por exemplo:
projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
- Crie um serviço de back-end para o NEG.
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
- Adicione o NEG ao serviço de back-end.
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
Substitua o seguinte:
- BACKEND_SERVICE_NAME: o nome do serviço de back-end.
- NEG_NAME: o nome do grupo de pontos finais da rede.
Crie um mapa de URLs para o balanceador de carga.
Um mapa de URLs tem de fazer referência a um serviço de back-end predefinido. Defina o serviço de back-end que acabou de criar como predefinição.
gcloud compute url-maps create URL_MAP_NAME \ --default-service=DEFAULT_BACKEND_SERVICE_NAME \ --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
Substitua o seguinte:
- URL_MAP_NAME: um nome para o mapa de URLs.
- DEFAULT_BACKEND_SERVICE_NAME: o nome do serviço de back-end predefinido do balanceador de carga. A predefinição é usada quando nenhuma regra de anfitrião corresponde ao nome do anfitrião pedido.
Crie o proxy HTTPS de destino.
Para criar um balanceador de carga HTTPS, tem de ter um recurso de certificado SSL para usar no proxy de destino HTTPS.
Use este comando para criar um recurso de certificado SSL autogerido. Para criar um certificado SSL autogerido, precisa de um ficheiro de chave privada local e um ficheiro de certificado local. Se precisar de criar estes ficheiros, consulte o passo 1 da utilização de certificados SSL autogeridos.
gcloud compute ssl-certificates create CERTIFICATE \ --certificate LB_CERT \ --private-key LB_PRIVATE_KEY --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
Substitua o seguinte:
- CERTIFICATE: um nome para o certificado.
- LB_CERT: o caminho para o ficheiro de certificado no formato PEM do seu certificado autogerido.
- LB_PRIVATE_KEY: o caminho para o ficheiro de chave privada no formato PEM do seu certificado autogerido.
Use o recurso de certificado SSL para criar um 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
Substitua o seguinte:
- PROXY_NAME: um nome para o proxy HTTPS de destino.
- URL_MAP_NAME: o nome do mapa de URLs.
- CERTIFICATE: o nome do recurso do certificado.
- Reserve um endereço externo regional para o balanceador de carga. Tenha em atenção que o nível da rede tem de
estar definido como
STANDARD
.gcloud compute addresses create ADDRESS_NAME \ --region=$RUNTIME_LOCATION --network-tier=STANDARD \ --project=$PROJECT_ID
Substitua ADDRESS_NAME por um nome para o recurso de endereço IP.
Execute este comando para ver o endereço IP reservado:
gcloud compute addresses describe ADDRESS_NAME \ --format="get(address)" --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
- Crie a regra de encaminhamento.
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
Substitua o seguinte:
- FWD_RULE: um nome para a regra de encaminhamento.
- ADDRESS_NAME: o recurso de endereço IP que reservou para usar na regra de encaminhamento.
- PROXY_NAME: o nome do proxy HTTPS de destino.
Substitua BACKEND_SERVICE_NAME pelo nome do serviço de back-end.
O aprovisionamento do Apigee está concluído. Aceda a Implemente um proxy de exemplo.
Passo 8: implemente um proxy de exemplo
- Transfira o proxy de exemplo do GitHub. O destino do proxy é o serviço httpbin.org, que é um serviço público de pedidos e respostas usado com frequência.
- Carregue o pacote do proxy de API para o tempo de execução através da API
apis
do Apigee:Sem residência de dados
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'
Residência dos dados
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'
Onde PATH_TO_ZIP_FILE é o caminho para o diretório que contém o ficheiro ZIP transferido.
-
Implemente o proxy de API no ambiente que criou anteriormente:
Sem residência de dados
curl -i -H "Authorization: Bearer $AUTH" -X POST \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"
Residência dos dados
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"
- Confirme se a implementação foi concluída com êxito com esta chamada API:
Sem residência de dados
curl -i -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"
Residência dos dados
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"
Chame o proxy da API:
Envie um pedido para o proxy de API a partir de qualquer máquina com ligação à rede executando o seguinte comando:
curl -i -H "Host: ENV_GROUP_HOSTNAME" \ "https://ENV_GROUP_HOSTNAME/httpbin/headers"
Se necessário, pode usar esta API para obter o valor ENV_GROUP_HOSTNAME:
Sem residência de dados
curl -i -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups"
Residência dos dados
curl -i -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups"
Se receber um erro como este:
CONNECT_CR_SRVR_HELLO:sslv3 alert handshake failure
, verifique se o certificado SSL que criou anteriormente foi aprovisionado. Use este comando para verificar o estado do aprovisionamento. Quando o certificado é aprovisionado, o respetivo estado éACTIVE
.gcloud compute ssl-certificates describe CERTIFICATE \ --global \ --format="get(name,managed.status, managed.Status)"
Após o êxito, o proxy da API de exemplo devolve uma resposta semelhante 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 mais informações sobre a implementação de proxies, incluindo informações adicionais de resolução de problemas, consulte o artigo Implementar um proxy de API.