Este documento destina-se a arquitetos empresariais e programadores de software que querem criar um pipeline de automatização para usar o Active Assist na respetiva organização. Google Cloud Faz parte de uma série que aborda padrões de arquitetura que as empresas podem usar para otimizar a respetiva presença na nuvem em grande escala através do Active Assist. A série é composta pelas seguintes partes:
- Padrões de utilização do Active Assist em grande escala
- Usar pipelines sem servidor com o Active Assist (este documento)
- Usar a cadeia de ferramentas do GKE Enterprise com o Active Assist
Este tutorial mostra como usar Google Cloud tecnologias sem servidor para criar um pipeline de automatização para obter e processar recomendações do Active Assist. Baseia as recomendações nas regras empresariais definidas pela sua empresa. O pipeline de automatização que configurar neste tutorial ajuda a trabalhar com o Active Assist em grande escala, mantendo um processo de revisão e acionamento liderado pela equipa. Esta abordagem é útil quando a sua empresa quer dimensionar a utilização do portefólio do Active Assist, mas manter o controlo do processo de revisão e acionamento nas equipas. Oferece uma alternativa à utilização de um pipeline de integração contínua e entrega contínua (CI/CD).
A arquitetura demonstrada neste tutorial é genérica e pode expandi-la para funcionar com outros produtos sem servidor. O tutorial pressupõe que tem conhecimentos das seguintes Google Cloud tecnologias:
Para concluir este tutorial, tem de ter uma conta do Slack ou uma ferramenta de processamento de notificações ou pedidos semelhante. A ferramenta tem de estar configurada no seu computador e pronta a usar.
Arquitetura
Uma vez que a arquitetura demonstrada neste tutorial é modular, pode adaptar o componente de notificações para corresponder aos requisitos da sua empresa. Este tutorial demonstra como gerar notificações e enviá-las para o Slack. Também pode optar por enviar notificações para o Pub/Sub ou qualquer outra ferramenta de processamento de notificações ou pedidos.
O diagrama de arquitetura seguinte mostra os componentes que usa neste tutorial:
A arquitetura tem os seguintes componentes:
- Um serviço do Cloud Run que um agendador aciona a intervalos fixos. O serviço invoca as APIs Recommender lendo os metadados (IDs dos projetos e tipos de recomendadores) que estão definidos e armazenados numa coleção do Firestore.
- Um tópico do Pub/Sub para o qual as recomendações do Active Assist são enviadas e no qual são processadas.
- Um segundo serviço do Cloud Run que analisa as recomendações do Active Assist. Este serviço determina como as recomendações são processadas com base nas regras empresariais definidas pela sua empresa e armazenadas numa coleção do Firestore.
- Duas coleções do Firestore para armazenar os metadados da empresa e as regras empresariais. As coleções do Firestore funcionam da seguinte forma:
- A primeira recolha armazena os metadados da empresa relevantes para
obter recomendações do Active Assist. Neste tutorial, os atributos
recommendation type,Google Cloud project IDselocationssão usados como metadados da empresa. Estes atributos são usados pelo serviçorecommendation-collectorCloud Run para determinar que tipos de recomendações são obtidos. - A segunda coleção armazena regras empresariais que são aplicadas quando as recomendações são processadas.
- A primeira recolha armazena os metadados da empresa relevantes para
obter recomendações do Active Assist. Neste tutorial, os atributos
Objetivos
- Crie um serviço do Cloud Run de exemplo para obter recomendações do Active Assist para um projeto de exemplo e enviá-las para um tópico do Pub/Sub.
- Crie duas coleções do Firestore para armazenar metadados de amostra e regras empresariais, respetivamente.
- Crie um segundo serviço do Cloud Run para processar recomendações de acordo com as regras empresariais de exemplo que definir neste tutorial.
- Crie um canal do Slack para o qual o serviço do Cloud Run envia recomendações de exemplo do Active Assist.
- Teste o pipeline completo com exemplos de recomendações do Active Assist.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização prevista,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Antes de começar
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
- Tome nota do Google Cloud ID do projeto do gestor de recomendações projeto. Precisa deste ID na secção seguinte sobre a configuração do ambiente.
-
Enable the Cloud Build, Firestore, App Engine,Pub/Sub, Cloud Run, Cloud Scheduler, and Cloud Source Repositories APIs.
Usa as credenciais da aplicação predefinidas para este tutorial. Se lhe for pedido que crie credenciais na página Adicione credenciais ao seu projeto, clique em Cancelar.Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Verify that billing is enabled for your Google Cloud project.
-
Crie o seguinte:
- Um exemplo de um canal do Slack.
- Uma app Slack de exemplo e um webhook de entrada para receber notificações geradas por um motor denominado
recommendation-rules-engine. Configura o motor mais tarde neste tutorial.
Depois de criar uma app Slack e um URL de webhook de entrada, anote o URL, pois vai precisar dele mais tarde neste tutorial.
Criar o pipeline sem servidor
Nesta secção, cria os componentes de que precisa para criar o pipeline sem servidor. A plataforma gera recomendações do Active Assist com base nos padrões de utilização e nas métricas do sistema. Consoante as recomendações geradas, cada categoria de recomendações pode usar um período predefinido diferente do passado para analisar os dados de utilização e as métricas.
Se tiver um projeto Google Cloud de exemplo com recursos existentes e recomendações do Active Assist, pode executar o pipeline para processar essas recomendações depois de fazer as alterações adequadas ao exemplo de código fornecido.
Crie as coleções do Firestore
Nesta secção, cria duas coleções do Firestore.
A primeira, a coleção activeassist-metadata, armazena os metadados da empresa relevantes para obter recomendações do Active Assist. A segunda, a coleção activeassist-business-rules, armazena as regras empresariais que são aplicadas quando o pipeline processa recomendações.
Quando as recomendações do Active Assist são analisadas, com base nas regras empresariais na coleção do Firestore, é gerada e enviada uma notificação ou a recomendação é aplicada automaticamente ao recurso relevante. Google Cloud
Crie a coleção activeassist-metadata
Na Google Cloud consola, aceda à página do Firestore.
Crie uma base de dados do Firestore se ainda não tiver uma. Em alternativa, se já tiver uma base de dados do Firestore, avance para o passo seguinte.
Crie a base de dados:
- Clique em Selecionar modo nativo para ativar o Firestore.
- Selecione uma localização da região perto da região onde os seus serviços do Cloud Run são executados.
- Clique em Criar base de dados. Demora alguns momentos a concluir a configuração.
Na página do Firestore, clique em Iniciar recolha.
No campo ID da coleção, introduza o seguinte:
activeassist-metadata.Preencha os campos conforme mostrado na tabela seguinte. Para adicionar o campo seguinte, clique em Adicionar campo.
Nome do campo Tipo de campo Valor do campo Nota projectstringStub-Project-IDEste tutorial usa um marcador para o valor do campo. Se quiser usar recomendações de um projeto existente, introduza o ID do projeto. Google Cloud locationsarrayglobalAlgumas recomendações podem ser específicas da região ou da zona, como recomendações de redimensionamento de VMs. Outras recomendações são globais, por exemplo, recomendações da IAM. recommenderTypestringgoogle.iam.policy.RecommenderNão aplicável. Quando os campos estiverem preenchidos, clique em Guardar.
Crie a coleção activeassist-business-rules
- Clique em Iniciar recolha.
No campo ID da coleção, introduza o seguinte:
activeassist-business-rulesPreencha o documento conforme mostrado na tabela seguinte. Para adicionar o campo seguinte, clique em Adicionar campo.
Nome do campo Tipo de campo Valor do campo Nota actionstringNotifySe definir o valor como Apply, o serviço aplica a recomendação e remove a função não usada.projectIdstringStub-Project-IDEste tutorial usa uma recomendação de teste. Se quiser usar recomendações de um projeto Google Cloud existente, introduza o ID do projeto. projectNumberstring999999999Este tutorial usa uma recomendação de teste.
Se estiver a usar uma recomendação de um projeto Google Cloud existente, introduza o número do projeto. Pode encontrar o número do projeto na Google Cloud página de boas-vindas da consolarecommenderTypestringgoogle.iam.policy.RecommenderNão aplicável. recommenderSubtypestringREMOVE_ROLENão aplicável. slackWebhookURLstringIntroduza o URL do webhook do Slack que gerou num passo anterior. O URL é semelhante ao seguinte:
https://hooks.slack.com/services/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Este tutorial mostra como criar uma regra para determinar se uma recomendação é aplicada automaticamente ou se é gerada uma notificação e enviada para uma plataforma como o Slack. Para saber como uma recomendação pode ser aplicada automaticamente com base na avaliação de regras empresariais de exemplo que configurou, consulte o repositório associado.
Quando o documento estiver preenchido, clique em Guardar.
Criar um serviço do Cloud Run agendado
Nesta secção, cria um serviço do Cloud Run agendado denominado
recommendation-collector que invoca a API Recommender e
obtém recomendações ativas. A API Recommender do Identity and Access Management
é usada neste tutorial como a API Recommender. O serviço lê os metadados da coleção do activeassist-metadata Firestore
que criou para determinar que recomendações obter.
Clique em Abrir no Cloud Shell para abrir o Cloud Shell para o projeto do gestor de recomendações.
Quando o Cloud Shell é aberto, os seguintes comandos são executados:
- O comando de clonagem do repositório do GitHub.
- O comando change directory.
Quando a caixa de diálogo Abrir no Cloud Shell for apresentada, selecione Confiar e, de seguida, clique em Confirmar.
Defina o ID do projeto e o número do projeto do projeto do Gestor de recomendações atual como variáveis:
export RECO_MGR_PROJECT=PROJECT_ID gcloud config set project $RECO_MGR_PROJECT export RECO_MGR_PROJECT_NUMBER=$(gcloud projects describe $DEVSHELL_PROJECT_ID --format='value(projectNumber)')Substitua
PROJECT_IDpelo ID do seu projeto. Depois de introduzir os comandos, clique em Autorizar quando lhe for pedido.Defina a variável para a região de implementação:
export REGION=us-central1Embora este tutorial use a região
us-central1, pode usar qualquer região onde o Cloud Run esteja disponível.Crie uma variável de ambiente para a sua imagem do Docker:
export RECOMMENDER_IMAGE=gcr.io/$RECO_MGR_PROJECT/recommendation-collector:1.0Crie a imagem de Docker e carregue-a para o Container Registry:
gcloud builds submit --tag $RECOMMENDER_IMAGECrie uma conta de serviço para o serviço
recommendation-collectorinteragir com outros serviços na pipeline: Google Cloudgcloud iam service-accounts create recommendation-collector-sa \ --description "Service Account that the recommendation-collector service uses to invoke other Google Cloud services" \ --display-name "recommendation-collector-sa" \ --project $RECO_MGR_PROJECTÉ uma boa prática conceder autorizações detalhadas aos seus serviços do Cloud Run atribuindo funções predefinidas à conta de serviço. Para saber mais, consulte o artigo Identidade do serviço.
Conceda à conta de serviço do serviço
recommendation-collectoracesso ao Firestore e à API Recommender:gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/datastore.user gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/pubsub.publisherSe estiver a executar este tutorial com o exemplo
stubfornecido no repositório que clonou, avance para o passo seguinte.Se estiver a criar o pipeline neste tutorial com recomendações geradas para um projeto existente, tem de atribuir autorizações da IAM às contas de serviço que criou para executar os dois serviços do Cloud Run. Google Cloud
Defina uma variável de ambiente,
TEST_PROJECT_ID, com o ID do projeto para o qual executa este pipeline antes de executar os comandos:export TEST_PROJECT_ID=TEST_PROJECT_ID gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/recommender.iamAdmin gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/serviceusage.serviceUsageConsumer gcloud services enable recommender.googleapis.com --project $TEST_PROJECT_IDCertifique-se de que o ID do projeto que usa corresponde ao que introduziu ao criar as coleções do Firestore.
Para este tutorial, implementa o serviço com uma variável de ambiente denominada
STUB_RECOMMENDATIONS. Esta variável permite-lhe usar um stub para testar o pipeline.Implemente o serviço do Cloud Run:
gcloud run deploy recommendation-collector \ --image=$RECOMMENDER_IMAGE \ --no-allow-unauthenticated \ --region $REGION \ --platform managed \ --service-account recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --set-env-vars="STUB_RECOMMENDATIONS=true" \ --project $RECO_MGR_PROJECT \Aceite todos os comandos do sistema.
Se quiser executar o pipeline com recomendações do Active Assist geradas para um projeto, remova a seguinte linha do comando antes de o implementar: Google Cloud
--set-env-vars="STUB_RECOMMENDATIONS=true"
Configure uma tarefa do Cloud Scheduler para executar o recommender-collector service
No Cloud Shell, crie uma conta de serviço para que os trabalhos do Cloud Scheduler usem para executar o serviço
recommendation-collector:gcloud iam service-accounts create recommender-scheduler-sa \ --description "Service Account used by Cloud Scheduler to invoke the recommender-parser service" \ --display-name "recommender-scheduler-sa" \ --project $RECO_MGR_PROJECTAtribua à conta de serviço a função
run/invokerpara lhe permitir invocar o serviço do Cloud Run:gcloud run services add-iam-policy-binding recommendation-collector \ --member=serviceAccount:recommender-scheduler-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role=roles/run.invoker \ --region=$REGION \ --platform=managedObtenha o
recommendation-collectorURL do serviço:export RECOMMENDER_SERVICE_URI=`gcloud run services describe recommendation-collector \ --platform managed \ --project $RECO_MGR_PROJECT \ --region $REGION \ --format="value(status.url)"`/runCrie uma tarefa do Cloud Scheduler denominada
recommender-iam-scheduler:gcloud scheduler jobs create http recommender-iam-scheduler \ --project $RECO_MGR_PROJECT \ --time-zone "America/Los_Angeles" \ --schedule="0 */3 * * *" \ --uri=$RECOMMENDER_SERVICE_URI \ --description="Scheduler job to invoke recommendation pipeline" \ --oidc-service-account-email="recommender-scheduler-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com" \ --headers="Content-Type=application/json" \ --http-method="POST"Defina o fuso horário para corresponder à sua localização. O formato do valor do fuso horário baseia-se na base de dados tz.
Para mais informações, consulte gcloud scheduler jobs create http.
A tarefa do Cloud Scheduler invoca a rota
/runpara o serviçorecommendation-collector.A definição da flag
--schedule="0 */3 * * *"executa a tarefa do agendador a cada três horas. Pode alterar esta definição de acordo com os seus requisitos. Para mais informações, consulte o artigo Configurar programações de tarefas cron.
Crie o motor de regras de recomendações para processar recomendações
Nesta secção, cria um segundo serviço do Cloud Run denominado recommendation-rules-engine para processar as recomendações que o serviço recommendation-collector recolhe. O serviço recommendation-rules-engine é invocado pelo Pub/Sub quando são enviadas novas recomendações para o tópico activeassist-recommendations.
Este serviço analisa as recomendações com base nas regras empresariais que definiu na recolha activeassist-business-rules.
No Cloud Shell, abra o diretório
recommendation-rules-engine:cd ../recommendation-rules-engineCrie uma variável de ambiente para a sua imagem do Docker:
export RULES_ENGINE_IMAGE=gcr.io/$RECO_MGR_PROJECT/recommendation-rules-engine:1.0Crie a imagem de Docker e carregue-a para o Container Registry:
gcloud builds submit --tag $RULES_ENGINE_IMAGECrie uma conta de serviço para o serviço
recommendation-rules-engineinteragir com outros serviços Google Cloud no pipeline:gcloud iam service-accounts create recommendation-rules-sa \ --description "Service Account that recommendation-rules-engine uses to invoke other Google Cloud services" \ --display-name "recommendation-rules-sa" \ --project $RECO_MGR_PROJECTConceda à conta de serviço do serviço
recommendation-rules-engineacesso ao Firestore:gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/datastore.userSe estiver a usar os stubs fornecidos para este tutorial, avance para o passo seguinte.
Se estiver a testar o pipeline com recomendações geradas para um Google Cloud projeto em vez dos stubs fornecidos para este tutorial, execute os seguintes comandos para permitir que a conta de serviço do motor de regras aceda ao seu projeto:
gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/serviceusage.serviceUsageConsumer gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/recommender.iamAdmin gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/resourcemanager.projectIamAdminImplemente o serviço do Cloud Run:
gcloud run deploy recommendation-rules-engine \ --image=$RULES_ENGINE_IMAGE \ --no-allow-unauthenticated \ --region $REGION \ --platform managed \ --service-account recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --project $RECO_MGR_PROJECTAceite todos os comandos do sistema.
Obtenha o URL
recommendation-rules-engine:export RECOMMENDER_SERVICE_RULES_URI=`gcloud run services describe recommendation-rules-engine \ --platform managed \ --project $RECO_MGR_PROJECT \ --region $REGION \ --format="value(status.url)"`/processO URL que obtém neste passo é invocado quando novas recomendações ficam disponíveis através do tópico do Pub/Sub que cria no passo seguinte.
Crie um tópico Pub/Sub para recomendações ativas
Nesta secção, cria um tópico do Pub/Sub para as recomendações do Active Assist que o serviço recommender-collector obtém invocando a API Recommender.
No Cloud Shell, crie um tópico do Pub/Sub:
gcloud pubsub topics create activeassist-recommendationsCrie uma conta de serviço para o Pub/Sub usar para invocar o serviço do Cloud Run:
recommendation-rules-enginegcloud iam service-accounts create recommendation-engine-sub-sa \ --description "Service Account used by Pub/Sub to push recommendations to the recommendation-rules-engine service" \ --display-name "recommendation-engine-sub-sa" \ --project $RECO_MGR_PROJECTA conta de serviço do Pub/Sub tem de estar associada às funções de que precisa para publicar mensagens e invocar o serviço
recommendation-rules-engine:gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:recommendation-engine-sub-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/run.invoker \ --project $RECO_MGR_PROJECT
Crie uma subscrição para o tópico Pub/Sub
Crie uma subscrição para o serviço
recommendation-rules-engine:# grant Pub/Sub the permission to create tokens PUBSUB_SERVICE_ACCOUNT="service-$RECO_MGR_PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com" gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member="serviceAccount:$PUBSUB_SERVICE_ACCOUNT"\ --role='roles/iam.serviceAccountTokenCreator' # configure the subscription push identity gcloud pubsub subscriptions create active-assist-recommendations-for-rules-engine \ --topic=activeassist-recommendations \ --topic-project=$RECO_MGR_PROJECT \ --push-auth-service-account=recommendation-engine-sub-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --ack-deadline=60 \ --push-endpoint=$RECOMMENDER_SERVICE_RULES_URIPermita que a conta de serviço do
recommendation-engine-sub-saque criou invoque o serviçorecommendation-rules-engine:gcloud run services add-iam-policy-binding recommendation-rules-engine \ --member=serviceAccount:recommendation-engine-sub-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role=roles/run.invoker \ --region=$REGION \ --platform=managed
Executar testes ponto a ponto com stubs
As recomendações do Active Assist são geradas pela plataforma com base nos padrões de utilização e nas métricas do sistema. Cada categoria de recomendações pode usar um período de tempo predefinido diferente no passado para analisar os dados de utilização e as métricas com base nas recomendações geradas. Por exemplo, as recomendações da IAM são geradas pela plataforma com base nos padrões de utilização dos últimos 90 dias.
Para testar o pipeline ponto a ponto, o repositório que clonou para este tutorial fornece recomendações de exemplo (simulações) que usa para executar o pipeline ponto a ponto.
Nesta secção, faz o seguinte:
- Inspeccione as recomendações de substituição.
- Invocar o pipeline manualmente.
- Verifique se é gerada uma notificação e enviada para o canal do Slack que criou.
Reveja as recomendações de exemplo fornecidas no repositório:
cat ../recommendation-collector/stub.jsonEste ficheiro fornece uma recomendação de exemplo com uma ação
REMOVEpara uma função de exemplo denominadaroles/gkehub.connect.Execute o seguinte comando para que o Cloud Scheduler execute a tarefa imediatamente, em vez de esperar pela próxima execução agendada:
gcloud scheduler jobs run recommender-iam-schedulerNa página da consola do Cloud Scheduler, na coluna Resultado para a tarefa, verifique se o resultado é Êxito.
recommender-iam-schedulerPara ver uma vista detalhada dos passos que cada um dos serviços executa, também pode ver os registos do serviço do Cloud Run para o serviço
recommendation-collectore o serviçorecommendation-rules-engine.Quando o pipeline ponto a ponto sem servidor que cria neste tutorial é executado com êxito, gera uma notificação do Slack que contém detalhes da associação de funções recomendada para remover. Segue-se um exemplo da notificação que recebe:
Project xxxxxxxx\ **Impact**: SECURITY\ This role has not been used during the observation window.\ **Role**: roles/gkehub.connect\ **Member**: serviceAccount:sample-sa@recommendation-sample.iam.gserviceaccount.com\ **Action**: remove
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
O que se segue?
- Saiba como usar recomendações para infraestrutura como código.
- Saiba mais sobre as tecnologias Google Cloud sem servidor.
- Leia acerca de como integrar recomendações de informações sobre políticas num pipeline de IaC.