Ravindra BagaleCourses & study guides English

AWS SDK EC2 Examples: Instances Launch, List, Stop आणि Terminate (Python, PHP, Node.js)

Code मधून EC2 servers चालवू: latest Amazon Linux image शोधा, tag असलेला instance launch करा, filters ने instances list करा, running पर्यंत wait, मग stop, start आणि terminate — Python, PHP आणि Node.js मध्ये. Auto-start scripts आणि "test box चालू कर" tools हेच करतात.

या chapter मध्ये तुम्ही काय शिकाल

  • SSM मधून latest AMI शोधा
  • Tags सह instance launch
  • Filters ने instances list
  • running व stopped साठी waiters
  • Stop, start, terminate safely

1. मोठं चित्र: गाड्या भाड्याने

हे का लागतं?

Singapore मध्ये Mei चं car rental आहे. ती model (AMI), size (instance type) निवडते, नावाचा sticker लावते (tag), चाव्या देते (key pair), parking lot मध्ये ठेवते (subnet). Customer परत आल्यावर गाडी park करते (stop) किंवा विकते (terminate). Code मधून EC2 म्हणजे याच निवडी.

हे काय आहे?

RunInstances launch करतो; DescribeInstances list; StopInstances, StartInstances, TerminateInstances state बदलतात. Tags मुळे scripts नंतर "आपले" instances शोधतात.

कसं करायचं (step by step)

Code मधून instance lifecycleSSM parameter मधून AMItags सह RunInstancesinstance_running waitStopInstances / StartInstancesTerminateInstances
Stopped instance ला compute चे पैसे नाहीत, पण EBS volumes चे लागतात.

2. Latest AMI शोधा

हे का लागतं?

AMI IDs region नुसार वेगळे आणि दर महिन्याला बदलतात. Hard-code केला तर पुढच्या महिन्यात तुटतो.

हे काय आहे?

AWS latest Amazon Linux 2023 AMI public SSM parameter म्हणून देतो. GetParameter ने वाचा.

कसं करायचं (step by step)

  1. Python.
import boto3
ssm = boto3.client("ssm", region_name="ap-southeast-1")
ami = ssm.get_parameter(Name="/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64")["Parameter"]["Value"]
print(ami)

अपेक्षित output:

ami-0a1b2c3d4e5f67890
  1. PHP.
<?php
require "vendor/autoload.php";
$ssm = new Aws\Ssm\SsmClient(["region" => "ap-southeast-1"]);
echo $ssm->getParameter(["Name" => "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64"])["Parameter"]["Value"], PHP_EOL;

अपेक्षित output:

ami-0a1b2c3d4e5f67890
  1. Node.js.
import { SSMClient, GetParameterCommand } from "@aws-sdk/client-ssm";
const ssm = new SSMClient({ region: "ap-southeast-1" });
const r = await ssm.send(new GetParameterCommand({ Name: "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64" }));
console.log(r.Parameter.Value);

अपेक्षित output:

ami-0a1b2c3d4e5f67890

3. Tag सह instance launch करून wait

हे का लागतं?

Mei च्या booking app ला प्रत्येक नव्या developer साठी त्याच्या नावाचा test server हवा.

हे काय आहे?

ImageId, InstanceType, MinCount/MaxCount आणि TagSpecifications द्या. मग instance_running waiter आणि public IP वाचा.

कसं करायचं (step by step)

  1. Python: run_instances आणि wait.
import boto3

ec2 = boto3.client("ec2", region_name="ap-southeast-1")
r = ec2.run_instances(
    ImageId="ami-0a1b2c3d4e5f67890", InstanceType="t3.micro", MinCount=1, MaxCount=1,
    TagSpecifications=[{"ResourceType": "instance", "Tags": [{"Key": "Name", "Value": "dev-mei"}, {"Key": "team", "Value": "booking"}]}],
)
iid = r["Instances"][0]["InstanceId"]
ec2.get_waiter("instance_running").wait(InstanceIds=[iid])
ip = ec2.describe_instances(InstanceIds=[iid])["Reservations"][0]["Instances"][0].get("PublicIpAddress")
print(iid, "running", ip)

अपेक्षित output:

i-0123456789abcdef0 running 13.250.10.20
  1. PHP: runInstances आणि waitUntil.
<?php
require "vendor/autoload.php";
$ec2 = new Aws\Ec2\Ec2Client(["region" => "ap-southeast-1"]);
$r = $ec2->runInstances([
    "ImageId" => "ami-0a1b2c3d4e5f67890", "InstanceType" => "t3.micro", "MinCount" => 1, "MaxCount" => 1,
    "TagSpecifications" => [["ResourceType" => "instance", "Tags" => [["Key" => "Name", "Value" => "dev-kunal"], ["Key" => "team", "Value" => "booking"]]]],
]);
$id = $r["Instances"][0]["InstanceId"];
$ec2->waitUntil("InstanceRunning", ["InstanceIds" => [$id]]);
echo "$id running", PHP_EOL;

अपेक्षित output:

i-0fedcba9876543210 running
  1. Node.js: RunInstancesCommand आणि waitUntilInstanceRunning.
import { EC2Client, RunInstancesCommand, waitUntilInstanceRunning } from "@aws-sdk/client-ec2";

const ec2 = new EC2Client({ region: "ap-southeast-1" });
const r = await ec2.send(new RunInstancesCommand({
  ImageId: "ami-0a1b2c3d4e5f67890", InstanceType: "t3.micro", MinCount: 1, MaxCount: 1,
  TagSpecifications: [{ ResourceType: "instance", Tags: [{ Key: "Name", Value: "dev-sophie" }, { Key: "team", Value: "booking" }] }],
}));
const id = r.Instances[0].InstanceId;
await waitUntilInstanceRunning({ client: ec2, maxWaitTime: 300 }, { InstanceIds: [id] });
console.log(id, "running");

अपेक्षित output:

i-0aa11bb22cc33dd44 running
  1. Verify: तीन dev boxes running.
aws ec2 describe-instances --region ap-southeast-1 --filters Name=tag:team,Values=booking Name=instance-state-name,Values=running --query "Reservations[].Instances[].Tags[?Key=='Name'].Value[]" --output text

अपेक्षित output:

dev-mei	dev-kunal	dev-sophie

4. Filters ने instances list

हे का लागतं?

संध्याकाळी 7 वाजता script ने team=booking tag असलेले सगळे instances शोधून stop करायला हवे, पैसे वाचवायला.

हे काय आहे?

Filters AWS बाजूला चालतात (tag:key, instance-state-name, instance-type). Results Reservations मध्ये grouped असतात, flatten करा.

कसं करायचं (step by step)

  1. Python: paginator + filters.
import boto3

ec2 = boto3.client("ec2", region_name="ap-southeast-1")
flt = [{"Name": "tag:team", "Values": ["booking"]}, {"Name": "instance-state-name", "Values": ["running"]}]
ids = []
for page in ec2.get_paginator("describe_instances").paginate(Filters=flt):
    for res in page["Reservations"]:
        ids += [i["InstanceId"] for i in res["Instances"]]
print(len(ids), ids)

अपेक्षित output:

3 ['i-0123456789abcdef0', 'i-0fedcba9876543210', 'i-0aa11bb22cc33dd44']
  1. PHP: result वर JMESPath search.
<?php
require "vendor/autoload.php";
$ec2 = new Aws\Ec2\Ec2Client(["region" => "ap-southeast-1"]);
$r = $ec2->describeInstances(["Filters" => [["Name" => "tag:team", "Values" => ["booking"]], ["Name" => "instance-state-name", "Values" => ["running"]]]]);
print_r($r->search("Reservations[].Instances[].InstanceId"));

अपेक्षित output:

Array
(
    [0] => i-0123456789abcdef0
    [1] => i-0fedcba9876543210
    [2] => i-0aa11bb22cc33dd44
)
  1. Node.js: paginateDescribeInstances.
import { EC2Client, paginateDescribeInstances } from "@aws-sdk/client-ec2";

const ec2 = new EC2Client({ region: "ap-southeast-1" });
const Filters = [{ Name: "tag:team", Values: ["booking"] }, { Name: "instance-state-name", Values: ["running"] }];
const ids = [];
for await (const p of paginateDescribeInstances({ client: ec2 }, { Filters })) {
  for (const r of p.Reservations) ids.push(...r.Instances.map(i => i.InstanceId));
}
console.log(ids.length, ids);

अपेक्षित output:

3 [ 'i-0123456789abcdef0', 'i-0fedcba9876543210', 'i-0aa11bb22cc33dd44' ]

5. Stop, start आणि terminate

हे का लागतं?

Dev boxes दिवसाचे 14 तास stop केले तर compute bill ~58% वाचतो — 10 t3.medium boxes च्या team ला महिन्याला ~$180.

हे काय आहे?

Stop disk ठेवतो; start परत चालू करतो (नवा public IP). Terminate instance delete करतो. DryRun=True काही न करता permissions तपासतो.

कसं करायचं (step by step)

  1. Python: dry run, मग stop आणि wait.
import boto3
from botocore.exceptions import ClientError

ec2 = boto3.client("ec2", region_name="ap-southeast-1")
ids = ["i-0123456789abcdef0"]
try:
    ec2.stop_instances(InstanceIds=ids, DryRun=True)
except ClientError as e:
    print("DryRun:", e.response["Error"]["Code"])
ec2.stop_instances(InstanceIds=ids)
ec2.get_waiter("instance_stopped").wait(InstanceIds=ids)
print("stopped")

अपेक्षित output:

DryRun: DryRunOperation
stopped
  1. PHP: परत start.
<?php
require "vendor/autoload.php";
$ec2 = new Aws\Ec2\Ec2Client(["region" => "ap-southeast-1"]);
$r = $ec2->startInstances(["InstanceIds" => ["i-0123456789abcdef0"]]);
echo $r["StartingInstances"][0]["PreviousState"]["Name"], " -> ", $r["StartingInstances"][0]["CurrentState"]["Name"], PHP_EOL;

अपेक्षित output:

stopped -> pending
  1. Node.js: सगळे booking dev boxes terminate.
import { EC2Client, TerminateInstancesCommand, waitUntilInstanceTerminated } from "@aws-sdk/client-ec2";

const ec2 = new EC2Client({ region: "ap-southeast-1" });
const InstanceIds = ["i-0123456789abcdef0", "i-0fedcba9876543210", "i-0aa11bb22cc33dd44"];
const r = await ec2.send(new TerminateInstancesCommand({ InstanceIds }));
console.log(r.TerminatingInstances.map(i => i.CurrentState.Name));
await waitUntilInstanceTerminated({ client: ec2, maxWaitTime: 600 }, { InstanceIds });
console.log("terminated");

अपेक्षित output:

[ 'shutting-down', 'shutting-down', 'shutting-down' ]
terminated
  1. Verify: booking tag चं काही running नाही.
aws ec2 describe-instances --region ap-southeast-1 --filters Name=tag:team,Values=booking Name=instance-state-name,Values=running --query "length(Reservations)"

अपेक्षित output:

0

6. हाच call Java, Go, .NET आणि CLI मध्ये

हे का लागतं?

Teams अनेकदा भाषा मिसळतात. Python, PHP आणि Node.js मध्ये call समजला की बाकीचे SDKs म्हणजे तोच API, फक्त syntax वेगळा.

हे काय आहे?

सगळे RunInstances API call करतात. Terminal मधून पटकन test करायला CLI ओळ वापरा.

कसं करायचं (step by step)

StackCode
AWS CLIaws ec2 run-instances --image-id ami-x --instance-type t3.micro --count 1
Java v2ec2.runInstances(r -> r.imageId("ami-x").instanceType(InstanceType.T3_MICRO).minCount(1).maxCount(1));
Go v2client.RunInstances(ctx, &ec2.RunInstancesInput{ImageId: aws.String("ami-x"), InstanceType: types.InstanceTypeT3Micro, MinCount: aws.Int32(1), MaxCount: aws.Int32(1)})
.NETawait ec2.RunInstancesAsync(new RunInstancesRequest { ImageId = "ami-x", InstanceType = InstanceType.T3Micro, MinCount = 1, MaxCount = 1 });

7. काहीही खर्च चालू राहू नये म्हणून cleanup

हे का लागतं?

चालू ठेवलेले lab resources पैसे खातात आणि security risk बनतात.

हे काय आहे?

उलट्या क्रमाने delete करा: आधी children, मग parents.

कसं करायचं (step by step)

  1. Test instances उरले नाहीत ना ते पाहा.
aws ec2 describe-instances --region ap-southeast-1 --filters Name=tag:team,Values=booking Name=instance-state-name,Values=pending,running,stopped --query "length(Reservations)"

अपेक्षित output:

0

Ravindra Bagale's Tip

Launch करतानाच TagSpecifications ने tag लावा, नंतर नाही. Cost reports, रात्री stop scripts आणि IAM conditions tags वर चालतात.

8. मुलाखत प्रश्न आणि उत्तरं

प्र. Code मध्ये नेहमी नवीन AMI कसा?

Public SSM parameter GetParameter ने वाचा.

प्र. Instances Reservations मध्ये का?

एक RunInstances = एक reservation, अनेक instances.

प्र. DryRun काय करतो?

Permissions तपासतो, बदल होत नाही.

प्र. Stop vs terminate?

Stop disk ठेवतो; terminate delete.

प्र. Running पर्यंत कसं थांबायचं?

instance_running waiters.

घरी करून बघा

  1. autostop=yes tag असलेले running instances stop करणारी script लिहा.
  2. तिन्ही भाषांत instance ID, type, state, Name tag table म्हणून print करा.

थोडक्यात सांगायचं तर

  1. Public SSM parameter मधून AMI.
  2. TagSpecifications सह RunInstances.
  3. List साठी filters + paginators.
  4. running, stopped, terminated waiters.
  5. Permissions साठी DryRun.

सराव Tasks

या scenario बद्दल

Patil Dairy हा कोल्हापूर मधला डेअरी व्यवसाय आहे. Sunita Patil त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 12

सोपं EC2 instances ची list पाहा

का: काही बदलण्याआधी काय चालू आहे व कोणत्या state मध्ये ते पाहा.

काय करायचं: Patil Dairy च्या ap-south-1 मधल्या सगळ्या EC2 instances चे details दाखवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं Instance reboot करा

का: Reboot मध्ये disks व IPs तेच राहतात, stop/start ने public IP बदलू शकतो.

काय करायचं: i-0b415a34440011a2b instance reboot करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं EC2 server ला connect करा

का: Key file सह SSH हा Linux EC2 ला login करण्याचा standard मार्ग.

काय करायचं: patildairy-key.pem key वापरून 13.10.20.5 server वर ec2-user म्हणून login करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Instance stop करा

का: Stop केलेल्या instance चा compute खर्च येत नाही, फक्त disks चा.

काय करायचं: i-0b415a34440011a2b instance stop करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

सोपं Instance start करा

का: सकाळी team ला लागेल तेव्हा परत start करा.

काय करायचं: i-0b415a34440011a2b instance start करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Server पासून AMI बनवा

का: AMI म्हणजे पूर्ण server image. त्यापासून कधीही सारख्या copies launch करता येतात.

काय करायचं: Instance i-0b415a34440011a2b पासून patildairy-web-v1 नावाची AMI बनवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Elastic IP allocate करा

का: Elastic IP stop/start नंतरही तोच राहतो, म्हणून DNS चालू राहतो.

काय करायचं: VPC मध्ये वापरण्यासाठी नवा Elastic IP address allocate करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Elastic IP server ला जोडा

का: Associate केल्यावर server ला तो fixed public IP मिळतो ज्याकडे domain जातो.

काय करायचं: Allocation eipalloc-004443a514bdd44 ला instance i-0b415a34440011a2b शी associate करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम Key pair बनवा

का: नव्या Linux instances ला SSH करायला key pair लागते.

काय करायचं: patildairy-key नावाची key pair बनवा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम एक EC2 instance launch करा

का: CLI ने launch करणं repeatable व जलद असतं, scripts मध्येही तोच command चालतो.

काय करायचं: AMI ami-0100cccbed1cfabcd पासून 1 instance launch करा, type t3.micro, key pair patildairy-key, security group sg-00044436514a4c3b2.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड फक्त running instances दाखवा

का: Filters मुळे AWS फक्त हवं तेच पाठवतं.

काय करायचं: फक्त state running असलेल्या instances describe करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

अवघड Name tag सह instance launch करा

का: Launch वेळी tags दिल्यास billing व search पहिल्या दिवसापासून सोपं होतं.

काय करायचं: ami-0100cccbed1cfabcd पासून 1 t3.small instance subnet subnet-0004443a514bbb1 मध्ये launch करा, व instance ला Name=patildairy-web tag द्या.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

उजळणी, तुलना आणि मुलाखत cards

हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.

EC2 launch. Public SSM parameter मधून AMI. RunInstances + TagSpecifications. instance_running wait. Reservations[].Instances[] flatten.
उजळणी card: EC2 launch · PNG download करा · Card page उघडा
Stop, start, terminate. Tag आणि state ने filter. DryRun permission तपासतो. Stop EBS ठेवतो; terminate delete. Stopped ला disks चे पैसे.
उजळणी card: Stop, start, terminate · PNG download करा · Card page उघडा
Stop vs Terminate. EBS राहतो. / Instance delete.
तुलना: Stop vs Terminate · PNG download करा · Card page उघडा
Reservations का?. एक RunInstances = एक reservation. त्यात अनेक instances. Loop आधी flatten.
मुलाखत card: Reservations का? · PNG download करा · Card page उघडा

अजून cards: Ravi Sir's Cards.