Cara memulai dan menghentikan instans EC2 menggunakan Lambda

Saya mencoba memulai dan menghentikan instance Windows EC2 menggunakan lambda, saya menggunakan Node.js 8.10 untuk menulis skrip mulai dan berhenti. Ketika saya menguji skrip, skrip berhasil dijalankan tetapi instance EC2 tidak terpengaruh. Saya memberikan detail instance dan skrip di bawah ini

const AWS = require('aws-sdk');

exports.handler = async (event) => {

const ec2 = new AWS.EC2({ region: event.instanceRegion });
 ec2.stopInstances({ InstanceIds: [event.instanceId] }).promise()
    .then(() => callback(null, `Successfully stopped ${event.instanceId}`))
    .catch(err => callback(err));
};

Skrip berhasil dijalankan

masukkan deskripsi gambar di sini

Di bawah ini adalah detail instance masukkan deskripsi gambar di sini

Ini adalah skrip penghentian tetapi ini tidak dapat menghentikan instance, tolong bantu saya, saya baru mengenal aws. Terima kasih sebelumnya


person Mandrek    schedule 31.07.2019    source sumber
comment
kamu harus mengembalikan ec2.stopInstances() janji. Cara yang Anda lakukan adalah mengembalikan janji yang telah diselesaikan kepada penangan dan kemudian Anda .stopInstances() tidak menyelesaikan pekerjaannya   -  person guijob    schedule 31.07.2019
comment
@guijob bisakah Anda mengedit kode saya, saya juga baru mengenal node   -  person Mandrek    schedule 31.07.2019


Jawaban (1)


Saat menggunakan Lambda, fungsi handler Anda menerima tiga parameter: peristiwa, konteks, dan panggilan balik. Anda menggunakan callback saat menggunakan fungsi sinkron. Saat menggunakan async Anda harus mengembalikan janji.

const AWS = require('aws-sdk');

exports.handler = async (event, context, callback) => {

const ec2 = new AWS.EC2({ region: event.instanceRegion });
 return ec2.stopInstances({ InstanceIds: [event.instanceId] }).promise()
    .then(() => `Successfully stopped ${event.instanceId}`)
    .catch(err => console.log(err));
};

Faktanya, ketika Anda menggunakan kata kunci async Anda sebenarnya mengembalikan sebuah janji, tetapi dengan tidak mengembalikan apa pun, Anda menyelesaikannya dengan null sebagai respons, sehingga kode Anda akan berhenti dan stopInstances Anda tidak akan menyelesaikan pekerjaannya.

person guijob    schedule 31.07.2019
comment
Atau sederhananya await ec2.stopInstances({ InstanceIds: [event.instanceId] }).promise() - person Thales Minussi; 31.07.2019
comment
tepatnya, ada banyak solusi berbeda untuk ini - person guijob; 31.07.2019
comment
tidak yakin saya setuju pendekatan .then().catch() dapat disebut sebagai solusi. Ini tidak masuk akal lagi setelah kita memiliki async/await. Ini tentu saja berhasil tetapi harus tidak disukai. - person Thales Minussi; 31.07.2019