1回答
- 新しい順
- 投票が多い順
- コメントが多い順
0
はじめに、SendCommand API で実行した bat ファイルの exit code を Run Command の exit code とする場合、bat ファイルを実行した際の exit code を明示的に exit に渡す必要があります。
そのため、Lambda 関数から SendCommand API を実行する際、commands パラメータを以下のように定義することをご検討ください。
commands: ['chcp 65001; $process = Start-Process test_win.bat -PassThru -Wait', 'exit $process.Exitcode'],
次に、SendCommand API は非同期的な API であり、実行した bat ファイルの実行結果を同期的に取得することができません。
対策といたしまして、Lambda 関数から SendCommand API の実行後に GetCommandInvocation API を定期的に実行し、Status プロパティが Success となった時点のレスポンスを確認いただく方法が考えられます。
なお、SendCommand API にて bat ファイルを実行した際の exit code を明示的に exit に渡している場合、bat ファイルの exit code は GetCommandInvocation API のレスポンスの ResponseCode プロパティに記録されます。
そのため、Lambda 関数から以下のような処理をおこなうことで、bat ファイルの exit code を CloudWatch Logs に出力いただけるかと存じます。
- SendCommand API で bat ファイルを実行し、その際のレスポンスに含まれる CommandId を取得
- GetCommandInvocation API を 1 で取得した CommandId に対して実行し、レスポンスから Status の値を取得
- 2 を一定間隔で繰り返し、GetCommandInvocation API のレスポンスに含まれる Status プロパティの値が Success となった時点で、ResponseCode プロパティの値をログに出力
回答済み 2年前
関連するコンテンツ
- AWS公式更新しました 8ヶ月前
- AWS公式更新しました 1年前
Ito K様 ご回答ありがとうございます。 commands パラメータの修正だけでなく、GetCommandInvocation API を利用したコードを、Lambda内に書く必要があるのですね。 このあたり難解なため、少し時間をかけて確認していきたいと思います。