GCP
Connect your GCP project to WarpBuild to run Github Actions runners. Enable Github Actions workflows to run on your own infrastructure and save 90% on your build costs.
Quotas
The runner resources are created in the BYOC GCP project. To function correctly,
here are some guidelines on the additional
quotas required, per stack.
We assume that the number of concurrently running jobs is $CON
, say 1000.
Resource | Quota | Notes | URL |
---|---|---|---|
CPU | $CON * vCPU per Job | Adjust for machine type, preemptible, and on-demand instances | Adjust Quota |
Persistent Disks | $CON * DISK_TB | Adjust provisioned IOPS if needed. | Adjust Quota |
In-use regional external IPv4 addresses | 3 + $CON | 1 static IP is required for cloud NAT in a stack. One static IP is attached to each concurrently running job. | Adjust Quota |
Cloud Storage | 1 | The same bucket is used for artifact cache, container layer caches, and telemetry data. | Adjust Quota |
Cloud NAT | 3 | One per stack | Adjust Quota |
Networks | 1 | One Network (VPC) is needed | Adjust Quota |
Subnetworks | 2 | One public and private subnetwork is needed per stack. | Adjust Quota |
The quotas need to be applied to the region where the stack is created. Change the region in the GCP console while editing the quotas.
This is not an exhaustive list. Please reach out to [email protected] for any questions or reach out on chat.
Troubleshooting
Ensure that the bucket name is globally unique. Else, you may see an error like this:
(gcloud.deployment-manager.deployments.create) Error in Operation [operation-1732573114216-627c41d05312d-c4e57059-xxxx]: errors:
- code: RESOURCE_ERROR
location: /deployments/xxxx/resources/<BUCKET_NAME>
message: "{\"ResourceType\":\"storage.v1.bucket\",\"ResourceErrorCode\":\"403\"\
,\"ResourceErrorMessage\":{\"code\":403,\"errors\":[{\"domain\":\"global\",\"\
message\":\"[email protected] does not have storage.buckets.get\
\ access to the Google Cloud Storage bucket. Permission 'storage.buckets.get'\
\ denied on resource (or it may not exist).\",\"reason\":\"forbidden\"}],\"message\"\
:\"[email protected] does not have storage.buckets.get\
\ access to the Google Cloud Storage bucket. Permission 'storage.buckets.get'\
\ denied on resource (or it may not exist).\",\"statusMessage\":\"Forbidden\"\
,\"requestPath\":\"https://storage.googleapis.com/storage/v1/b/<BUCKET_NAME>\"\
,\"httpMethod\":\"GET\",\"suggestion\":\"Consider granting permissions to [email protected]\"\
}}"