AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

Lambdaでshファイルを同期呼出で実行する方法とは?

0

EC2インスタンス(Linux)にあるshファイルを、Lambdaから EC2 Run Command で、実行させています。

現在実装しているコードは下記になります。

現状非同期呼出が行われており、shファイルの処理結果に関わらず、ClowdWatchに、正常終了のログが出力されています。 この処理を同期呼出に変更して、shファイルの処理結果を返してもらうコードにしたいです。 下記ドキュメントを参考しているのですが、非同期処理でしか現状実現出来ておりません。

どうコードを修正していけば、状況が改善されますでしょうか。 ご協力をお願いします。

同期呼び出し(AWS公式ドキュメント) https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-sync.html

そのLambdaの実行…同期?非同期?(Qiita) https://qiita.com/is_ryo/items/009220083e179272cbda

'use strict';

const AWS = require('aws-sdk')
const ssm = new (require('aws-sdk/clients/ssm'))();

module.exports.handler = async event => {

 		try {
			let params = {
				DocumentName: 'AWS-RunShellScript',
				InstanceIds: ['対象のインスタンスID'],
				Parameters: {
					commands: ['chcp 65001; sh test_Linux.sh'],
					workingDirectory:['/home/user/batch_execution'] 
			},
			TimeoutSeconds: 3600 // 1 hour
    		}
		const sendCommandResult = await ssm.sendCommand(params).promise();  
			} catch(e){
    	console.log(e);
	}	

	};
1回答
0
承認された回答

SendCommand API はご確認いただいたとおり非同期的な API となり、同期的に結果を取得することはできません。 そのため処理結果を取得する場合には GetCommandInvocation APIなどでコマンドの進行状況を定期的に確認し、Status が Success となった時点でのレスポンスを確認する必要がございます。GetCommandInvocation API のレスポンスでは ResponseCode や StandardOutputContent プロパティにて Exit Code や標準出力の内容を参照可能です。

なお、ご参照いただいているドキュメントは Lambda 関数自体を同期的に呼び出す場合のドキュメントとなり、Lambda 関数内のコードから呼び出す API を同期的に実行する方法とは異なることにご注意いただければと存じます。

AWS
回答済み 2年前
  • Osaka T様 

    早々のご回答ありがとうございます。 そもそものところで勘違いがあったようで、お恥ずかしい限りです。

    API Referenceも拝見したのですが、コマンドの進行状況の監視や、 Statusの遷移等どのようなコードで実現すればよいかイメージすら持てずにおります。 Osaka様のほうで、何かヒントとなるようなドキュメント等ご存じありませんでしょうか。

    勘違いの是正や、方向性についてご回答をいただけましたので、承認のほうはさせていただこうと思います。 ご都合つけばご確認いただけますと幸いです。

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ