Puppetは、イベント駆動型自動化プラットフォームであるRelayのベータリリースを発表した。Relayにより、コードによるプロセスの自動化ができる。事前に記述されたワークフローがいくつかあり、追加のワークフローを作成するためのサポートがある。Relayには、AWS、Kubernetes、Azure、PagerDuty、GitHubなどのワークフローで使用できる多数の統合機能がある。
Relayは、if-this-then-thatスタイルのタスクと、マルチステップの分岐並列処理の両方を自動化するように設計されている。これは、未使用のAzureディスクの削除や、Jiraで必要なチケットを作成してSlackで部屋を開くことによるPagerDutyアラートに対応するなどのタスクになる。
ワークフロー内には、トリガーとステップがある。トリガーは、ワークフローの実行を初期化するイベントハンドラーである。トリガーは手動で、スケジュールに従って、または外部ソースを介してアクティブ化できる。ステップは、Relayによって実行される自動化ワークフローの一部である。パラメータとシークレットは、ステップ実行の一部として渡される。
たとえば、Relayを使用してEC2インスタンスを確認し、特定のタグなしでインスタンスを終了できる。このワークフローでは、4日後を終了日にまたはライフタイムのタグが付けられていない、または期限切れまたは無効なライフタイムタグが付けられていない特定のアカウントのEC2インスタンスを終了する。この場合、適切なcronスタイルの構文を使用して次のトリガーブロックを設定することにより、ワークフローをスケジュールに従って実行できる:
triggers:
- name: schedule
source:
type: schedule
schedule: '0 * * * *'
binding:
parameters:
region: us-east-1
dryRun: true
lifetimeTag: lifetime
terminationDateTag: termination_date
ステップは、各ステップを独立して柔軟に実行できるコンテナである。任意のOCI準拠コンテナを使用できる。ビルド時にRelayツールを追加すると、メタデータサービスにアクセスできるようになる。別の方法として、タスクがシェルまたはPythonスクリプトで記述できる場合は、relaysh/core
イメージを使用できる。このイメージは、Relayチームが管理するAlpineベースのイメージであり、Relay SDKがプリロードされている。relaysh/core:latest
とrelaysh/core:latest-python
イメージが利用可能である。
たとえば、relaysh/coreイメージでPythonスクリプトを実行するステップを設定すると、次のようになる:
steps:
- name: filter-instances
image: relaysh/core:latest-python
spec:
terminationDateTag: !Parameter terminationDateTag
lifetimeTag: !Parameter lifetimeTag
instances: !Output {from: describe-instances, name: instances}
inputFile: https://raw.githubusercontent.com/puppetlabs/relay-workflows/master/ec2-reaper/filter-instances.py
spec
マップは、ステップ内で使用できるキーと値を定義する。Relayの!Parameter
タイプでは、グローバルパラメータの値を検索してコンテナに提供できる。!Secret
を使用して、暗号化された値にアクセスできる。ワークフロー内でロジックを実行できる!Merge
や!Concat
などのユーティリティ関数もある。
利用可能な事前作成されたワークフローがいくつかある。Puppetは、Relayを改善し、追加の統合で拡張するためのコミュニティへの貢献を求めている。Relayに関するさらなる議論に利用できるSlackチャネルもある。