Check your organization policies first
Three constraints commonly block this setup. Finding out now is cheaper than finding out at the first launch.compute.requireOsLogin is harmless — Airship never logs in, installs no SSH
key, and opens no inbound access at all.
Create the service account
Grant roles
- Quick start
- Least privilege
roles/compute.admin covers everything Airship does, routers included. In
a dedicated CI project this is a reasonable end state.Create the key
service_account key,
verifies it against Compute Engine, seals it and opens it only for the length
of a single call. Delete your local copy once it is connected.
Quotas to check
Connect it
Open Cloud → Google Cloud, paste the contents ofairship-sa.json, and
choose the default location — a region (us-central1) or a zone
(us-central1-b). Airship reads the project through Compute Engine to prove
the key works and that the API is enabled, then echoes back the project ID
and the service account’s email.
Or from the developer API, with the key file’s
fields as the credentials object:
Google Cloud settings
machine_image takes an image or family name (ubuntu-2204-lts, looked up in
your project and then in Google’s public project), project:image, a full
resource path, or a machine image. region takes a zone or a region — a
region lets Airship try zones in order and move on when one is short.
airship.yaml
Pin a zone when a resource is zonal: GPUs, or an
existingDisk. A zonal
disk pins the launch to its zone, so a region: that disagrees is a config
error rather than a failed insert.Verify and audit
TERMINATED — disks and all. A
machine left TERMINATED is removed by the next inventory pass, because it
runs no job and still bills for its disk.
Airship adds no firewall rules. Instances carry the network tag
airship-runner, so a rule you write against that tag applies to every future
runner automatically.