1 回答
- 最新
- 投票最多
- 评论最多
0
こんな感じでサンプルコード作ってみました。
おそらく新しいバージョンのNode.jsを使用していて「require」が使えないのではないかと思います。
SendCommandCommandとGetCommandInvocationCommandの使い方は以下のドキュメントに記載されています。
https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/ssm/command/SendCommandCommand/
https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/ssm/command/GetCommandInvocationCommand/
GetCommandInvocationCommandを実行するときに5秒間待機する処理にしましたが、この書き方ではなくレスポンスに含まれるStatusが「Success」以外の時にループさせるような処理でもよいと思います。
https://docs.aws.amazon.com/systems-manager/latest/userguide/monitor-commands.html
import { SSMClient, SendCommandCommand, GetCommandInvocationCommand } from "@aws-sdk/client-ssm";
export const handler = async (event) => {
// TODO implement
const client = new SSMClient({region: 'ap-northeast-1'});
const input = {
DocumentName: 'AWS-RunShellScript',
InstanceIds: ['EC2 ID],
Parameters: {
commands: ["sh test.sh"],
workingDirectory: ['/home/ec2-user/']
}
}
const command = new SendCommandCommand(input);
const response = await client.send(command);
const commandId = response.Command.CommandId;
const getCommandInput = {
CommandId: commandId,
InstanceId: 'EC2 ID'
}
await new Promise(resolve => setTimeout(resolve, 5000));
const getCommand = new GetCommandInvocationCommand(getCommandInput);
const getResponse = await client.send(getCommand);
console.log(getResponse.StandardOutputContent);
};
シェルスクリプトはこんな感じです。
CSVのサンプルは以下になります。
Lambdaを実行すると以下のようにCloudWatch Logsに記録されます。
Riku_Kobayashi様 早々にご回答いただきありがとうございます。
丁寧なご回答およびサンプルコードのおかげもあり、無事やりたい事が実現できました。 時間待機ではなくステータスに応じて、ループし ・待機 ・GetCommandInvocationCommandを実行 ・異常終了 を使い分ける書き方も調査して試してみます。
早々かつ的確なご回答ありがとうございました。 承認させていただきます。