テンプレートがニーズを満たさない場合は、カスタム ワークフローを最初から構築します。独自のビルダーを作成して、アクション カタログからアクションをドラッグ アンド ドロップし、プロセスに一致する自動化にドロップします。
このガイドの使い方
このガイドでは、概念と完全な例を使用してワークフローを構築する方法を説明します。学習パスを選択してください:
- まずコアコンセプトを学ぶ:コアコンセプトとワークフローパターンを読んで基礎を理解し、それを応用します。
- 例に従ってください:例のウォークスルーにジャンプして、EC2 の自動サイズ変更ワークフローを段階的に構築します。
- 参照パターン:ワークフロー パターンセクションを、独自のワークフローを構築する際のクイック リファレンスとして使用します。
カスタムワークフローを構築する理由は何ですか?
独自のワークフローを構築して、次のことを実現します。
- テンプレートがサポートしていない独自のビジネスロジックを実装する
- 標準テンプレートを超えて複数のシステムを統合
- 条件分岐で複雑な決定を処理する
- チームの承認と通知のプロセスに合わせる
コアコンセプト
構築する前に、次の基本事項を理解してください。
コンセプト | 目的 |
|---|---|
認証情報と設定に関する問題 | |
事前構築された統合 ( AWS 、Slack、データベース、API) | |
ステップ間で出力を渡す | |
後続のステップで使用するために変数を初期化して値を割り当てる | |
条件に応じて異なるパスを作成する | |
リストを処理するか完了をポーリングする | |
範囲 | 繰り返し回数を定義するためにループ関数に必要な問題 |
指定された期間または条件が満たされるまでワークフローの実行を一時停止します | |
停止 | ワークフロー実行を終了する |
ヒント
実践で学ぶ:各概念は、サンプルのウォークスルーで説明されています。実際のワークフローで、入力、スイッチ、ループ、承認ゲートが連携して動作する様子を確認できます。
構文例
ワークフローを構築するときは、次のパターンを使用します。
パターン | 構文 | 用途 |
|---|---|---|
秘密を取得する |
| シークレット マネージャーからのアクセス資格情報 |
参照ワークフロー入力 |
| ワークフロー開始時に提供される設定を使用する |
前のステップの出力を使用する |
| ワークフローステップ間でデータを渡す |
カタログからのドラッグアクション |
| 事前構築されたインテグレーションをワークフローに追加 |
変数を作成する |
| 計算値または中間値を保存する |
状態を確認する |
|
|
アイテムをループする |
| リストを処理するか完了をポーリングする |
反復回数を定義する |
| ループ関数に必要な問題 |
実行を一時停止 |
| 指定された期間ワークフローを一時停止します |
ワークフローの終了 | ワークフロー実行を終了する | 検証失敗またはキャンセル後にワークフローを終了します |
エラー処理パターンの詳細については、 「ベストプラクティス」を参照してください。
重要
セキュリティとプライバシーのベストプラクティス、およびデータ削除を含む制限事項については、セキュリティ ベストプラクティスを参照してください。
クイックスタート
最初のワークフローを 5 つのステップで構築します。
- one.newrelic.com > All Capabilities > Workflow Automationに移動し、Create Your Own [独自の作成を]選択します
- 資格情報 (シークレットマネージャーから:
${{ :secrets:keyName }})、設定 (リージョン、インスタンスタイプ)、およびランタイムデータ (アカウント ID、集計 ID) の定義 - カタログからアクションをドラッグし、
${{ .steps.stepName.outputs.field }}構文で接続してデータを渡します - 条件分岐用のスイッチ、リストやポーリングの処理用のループ、人間の決定のための承認ゲートを挿入します。
- 各セクションの後に実行してエラーを早期に発見し、ワークフローを開始またはスケジュールします。
主要なワークフローパターン
4 つの基本パターンで、ほとんどの自動化シナリオに対応します。各パターンについては、以下の例のウォークスルーで説明します。
スイッチを使った条件分岐
次の場合にスイッチを使用します:結果はデータに基づいて変化します (閾値チェック、 API応答、ユーザーの決定)
キー構文:
- name: hasCompleted type: switch switch: - condition: "${{ .steps.waitForCompletion.outputs.automationExecutionStatus == 'Failed' }}" next: displayError - condition: "${{ .steps.waitForCompletion.outputs.automationExecutionStatus == 'Success' }}" next: displaySuccess next: displayUnexpected # Default path when no condition matchesリストを処理するためのループ
ループを使用するのは、複数のアイテムを処理する場合やアクションを繰り返す場合です。
ループ構造、パラメーター、高度な使用法 (break/continue を含む) の詳細については、 「ループ構造」を参照してください。
キー構文:
# Send progress updates using range loop - name: progressLoop type: loop for: in: "${{ [range(1; 5)] }}" # Loop 5 times steps: - name: wait type: wait seconds: 10 - name: progressMessage type: action action: slack.chat.postMessage version: 1 inputs: channel: "${{ .workflowInputs.channel }}" text: "Resizing in progress..."承認ゲートと待機
承認ゲートを使用するのは、破壊的な操作やコンプライアンスの承認が必要になる前に人間の判断が必要な場合です。
キー構文:
- name: requestApproval type: action action: slack.chat.postMessage version: 1 inputs: channel: "#approvals" text: "Approve? React with :thumbsup: or :thumbsdown:"
- name: getReactions type: action action: slack.chat.getReactions version: 1 inputs: token: "${{ .workflowInputs.slackToken }}" channelID: "${{ .steps.requestApproval.outputs.channelID }}" threadTs: "${{ .steps.requestApproval.outputs.threadTs }}" timeout: 300 # Wait 5 minutes for reaction
- name: checkApproval type: switch switch: - condition: '${{ .steps.getReactions.outputs.reactions | any(.name == "+1") }}' next: handleApproval - condition: '${{ .steps.getReactions.outputs.reactions | any(.name == "-1") }}' next: handleRejection単純な遅延の場合:
- name: waitBeforeRetry type: wait seconds: 60 # Wait 60 seconds before continuingステップ間でのデータの受け渡し
データ受け渡しは次の場合に使用します: 1 つのステップの出力が別のステップの入力になる場合 (すべてのワークフローの基礎)
キー構文:
# Reference previous step outputs awsRegion: "${{ .inputs.region }}" instanceId: "${{ .steps.getAlert.outputs.data.entity.instanceId }}"例:すべてのワークフローステップ
assignによる変数の代入
割り当てステップ タイプを使用すると、後続のワークフロー ステップで使用できる変数を初期化して値を割り当てることができます。このステップでは、文字列、整数、ブール値、マップ (オブジェクト)、リスト (配列) など、複数のデータ型がサポートされます。
基本構造:
- name: <step_name> type: assign inputs: <variable_name>: <value_or_expression>例:
- name: variableInitialization type: assign inputs: stringVar: "${{ .workflowInputs.initialValue }}" intVar: "${{ .workflowInputs.anotherValue }}" concatenationVar: "${{ .workflowInputs.initialValue }} - concatenated" booleanVar: true mapVar: key1: "value1" key2: "${{ .workflowInputs.initialValue }}" listVar: - "listItem1" - "${{ .workflowInputs.initialValue }}" - "${{ .workflowInputs.anotherValue }}" statusCode: ${{ .steps.runAction.outputs.statusCode }}ヒント
完全なパターン例が必要ですか?エラー処理、再試行、複雑な統合などの追加のパターンについては、ワークフローの例を参照してください。
ウォークスルーの例: 承認による EC2 の自動サイズ変更
この例では、Slack 経由でチームの承認を得た後、CPU が急増したときに EC2 インスタンスのサイズを変更するワークフローを構築します。 データ収集、条件付きロジック、外部統合、およびエラー処理を示します。
ヒント
ワークフローは初めてですか?この例では、AWS、Slack、承認ロジックを使用します。始めたばかりの場合は、まずSlack にレポートを送信してみてください。
ワークフローの概要
大まかなフロー:
- データを収集する: New Relicから集計とインスタンスの詳細を取得します
- 承認リクエスト: Slack メッセージを送信し、チームの応答を待ちます
- サイズ変更の実行: AWS Systems Manager を使用して EC2 インスタンスのサイズを変更します
- 検証とクリーンアップ: 結果を確認し、チームに通知し、一時的なリソースを削除します
前提条件
このワークフローを構築する前に、次のものを用意してください。
- AWS : EC2 および Systems Manager の権限を持つ認証情報
- Slack : 通知用のボットトークンとチャンネル
- New Relic : アラート条件監視 EC2 CPU
- シークレット マネージャー: 構成済み。 シークレット マネージャーを参照してください。
ワークフローを段階的に構築する
ワークフローの各部分を構築します。各ステップには特定のアクションが含まれており、ワークフロー パターンを示します。
まとまったコンテキストを収集する
アクションを実行する前に、API とデータベースをクエリして完全なコンテキストを収集します。
3 つのアクションにより、集計および EC2 インスタンス情報が収集されます。
チームの対応を処理する
データ値またはユーザー入力に基づいてさまざまなパスを作成します。
反応に基づいて分岐します。
unexpectedReaction: 有効な反応を説明し、再度待機するためにループします。gotCancelReaction: キャンセルを確認し、完了までスキップします。インフラストラクチャの変更はありません。gotYesReaction: 承認を確認し、サイズ変更に進みます。ヒント
承認ゲート パターン:リスクのある変更の前に人間の判断が必要な場合は、このようなスイッチを使用します。このパターンは、Slack の反応、PagerDuty の確認、電子メールの応答、またはカスタム Webhook で機能します。
サイズ変更を実行する
一意のトークンを使用して重複した操作を防止します。ループを使用して長時間実行される操作を確認します。
AWS Systems Manager (SSM) を使用してインスタンスのサイズを変更します。
createSsmDocument: インスタンスを停止し、タイプを変更して再起動する SSM 自動化ドキュメントを作成します。generateIdempotencyToken: 重複したサイズ変更を防ぐために一意の UUID を作成します。startResizing: インスタンス ID と新しいタイプで SSM ドキュメントを実行します。progressLoop(ループ) : Slack の更新を 10 秒ごとに (5 回) 投稿します。waitForCompletion: 2 分間のタイムアウトで SSM ステータスをポーリングします。重要
SSM を使用する理由Systems Manager は、エラー処理、状態検証、CloudTrail 監査ログを提供します。直接 EC2 APIコールよりも優れています。
検証とクリーンアップ
結果に関係なく、一時的なリソースをクリーンアップします。
結果を確認し、一時リソースを削除します。
hasCompleted(スイッチ) : SSM ステータス (成功/失敗/タイムアウト) に応じて分岐します。displaySuccess: New Relicに成功をログします。sendSuccessMessage: Slack で完了を確認します。displayError: トラブルシューティングのエラー詳細をログに記録します。displayUnexpected: 異常な状態 (手動キャンセルなど) をログに記録します。cleanupSsmDocument: 一時 SSM ドキュメントを削除します。sendSSMCleanMessage: Slack でクリーンアップを確認します。workflowCompleted: 最終完了メッセージ (成功またはキャンセルの場合に実行されます)。
完全な論点リファレンス
このワークフローには、入力として資格情報、設定、およびランタイム コンテキストが必要です。 機密値は、 ${{ :secrets:keyName }}構文を使用して シークレット マネージャーから取得されます。
入力カテゴリ:
- 認証: AWS および Slack の認証情報
- まとめコンテキスト: New Relicからのアカウント ID と問題 ID
- 設定: リージョン、インスタンスタイプ、タイムゾーン、Slackチャンネル
問題の名前 | タイプ | デフォルト値 | 説明 |
|---|---|---|---|
| 弦 |
| AWSサービスで認証するためのAWSアクセスキーID。 |
| 弦 |
| AWS シークレットアクセスキー。アクセスキーIDとペアになります。 |
| 弦 |
| 一時的な AWS 認証情報のセッショントークン (オプション、IAM ロールで使用)。 |
| 弦 |
| Slack でメッセージを投稿したり反応を読んだりするためのボット トークン。 |
| Int | 必須 | New Relic アカウント ID。集計詳細およびエンティティ データのクエリに使用されます。 |
| 弦 | 必須 | このワークフローをトリガーしたNew Relic集計の課題 ID。 ワークフローが累計から実行されるときに自動的に提供されます。 |
| 弦 |
| EC2 インスタンスが実行されるAWSリージョン (例: |
| 弦 |
| 目標 EC2 サイズ変更用インスタンスタイプ。 パフォーマンスのニーズと予算に基づいて選択してください。 |
| 弦 |
| 積算タイムスタンプの時間単位。 通常は |
| 弦 |
| Slack メッセージで一括アクティベーション時間を表示するためのタイムゾーン (例: |
| 弦 |
| タイムスタンプを表示するための日付/時刻形式パターン。Java SimpleDateFormat パターンを使用します。 |
| 弦 | 必須 | 通知が投稿される Slack チャンネル ID (名前ではありません)。Slack のチャンネル詳細でこれを見つけてください。 |
次のステップ
この例を完了したら、次のリソースを調べてください。

