Recursos identificados
- APIs:
run.googleapis.com(y uso depubsub.googleapis.comen operaciones de Pub/Sub). - Cloud Run services:
store-service(público),order-service(privado). - Pub/Sub: topic
ORDER_PLACED, subscription pushorder-service-sub. - IAM service account:
pubsub-cloud-run-invoker. - IAM bindings:
roles/run.invokersobreorder-servicepara la service account invocadora.roles/iam.serviceAccountTokenCreatorpara la Pub/Sub service agent del proyecto.
- Integración push autenticada Pub/Sub -> Cloud Run con
--push-auth-service-account.
Comandos ejecutados
Verificar la cuenta activa en Cloud Shell
Se usa para confirmar con que identidad estas autenticado.
gcloud auth list
Verificar el proyecto activo
Se usa para validar el PROJECT_ID que usara gcloud.
gcloud config list project
Habilitar la API de Cloud Run
Se usa para poder desplegar servicios en Cloud Run.
gcloud services enable run.googleapis.com
Definir region en variable de entorno
Se usa para reutilizar la misma region en todo el lab.
LOCATION={{{project_0.default_region|REGION}}}
Configurar region por defecto de gcloud
Se usa para evitar pasar la region manualmente en cada comando.
gcloud config set compute/region $LOCATION
Desplegar servicio publico store-service
Se usa para publicar el productor accesible sin autenticacion.
gcloud run deploy store-service \
--image gcr.io/qwiklabs-resources/gsp724-store-service \
--region $LOCATION \
--allow-unauthenticated
Desplegar servicio privado order-service
Se usa para publicar el consumidor solo para cuentas autenticadas.
gcloud run deploy order-service \
--image gcr.io/qwiklabs-resources/gsp724-order-service \
--region $LOCATION \
--no-allow-unauthenticated
Crear topic de Pub/Sub
Se usa para recibir eventos de ordenes creadas.
gcloud pubsub topics create ORDER_PLACED
Crear service account invocadora
Se usa para que Pub/Sub pueda invocar order-service.
gcloud iam service-accounts create pubsub-cloud-run-invoker \
--display-name "Order Initiator"
Listar service account creada
Se usa para confirmar que la cuenta existe.
gcloud iam service-accounts list --filter="Order Initiator"
Asignar rol Cloud Run Invoker al service account
Se usa para permitir invocar order-service.
gcloud run services add-iam-policy-binding order-service \
--region $LOCATION \
--member=serviceAccount:pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \
--role=roles/run.invoker \
--platform managed
Obtener numero de proyecto
Se usa para guardarlo en la variable PROJECT_NUMBER.
PROJECT_NUMBER=$(gcloud projects list \
--filter="qwiklabs-gcp" \
--format='value(PROJECT_NUMBER)')
Permitir creacion de tokens para Pub/Sub
Se usa para que la service account administrada de Pub/Sub firme tokens.
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
--role=roles/iam.serviceAccountTokenCreator
Obtener URL de order-service
Se usa para guardarla en ORDER_SERVICE_URL.
ORDER_SERVICE_URL=$(gcloud run services describe order-service \
--region $LOCATION \
--format="value(status.address.url)")
Crear suscripcion push hacia order-service
Se usa para conectar el topic con el endpoint privado usando autenticacion.
gcloud pubsub subscriptions create order-service-sub \
--topic ORDER_PLACED \
--push-endpoint=$ORDER_SERVICE_URL \
--push-auth-service-account=pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com
Obtener URL de store-service
Se usa para guardarla en STORE_SERVICE_URL.
STORE_SERVICE_URL=$(gcloud run services describe store-service \
--region $LOCATION \
--format="value(status.address.url)")
Enviar payload de prueba al productor
Se usa para publicar una orden y validar el flujo completo.
curl -X POST -H "Content-Type: application/json" -d @test.json $STORE_SERVICE_URL