
Show HN: Relay – Event-driven DevOps automation - product1087
https://relay.sh
======
product1087
Hi everyone! PM for Relay here.

Relay is an event-driven DevOps platform. It listens to events from 3rd party
services like AWS, Datadog, PagerDuty, Jira and more to trigger simpler,
smarter workflows that automate tedious tasks. A lot of existing solutions
either require a lot of upfront DIY work (AWS Lambda or running your own
script) or they weren’t built for DevOps teams (Zapier, IFTTT).

Relay provides out-of-the-box workflows for common use cases like cloud cost
optimization, security, incident response and more. If those don't work for
you, you can write your own workflow using integrations with dozens of cloud
provider services, open source tools and APIs that can be composed together in
a YAML-based workflow (yes, I know, more YAML).

Some features we think are interesting:

\- Visual execution graph shows exactly what's happening in your workflow run.

\- Connections make it simple to authenticate to other services.

\- Audit log shows who initiated every workflow run, whether manual or by an
external service.

\- Human in the loop approvals give you full confidence in your automation.

\- Growing community of 30+ open source integrations with AWS, Azure, GCP,
Datadog, PagerDuty, VictorOps, Jira, Terraform, Helm, and more.

We also just recently put out a blog post about some pretty novel uses of
Knative and Ambassador to create user-generated triggers:
[https://blog.getambassador.io/user-defined-webhooks-in-
puppe...](https://blog.getambassador.io/user-defined-webhooks-in-puppet-relay-
with-knative-and-ambassador-api-gateway-542ef2e1e137)

~~~
smt88
Looks great! "Zapier for DevOps" would convey it a lot faster. It didn't click
for me until I got to that part. I'm excited to try it out!

A couple things:

1) Please, _please_ support some other config file other than just YAML. Even
JSON would be an improvement, since you wouldn't have to change your config
reader library. YAML has been a miserable nightmare to use in other tools like
Open API Spec. I'm not alone in my YAML hate, either[1][2][3][4].

Implicit typing and semantic whitespace in a data file is insane. At least in
Python, you're not unlikely to get an error if your whitespace is off. In a
config file, you might just end up with dangerous/confusing behavior.

2) I'm surprised you used Relay, which is already used by Facebook. I don't
think Facebook is going to care that much, but it's going to be really hard to
Google this library.

1\. [https://dev.to/jessekphillips/stop-using-
yaml-3kec](https://dev.to/jessekphillips/stop-using-yaml-3kec)

2\. [https://hitchdev.com/strictyaml/why/implicit-typing-
removed/](https://hitchdev.com/strictyaml/why/implicit-typing-removed/)

3\.
[https://devopsdays.org/events/2019-stockholm/program/philipp...](https://devopsdays.org/events/2019-stockholm/program/philipp-
krenn)

4\. [https://www.arp242.net/yaml-config.html](https://www.arp242.net/yaml-
config.html)

~~~
impl
> _1) Please, please support some other config file other than just YAML._

Although we don't directly advertise it, you can in fact write a workflow in
JSON and there's an underlying JSON interchange format that is authoritative
in our system. We expect that any other languages we support would "compile"
to this JSON format. What other languages are interesting to you? We've looked
at CUE[0], HCL, and of course Puppet itself.

[0]: [https://cuelang.org/](https://cuelang.org/)

~~~
bilmeswe
Also, Relay is built by Puppet, so not a separate company :)

------
tbrb
Sounds interesting. Have you any comparisons between this and StackStorm? At
first glance, this looks like it competes in a similar market.

Additionally, is this only going to be a SaaS offering, or will we have the
option to self-host this as well?

~~~
bradhe
Hey there, as mentioned elsewhere I'm an engineer on Relay. Our PM is busy
right now so thought I'd jump in.

> Have you any comparisons between this and StackStorm?

Relay is very similar to StackStorm! One of the biggest differences between
Relay and StackStorm, however, is that every step and trigger in Relay is just
a docker container. You can basically run any container you want, but
containers that are authored specifically for Relay are, obviously, better
(integration with the execution environment, our secrets management service,
etc.).

> is this only going to be a SaaS offering

This is another key difference between Relay and StackStorm: We only offer a
SaaS right now. That's not to say that we won't eventually offer a self-hosted
version (or some sort of hybrid solution for that matter)--it's just the
approach we're going with for now.

~~~
tbrb
> every step and trigger in Relay is just a docker container

Ooh, that makes sense. This is also reminding me a bit of Concourse CI
([https://concourse-ci.org](https://concourse-ci.org)) as that's all docker-
based too, though last I checked it wasn't as kubernetes-native (which I
appreciate)

~~~
jacques_chester
There's a lineage -- Concourse was an inspiration for Tekton, and Relay uses
Tekton as part of its substructure[0].

[0] [https://relay.sh/docs/how-it-works/#workflow-
execution](https://relay.sh/docs/how-it-works/#workflow-execution)

------
stuff4ben
So I didn't see anything on your site on my cursory glance at it, but I'd like
to know if you have any use cases replacing Jenkins Pipelines and Helm
deployments into an OpenShift/Kubernetes environment? I'm writing a lot of
Jenkins pipelines now and groovy is killing me!

~~~
impl
We do have a Helm integration that might be able to help you out:
[https://relay.sh/integrations/helm/](https://relay.sh/integrations/helm/)

The limiting factor right now would be whether your cluster is accessible to
the internet, which of course isn't super common. We are working through what
our story for connecting to on-prem infrastructure looks like, so if you can
provide any additional details on your environment, it would be helpful!

------
lomkju
I think we can do the same things using github actions now. P.S we have self-
hosted runners in our enviroment where each step is a docker container too.

We have complex flows where we use Slack, Spinnaker(Webhooks), Terraform,
PagerDuty ... and much more.

Is there something better that we can achieve with this?

~~~
impl
Hi,

This is a good question, thank you! The flow of events into our system is
somewhat different than GitHub Actions. We're trying to be a consumer of all
sorts of events, including, say, data published to AWS SNS or via a Docker Hub
webhook[0]. All of that isn't quite in place yet, but we want to act more like
an event broker than a CI/CD solution alone.

One concept we're throwing around is supporting CloudEvents[1] and dispatching
workflows based on event types. If anyone has experience with CloudEvents we'd
love to hear if that would be something useful to you.

[0]: [https://github.com/relay-integrations/relay-
dockerhub/blob/m...](https://github.com/relay-integrations/relay-
dockerhub/blob/master/triggers/dockerhub-trigger-image-pushed/handler.py)

[1]: [https://cloudevents.io/](https://cloudevents.io/)

~~~
jacques_chester
I'm writing a book on Knative and have some material in there about
CloudEvents. It's on the MEAP program and the relevant chapter was put up
yesterday, as it happens: [https://livebook.manning.com/book/knative-in-
action/chapter-...](https://livebook.manning.com/book/knative-in-
action/chapter-6)

~~~
impl
Thank you! I'll take a look through this! Would it be okay if I sent you an
email in the next week or two for follow-up questions?

~~~
jacques_chester
Please do.

------
crazypython
Sadly, it doesn't seem to support SSH, so I can't use it to replace Fabric
scripts.

~~~
impl
Hi,

I wrote an SSH step for you. Here's the source code:

[https://github.com/relay-integrations/relay-
ssh/blob/master/...](https://github.com/relay-integrations/relay-
ssh/blob/master/steps/exec/step.sh)

And since it isn't documented yet, here's how you would use it in a workflow:

    
    
      steps:
      - name: ssh
        image: relaysh/ssh-step-exec
        spec:
          connection: !Connection {type: ssh, name: my-ssh-connection}
          username: relay
          port: 2222 # defaults to 22
          knownHosts: |
            server1.example.com ssh-rsa AAAAEXAMPLE
            server2.example.com ssh-rsa AAAANOTHEREXAMPLE
          # or
          #strictHostKeyChecking: false
          on:
          - server1.example.com
          - server2.example.com
          input:
          - whoami
          - uptime
          - cat /etc/passwd
    

Please feel free to shoot me an email (check my profile) and I'd be happy to
help write a workflow for your use case with you!

------
drinker
This looks like it uses tekton pipelines and triggers under the hood.

~~~
product1087
Yep! Relay uses Tekton under the hood to execute the workflows. It actually
knative and ambassador to execute the triggers. You can read more about the
trigger system here: [https://blog.getambassador.io/user-defined-webhooks-in-
puppe...](https://blog.getambassador.io/user-defined-webhooks-in-puppet-relay-
with-knative-and-ambassador-api-gateway-542ef2e1e137)

------
kevinsf90
What's the pricing model? I don't see it on the website

~~~
captainavocado
We're thinking about a few different models, but haven't settled on one yet.
What kind of model would you be interested in? Metered or other usage-based,
per-seat or per-user, or something totally different?

