I am facing issue for creating instance by using scripts from scripts/03 folder and error is
Failed to create instance with: TypeError: input is not iterable
at serializeAws_ec2SecurityGroupStringList (D:\Learning\AWS\hbfl\node_modules@aws-sdk\client-ec2\dist\cjs\protocols\Aws_ec2.js:38389:23)
at serializeAws_ec2RunInstancesRequest (D:\Learning\AWS\hbfl\node_modules@aws-sdk\client-ec2\dist\cjs\protocols\Aws_ec2.js:37708:31)
at Object.serializeAws_ec2RunInstancesCommand (D:\Learning\AWS\hbfl\node_modules@aws-sdk\client-ec2\dist\cjs\protocols\Aws_ec2.js:5844:12)
at serialize (D:\Learning\AWS\hbfl\node_modules@aws-sdk\client-ec2\dist\cjs\commands\RunInstancesCommand.js:111:26)
at D:\Learning\AWS\hbfl\node_modules@aws-sdk\middleware-serde\dist\cjs\serializerMiddleware.js:5:27
at D:\Learning\AWS\hbfl\node_modules@aws-sdk\middleware-logger\dist\cjs\loggerMiddleware.js:6:28
at EC2Client.send (D:\Learning\AWS\hbfl\node_modules@aws-sdk\smithy-client\dist\cjs\client.js:23:20)
at sendCommand (D:\Learning\AWS\hbfl\scripts\03\create-ec2-instance.js:15:17)
at createInstance (D:\Learning\AWS\hbfl\scripts\03\create-ec2-instance.js:94:12)
at execute (
----------------------------CODE------------------------------------
// Imports
const {
EC2Client,
AuthorizeSecurityGroupIngressCommand,
CreateKeyPairCommand,
CreateSecurityGroupCommand,
RunInstancesCommand
} = require('@aws-sdk/client-ec2')
const helpers = require('./helpers')
function sendCommand (command) {
console.log('Started-------------------->');
const client = new EC2Client({region : process.env.AWS_REGION})
return client.send(command)
}
// Declare local variables
const sgName = 'hamster_sg'
const keyName = 'hamster_key'
// Do all the things together
async function execute () {
try {
await createSecurityGroup(sgName)
const keyPair = await createKeyPair(keyName)
await helpers.persistKeyPair(keyPair)
const data = await createInstance(sgName, keyName)
console.log('Created instance with:', data)
} catch (err) {
console.error('Failed to create instance with:', err)
}
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// Create functions
async function createSecurityGroup (sgName) {
const sgParams = {
Description : sgName,
GroupName : sgName
}
const createCommand = new CreateSecurityGroupCommand(sgParams)
const data = await sendCommand(createCommand);
console.log(data)
const rulesParams = {
GroupId: data.GroupId,
IpPermissions: [
{
IpProtocol : 'tcp',
FromPort : 22,
ToPort : 22,
IpRanges: [{ CiderIp : '0.0.0.0/0'}]
},
{
IpProtocol : 'tcp',
FromPort : 3000,
ToPort : 3000,
IpRanges: [{ CiderIp : '0.0.0.0/0'}]
}
]
}
const authCommand = new AuthorizeSecurityGroupIngressCommand(rulesParams)
return sendCommand(authCommand)
}
async function createKeyPair (keyName) {
const params = {
KeyName : keyName
}
const command = new CreateKeyPairCommand(params)
return sendCommand(command)
}
async function createInstance (sgName, keyName) {
const params = {
ImageId: 'ami-0cff7528ff583bf9a',
InstanceType: 't2.micro',
KeyName: keyName,
MaxCount: 1,
MinCount: 1,
SecurityGroups: {sgName},
userData: 'IyEvYmluL2Jhc2gKc3UgZWMyLXVzZXIKY3VybCAtLXNpbGVudCAtLWxvY2F0aW9uIGh0dHBzOi8vcnBtLm5vZGVzb3VyY2UuY29tL3NldHVwXzE2LnggfCBzdWRvIGJhc2ggLQpzdWRvIHl1bSBpbnN0YWxsIC15IG5vZGVqcwpzdWRvIHl1bSBpbnN0YWxsIC15IGdpdAplY2hvICJucG0gaW5zdGFsbCB5YXJuIC1nIgpzdWRvIG5wbSBpbnN0YWxsIHlhcm4gLWcKZWNobyAiZW5kIG5wbSBpbnN0YWxsIHlhcm4gLWciCmNkIH4KZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9yeWFubXVyYWthbWkvaGJmbC5naXQKY2QgaGJmbAplY2hvICJ5YXJuIgp5YXJuCmVjaG8gImVuZCB5YXJuIgp5YXJuIHN0YXJ0'
}
const command = new RunInstancesCommand(params)
return sendCommand(command)
}
execute ()