Use PR automations for self-service
Use a PR Automation for an example Self-Service S3 bucket creation workflow
Overview
Cloud infrastructure changes rapidly, and often the manual nature of infrastructure-as-code workflows can become a drag on velocity, causing organizations to reach for more self-service approaches. This can involve stitching together Backstage, GitLab, ArgoCD, or any other set of tools. Plural provides a single cloud orchestrator to provide all those key functionalities in one control plane.
We'll show how this can work beyond a Kubernetes provisioning use case, to provisioning an S3 bucket, a common resource also needed by Kubernetes workloads. It'll operate by:
- Creating a PR Automation (PRA) to make the provisioning of buckets repeatable
- Using that PRA to create an
InfrastructureStackto provision the S3 bucket using a Plural Terraform stack.
Define the PR Automation
This PR Automation is going to leverage resources that have already been created in the plural up repo for you, in particular:
terraform/modules/blob/s3- a basic S3 bucket module we've predefined that can be used for provisioning the buckettemplates/blobstore/*- a couple of templates that will be used to set up the blobstore provisioning process via a PRA
Given those manifests, the PR Automation YAML could be something like this, which you'd place in bootstrap/pr-automation/blobstore.yaml:
apiVersion: deployments.plural.sh/v1alpha1
kind: PrAutomation
metadata:
name: blob-creator
spec:
name: blob-creator
documentation: |
Sets up a PR to provision a blobstore with a given type (eg s3) and region
creates:
templates:
- source: templates/blob/stack.yaml
destination: "services/blobstores/{{ context.type }}/{{ context.name }}.yaml"
external: false
- source: templates/blob/service.yaml
destination: "bootstrap/blobstores.yaml"
external: false
scmConnectionRef:
name: github
title: "Adding a {{ context.type }} bucket {{ context.name }}"
message: "Setup a stack to manage the {{ context.name }} {{ context.type }} bucket"
identifier: your-org/your-plural-up-repo # <---- replace with the slug for your plural up repo
configuration:
- name: name
type: STRING
documentation: the name of this blob store (if using s3, this would become an s3 bucket name)
validation:
regex: "[a-z][a-z-0-9]+"
- name: type
type: ENUM
documentation: the type of blob storage to provision
values:
- s3
- name: region
type: STRING
documentation: the region your blobstore will live in