Resources are the primary type in Gyro. Gyro is built around defining resources. A resource is the definition of your cloud resource. Gyro will create, update, or delete your cloud resources to keep them consistent with the definition of resources in a Gyro file.

A resource is a group of key/value pairs and subresources. Resources can have one or more key/value pairs and zero or more subresources.

Here is an example of a AWS instance resource defined using the Gyro language:

aws::instance web-server
    ami: $(external-query aws::ami { name: "amzn-ami-hvm-2018.03.0.20181129-x86_64-gp2" })
    instance-type: "t2.micro"
    key: $(aws::key-pair key-pair-example)
    subnet: $(aws::subnet subnet)
    security-groups: [
        $(aws::security-group webserver)

    tags: {
        Name: "web-server"

The syntax of this resource is:

    <KEY>: <VALUE>

        <KEY>: <VALUE>
  • RESOURCE TYPE is the name of the resource as provided by a provider plugin (e.g. aws::instance).
  • RESOURCE NAME is a name you give this instance of the resource. This name is used by Gyro to track state of the resource. It’s also used when referencing a resource in your own Gyro code.
  • KEY/VALUES map the settings for a particular resource. For more information on what valid keys and values are see the “Key/Values” section below.
  • SUBRESOURCE are resources tied directly to their parent resource.


Resources can be referenced by the resource name. Using the example above we can reference the aws::instance using the following syntax:

$(aws::instance web-server)

Use dot notation to references key/value pairs within a resource:

$(aws::instance web-server).instance-type

Use index notation to reference a list value:

$(aws::instance web-server)

Use wildcard notation to reference multiple instances:

$(aws::instance web*).public-ip-address