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 年前836 查看次数
1 回答
0
已接受的回答

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

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

AWS
Osaka_T
已回答 1 年前
  • Osaka T様 

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

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

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

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则