Последовательное развертывание облачной функции с PubSub и Google Scheduler - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь автоматизировать развертывание трех модулей: Облачная функция, которая вызывается через подписку PubSub из Cloud Scheduler. В настоящее время у меня есть следующий сценарий, в котором используется команда gcloud:

    gcloud beta pubsub topics create $SCHEDULE_NAME || echo "Topic $SCHEDULE_NAME already created."
    gcloud beta functions deploy $SCHEDULE_NAME
      --region $CLOUD_REGION
      --memory 128MB
      --runtime nodejs10
      --entry-point $ENTRY_POINT
      --trigger-topic $SCHEDULE_NAME
      --vpc-connector cloud-function-connector
    # gcloud scheduler jobs delete $JOB_NAME # does not work as it needs YES non-interactively
    gcloud scheduler jobs create pubsub $SCHEDULE_NAME --message-body='RUN' --topic=$SCHEDULE_NAME --schedule='27 2 * * *' --time-zone='Europe/London' || true

Это работает, однако я не уверен, является ли это наиболее правильным способом сделать это. Например, невозможно просто обновить задание, если оно уже существует. Я рассматривал terraform, но не уверен, что он полезен только для развертывания этих трех небольших модулей. Я обнаружил также инструмент serverless, однако, похоже, он может развертывать только облачную функцию, но не планировщики и темы pubsub.

1 Ответ

1 голос
/ 20 июня 2020

Думаю, ваш подход прост и хорош.

Предоставляет ли Terraform возможность обновления заданий? Если это так, вы, вероятно, обнаружите, что он просто удаляет, а затем (повторно) создает задание. Я думаю, что этот подход (удаление, затем воссоздание) к обновлению заданий тоже хорош и, кажется, обеспечивает больший контроль; вы можете проверить, запускается ли расписание до | после его обновления.

Google предоставляет Диспетчер развертывания в качестве инструмента развертывания c, специфичного для Google Cloud. По моему опыту, основным преимуществом является то, что он работает на стороне сервера, но, в конечном счете, вы просто автоматизируете те же API, которые используете с gcloud.

Если вы хотите изучить инструмент для управления вашу инфраструктуру в качестве кода, я бы рекомендовал Terraform вместо Deployment Manager.

Обновление

API планировщика поддерживает задания «исправления»:

https://cloud.google.com/scheduler/docs/reference/rest/v1beta1/projects.locations.jobs/patch

И этот механизм поддерживается gcloud:

gcloud alpha scheduler jobs update
...