Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ジョブ管理システムをAWS Step Functionsに移行する時の勘所

ジョブ管理システムをAWS Step Functionsに移行する時の勘所

ジョブ管理システムをAWS Step Functionsに移行する際に考えるべきこと注意することをまとめてみました。

のんピ

July 29, 2022
Tweet

More Decks by のんピ

Other Decks in Technology

Transcript

  1. 2 自己紹介 { "ニックネーム": "のんピ", "Twitter ID": "@non____97", "部署": "AWS事業本部

    コンサルティング部", "興味のあること": "面白そうなブログネタ探し", "好きなAWSサービス" : [ "AWS Step Functions", "AWS Transit Gateway", "Amazon FSx for NetApp ONTAP" ], "称号" : [ "2022 APN ALL AWS Certifications Engineers", "2022 APN AWS Top Engineers (Networking)" ] }
  2. 21 SSM Run Commandの注意点 実行が完了したか定期的にポーリングする必要がある • SSM RunCommandでスクリプトを実行する • ListCommandInvocations

    APIを呼び出す • SSM RunCommandが正常終了したかどうか確 認する • まだ実行中であれば10秒間待機して再度 ListCommandInvocations APIを呼び出す • 正常終了していれば次の処理に移る • 異常終了していればステートマシン自体を異常終 了させる
  3. 23 EventBridgeルールのCron式の例 スケジュール Cron式 毎日午前 10:00 (UTC+0) に実行 cron (0

    10 * * ? *) 毎日午後 12:15 (UTC+0) に実行 cron (15 12 * * ? *) 毎週月曜日から金曜日まで午後 6:00 (UTC+0) に実行 cron (0 18 ? * MON-FRI *) 毎月 1 日の午前 8:00 (UTC+0) に実行 cron (0 8 1 * ? *) 15 分ごとに実行 cron (0/15 * * * ? *) 月曜日から金曜日まで 10 分ごとに実行 cron (0/10 * ? * MON-FRI *) 月曜日から金曜日まで午前 8:00 から午後 5:55 (UTC+0) の間に5 分ごとに実行 cron (0/10 * ? * MON-FRI *) 月曜日から金曜日まで開始日の午後10時から翌日の午前2時 (UTC) の間、30分間隔で実行 cron (0/30 20-2 ? * MON-FRI *)
  4. 24 Cron式で表現が難しい場合 「祝日や締め日のみ実行 or 実行しない」 • AWS Systems Manager Change

    Calendarを活用する • ワークフローの前段でSSM Change CalendarのGetCalendarState APIを呼び出して後続の処理を実行すべきか、そうでないかを判 断 • 複数のカレンダーを組み合わせ、ANDやORで評価したい場合も 対応可能
  5. 詳細は以下記事参照 26 SSM Change Calendarとの連携 [AWS Step Functions] AWS Systems

    Manager Change Calendarと 連携して定期実行処理のイレギュラーケースに対応してみた
  6. 28 イベントパターンの例 { "source": ["aws.states"], "detail-type": ["Step Functions Execution Status

    Change"], "detail": { "status": ["SUCCEEDED"], "stateMachineArn": ["<先行ステートマシンのARN>"] } }
  7. 31 イベントパターン どの先行ステートマシンが実行完 了した際も、ステートマシンαが起動 するように設定 { "source": ["aws.states"], "detail-type": ["Step

    Functions Execution Status Change"], "detail": { "status": ["SUCCEEDED"], "stateMachineArn": [ "<ステートマシンAのARN>", "<ステートマシンBのARN>", "<ステートマシンCのARN>" ] } }