This repository has been archived by the owner on Aug 29, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathinit.sh
114 lines (91 loc) · 4.03 KB
/
init.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
export PROJECT_ID="your-project-id" # EDIT THIS!
export REGION="europe-north1"
export APPENGINE_REGION="europe-west"
export SCHEDULER_ID="tasks-scheduler"
export QUEUE_ID="tasks-queue"
export TOPIC_ID="tasks-topic"
# Service accounts
export SCHEDULER_USERNAME="sa-scheduler"
export SCHEDULER_DISPLAYNAME="SA for scheduler"
export GETDATA_USERNAME="sa-get-data"
export GETDATA_DISPLAYNAME="SA for getData function"
export CREATEHTTPTASK_USERNAME="sa-create-http-task"
export CREATEHTTPTASK_DISPLAYNAME="SA for createHttpTask function"
export TASKHANDLER_USERNAME="sa-task-handler"
export TASKHANDLER_DISPLAYNAME="SA for task-handler Cloud Run service"
# Get billing ID
gcloud alpha billing accounts list
export BILLING_ID="your-billing-id" # From above
# Update gcloud
gcloud components update
# Set up new project
gcloud projects create $PROJECT_ID
gcloud config set project $PROJECT_ID
gcloud projects describe $PROJECT_ID
export PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)')
# Enable billing
gcloud services enable cloudbilling.googleapis.com
gcloud alpha billing projects link $PROJECT_ID --billing-account $BILLING_ID
# Enable APIs
gcloud services enable cloudresourcemanager.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable cloudfunctions.googleapis.com
gcloud services enable cloudtasks.googleapis.com
gcloud services enable cloudscheduler.googleapis.com
gcloud services enable run.googleapis.com
gcloud services enable appengine.googleapis.com
gcloud services enable pubsub.googleapis.com
gcloud services enable appengine.googleapis.com
# Create service accounts
gcloud iam service-accounts create $SCHEDULER_USERNAME \
--display-name $SCHEDULER_DISPLAYNAME
gcloud iam service-accounts create $CREATEHTTPTASK_USERNAME \
--display-name $CREATEHTTPTASK_DISPLAYNAME
gcloud iam service-accounts create $GETDATA_USERNAME \
--display-name $GETDATA_DISPLAYNAME
gcloud iam service-accounts create $TASKHANDLER_USERNAME \
--display-name $TASKHANDLER_DISPLAYNAME
# Set service account roles
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SCHEDULER_USERNAME@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/cloudscheduler.admin
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SCHEDULER_USERNAME@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/cloudfunctions.invoker
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$GETDATA_USERNAME@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/pubsub.publisher
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$CREATEHTTPTASK_USERNAME@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/cloudtasks.enqueuer
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$CREATEHTTPTASK_USERNAME@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$CREATEHTTPTASK_USERNAME@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/run.invoker
# Activate App Engine (hosts Scheduler and Tasks)
gcloud app create --region $APPENGINE_REGION
# Create Pub/Sub topic
gcloud pubsub topics create $TOPIC_ID
# Create task queue
gcloud tasks queues create $QUEUE_ID
# Deploy Cloud Functions and Cloud Run
cd task-handler
sh deploy.sh
cd ..
echo "Now you should add the Cloud Run endpoint to create-http-task/deploy.sh!"
cd create-http-task
sh deploy.sh
cd ..
cd get-data
sh deploy.sh
cd ..
# Create scheduler
# Do not forget to set the "uri" value! # your-get-data-function-endpoint
gcloud beta scheduler jobs create http $SCHEDULER_ID \
--schedule "every 1 mins" \
--uri "https://europe-west1-$PROJECT_ID.cloudfunctions.net/tasks-getData" \
--http-method GET \
--oidc-service-account-email $SCHEDULER_USERNAME@$PROJECT_ID.iam.gserviceaccount.com
echo "Congratulations! The entire flow should now be up and running once every minute. Check the logs at https://console.cloud.google.com/logs/ and see what you find."