テンプレートがニーズに合わない場合は、 「Create Your Own」を使用してカスタムワークフローを構築できます。ドラッグ アンド ドロップ インターフェイスを使用して、アクション カタログのアクションをプロセスに一致する自動化に連結します。
このガイドの使い方
このガイドでは、概念と完全な例を使用してワークフローを構築する方法を説明します。学習パスを選択してください:
まずコアコンセプトを学ぶ→コアコンセプトとワークフローパターンを読んで基礎を理解し、それを応用する
例に従ってください→例のウォークスルーにジャンプして、EC2 自動サイズ変更ワークフローを段階的に構築します
参考パターン→ 独自のワークフローを構築する際のクイックリファレンスとしてワークフローパターンセクションを使用してください
ヒント
ワークフローは初めてですか?コアコンセプトから始めて、例に従ってください。EC2 ワークフローは、実際のシナリオにおけるすべての主要パターンを示します。
カスタムワークフローを構築する理由は何ですか?
独自のワークフローを構築して、次のことを実現します。
- テンプレートがサポートしていない独自のビジネスロジックを実装する
- 標準テンプレートを超えて複数のシステムを統合
- 条件分岐で複雑な決定を処理する
- チームの承認と通知のプロセスに合わせる
コアコンセプト
構築する前に、次の基本事項を理解してください。
コンセプト | 何をするのか | 例 |
|---|---|---|
入力と秘密 | 認証情報と設定に関する問題 |
|
アクション( Play ) | 事前構築された統合 ( AWS 、Slack、データベース、API) |
|
データフロー | ステップ間で出力を渡す |
|
スイッチ | 条件に応じて異なるパスを作成する |
|
ループ | リストを処理するか完了をポーリングする | コレクションを反復処理するには、 |
範囲 | ループ関数の反復回数を定義するための必須フィールド |
|
待って | 指定された期間または条件が満たされるまでワークフローの実行を一時停止します |
|
停止 | ワークフロー実行を終了する | 検証失敗またはキャンセル後にワークフローを終了します |
ヒント
実践で学ぶ:それぞれの概念は、例のウォークスルーで説明されています。実際のワークフローで、入力、スイッチ、ループ、承認ゲートが連携して動作する様子を確認できます。
エラー処理パターンの詳細については、 「ベストプラクティス」を参照してください。
クイックスタート
最初のワークフローを 5 つのステップで構築します。
- one.newrelic.com > All Capabilities > Workflow Automationに移動し、Create Your Own [独自の作成を]選択します
- 認証情報 (シークレット マネージャーから:
${{ :secrets:keyName }})、設定 (リージョン、インスタンスタイプ)、およびランタイム データ (アカウント ID、集計 ID) の定義 - カタログからアクションをドラッグし、
${{ .steps.stepName.outputs.field }}構文で接続してデータを渡します - 条件分岐用のスイッチ、リストやポーリングの処理用のループ、人間の決定のための承認ゲートを挿入します。
- 各セクションの後に実行してエラーを早期に発見し、ワークフローを開始またはスケジュールします。
ヒント
3 つのステップから始めて、徹底的にテストしてから拡張します。機能する 5 ステップのワークフローは、機能しない 20 ステップのワークフローよりも優れています。
主要なワークフローパターン
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実際のアクションをご覧ください:チームの対応の処理と検証およびクリーンアップのセクションでは、Slack の反応と AWS SSM のステータスに基づいてスイッチのルーティングが表示されます。
リストを処理するためのループ
ループを使用するのは、複数のアイテムを処理する場合やアクションを繰り返す場合です。
キー構文:
# 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..."実際に動作しているところをご覧ください:サイズ変更セクションを実行すると、ステータスの更新にprogressLoopが使用されます。
承認ゲートと待機
承認ゲートを使用するのは、破壊的な操作やコンプライアンスの承認の前に人間の判断が必要な場合です。
キー構文:
- 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実際の手順をご覧ください:リクエスト チーム承認セクションでは、完全な Slack 承認ワークフローが実装されます。
ステップ間でのデータの受け渡し
データ受け渡しは次の場合に使用します: 1 つのステップの出力が別のステップの入力になる場合 (すべてのワークフローの基礎)
キー構文:
# Reference previous step outputsawsRegion: "${{ .inputs.region }}"instanceId: "${{ .steps.getAlert.outputs.data.entity.instanceId }}"実際に動作を確認してください。すべてのセクションでデータの受け渡しが示され、各ステップは前の結果に基づいて構築されます。
ヒント
完全なパターン例が必要ですか?エラー処理、再試行、複雑な統合などの追加のパターンについては、ワークフローの例を参照してください。
ウォークスルーの例: 承認による EC2 の自動サイズ変更
この完全な例では、Slack 経由でチームの承認を得た後、CPU が急増したときに EC2 インスタンスのサイズを自動的に変更するワークフローを構築する方法を示します。 実際のシナリオでのデータ収集、条件付きロジック、外部統合、およびエラー処理を示します。
ヒント
ワークフローは初めてですか?この例では、AWS、Slack、承認ロジックを使用します。始めたばかりの場合は、まずSlack にレポートを送信してみてください。
前提条件
このワークフローを構築する前に、次のものを用意してください。
- AWS : EC2 および Systems Manager の権限を持つ認証情報
- Slack : 通知用のボットトークンとチャンネル
- New Relic : アラート条件監視 EC2 CPU
- シークレット マネージャー: 構成済み (シークレット管理を参照)
ワークフローの概要
大まかなフロー:
- データを収集する: New Relicから集計とインスタンスの詳細を取得します
- 承認リクエスト: Slack メッセージを送信し、チームの応答を待ちます
- サイズ変更の実行: AWS Systems Manager を使用して EC2 インスタンスのサイズを変更します
- 検証とクリーンアップ: 結果を確認し、チームに通知し、一時的なリソースを削除します
この例では、カスタム ワークフローで使用する主要なパターン (API のクエリ、条件分岐、外部統合、ポーリング ループ、エラー処理) を示します。
ワークフロー入力
ヒント
概念を理解するために読んでいる場合は飛ばしてください。この表は、このワークフローで使用される 12 の問題の詳細を示しています。 ビルド時に参照することはできますが、フローを理解するために必須ではありません。
このワークフローには、入力として資格情報、設定、およびランタイム コンテキストが必要です。 機密値は、 ${{ :secrets:keyName }}構文を使用してシークレット マネージャーから取得されます。
入力カテゴリ:
- 認証: シークレットマネージャーからの AWS および Slack の認証情報
- まとめコンテキスト: New Relicからのアカウント ID と問題 ID
- 設定: リージョン、インスタンスタイプ、タイムゾーン、Slackチャンネル
ワークフローを段階的に構築する
それでは、ワークフローの各部分を構築してみましょう。各ステップには、追加する特定のアクションと、それらが示すワークフロー パターンが含まれます。
まとまったコンテキストを収集する
アクションを実行する前に、API とデータベースをクエリします。これにより、完全なコンテキストが確保されます。
ワークフローは、次の 3 つのアクションを使用して、集計および EC2 インスタンス情報を収集します。
getAlertDetails: NerdGraph API ( New RelicのGraphQL API ) を呼び出して、アクティブ化時刻、条件名、影響を受けるエンティティなどの細分メタデータを取得します。activatedDateTime: Slack メッセージのタイムスタンプを「01-24-2025 14:30」のような読み取り可能な形式に変換します。impactedEC2Instance: NRDB ( New Relicデータベース) を使用して EC2 インスタンス ID と現在のタイプを見つけます。
これが重要な理由:これらの詳細がなければ、意味のある Slack メッセージを作成したり、適切な EC2 インスタンスをターゲットにしたりすることはできません。
チームの承認をリクエスト
人間の意思決定ポイントのために、Slack、PagerDuty、ServiceNow などのコラボレーション ツールに接続します。
ワークフローは詳細を Slack に送信し、応答を待ちます。
IssueDetected: 集計の詳細、現在のインスタンスタイプ、および提案されたサイズ変更を Slack に投稿します。 チームに:+1:(承認) または:-1:(キャンセル) で反応するよう求めます。GetUserReaction: 反応を待つために 5 分 (300 秒) 間一時停止します。checkQuery(スイッチ) : 反応に基づいたルート:ヒント
よくある問題:チャンネル名ではなく、Slack チャンネルID (
C01234ABCD) を使用してください。Slack のチャンネル詳細で見つけてください。詳細についてはトラブルシューティングを参照してください。
チームの対応を処理する
スイッチを使用して、データ値またはユーザー入力に基づいて異なるパスを作成します。
ワークフローは反応に基づいて分岐します。
unexpectedReaction: 有効な反応を説明し、再度待機するためにループします。gotCancelReaction: キャンセルを確認し、完了までスキップします。インフラストラクチャの変更はありません。gotYesReaction: 承認を確認し、サイズ変更に進みます。ヒント
承認ゲート パターン:リスクのある変更の前に人間の判断が必要な場合は、このようなスイッチを使用します。このパターンは、Slack の反応、PagerDuty の確認、電子メールの応答、またはカスタム Webhook で機能します。
サイズ変更を実行する
重複した操作を防ぐために、一意のトークンを使用します。ループを使用して、長時間実行される操作のステータスを確認します。
ワークフローは、AWS Systems Manager (SSM) を通じてインスタンスのサイズを変更します。
createSsmDocument: インスタンスを停止し、タイプを変更して再起動する SSM 自動化ドキュメントを作成します。generateIdempotencyToken: 一意の UUID を作成します。ワークフローが 2 回実行された場合に、重複したサイズ変更を防止します。startResizing: インスタンス ID と新しいタイプを使用して SSM ドキュメントを実行します。progressLoop(ループ) : Slack の更新を 10 秒ごとに投稿します (合計 5 回)。waitForCompletion: 2 分間のタイムアウトで SSM ステータスをポーリングします。重要
SSM を使用する理由Systems Manager は、エラー処理、状態検証、CloudTrail 監査ログを提供します。直接 EC2 APIコールよりも優れています。
ヒント
一般的な問題: AWS 認証情報に
ec2:StopInstances、ec2:ModifyInstanceAttribute、ec2:StartInstances、およびssm:*権限があることを確認します。権限が不足している場合は、何も表示されずに失敗します。
検証とクリーンアップ
失敗を計画し、結果に関係なく一時的なリソースをクリーンアップします。
ワークフローは結果をチェックし、一時リソースを削除します。
hasCompleted(スイッチ) : SSM ステータス (成功/失敗/タイムアウト) に応じて分岐します。displaySuccess: New Relicに成功をログします。sendSuccessMessage: Slack で完了を確認します。displayError: トラブルシューティングのエラー詳細をログに記録します。displayUnexpected: 異常な状態 (手動キャンセルなど) をログに記録します。cleanupSsmDocument: 一時 SSM ドキュメントを削除します。sendSSMCleanMessage: Slack でクリーンアップを確認します。workflowCompleted: 最終完了メッセージ (成功またはキャンセルの場合に実行されます)。ヒント
- 常に掃除をしてください。前のステップが失敗した場合でもクリーンアップが実行されるようにワークフローを構成します。これにより、リソースの漏洩や予期しない AWS 料金の発生を防ぐことができます。
- 一般的な問題: SSM がタイムアウトしても、EC2 インスタンスは依然として状態間で遷移している可能性があります。 再実行する前に、 AWS Console実際のインスタンスのステータスを確認してください。
次のステップ
実行と管理
- ワークフローの開始とスケジュール: 手動でトリガーするか、自動的にスケジュールします。
- ワークフローの管理: ワークフローを編集、バージョン管理、複製、または非アクティブ化します。
改善する
- ベストプラクティス: エラー処理、シークレット管理、パフォーマンス、テスト。
- アクション カタログ: AWS、Azure、GCP、HTTP、データ変換。
- ワークフローの例: より現実的な自動化シナリオ。
規模
- ワークフロー自動化 API : インフラストラクチャをコードとして API 経由でデプロイします。
- ワークフローの制限: タイムアウト、アクションの制限、ペイロードの制約。
