Nubilus Perl

Preview:

DESCRIPTION

Una panoramica su Net::Amazon::EC2 e Net::RackSpace::Servers. Potete trovare la presentazione con le note qui: http://polettix.s3.amazonaws.com/IPW2011/nubilus-perl-1.1-note.pdf

Citation preview

Nubilus PerlLibrerie Perl in the cloud

IaaS - PaaS - SaaS

2

IaaS - PaaS - SaaS2

Amazon

require Net::Amazon::EC2;my $ec2 = Net::Amazon::EC2->new( AWSAccessKeyId => 'YOUR-AWS-KEY', SecretAccessKey => 'YOUR-AWS-SECRET',);

require Net::Amazon::EC2;my $ec2 = Net::Amazon::EC2->new( AWSAccessKeyId => 'YOUR-AWS-KEY', SecretAccessKey => 'YOUR-AWS-SECRET',);

my $res = $ec2->run_instances( ImageId => 'ami-8c1fece5', MinCount => 1, MaxCount => 1, SecurityGroup => 'quick-start-1', InstanceType => 'm1.small',);

Instance

my $res = $ec2->run_instances( ImageId => 'ami-8c1fece5', MinCount => 1, MaxCount => 1, SecurityGroup => 'quick-start-1', InstanceType => 'm1.small',);

Instance

Image Instance

#!/usr/bin/env perl use strict;use warnings;use 5.012;

my $message = shift || 'whatever!';while ('necessary') { say $message; sleep 1;}

10715 gnome-terminal10719 \_ gnome-pty-helper10720 \_ bash24910 \_ bash32549 \_ bash27438 | \_ perl prg.pl27444 \_ bash27462 | \_ perl prg.pl hey you!27463 \_ bash27480 | \_ perl prg.pl another

Image Instance

my $res = $ec2->run_instances( ImageId => 'ami-8c1fece5', MinCount => 1, MaxCount => 1, SecurityGroup => 'quick-start-1', InstanceType => 'm1.small',);

#!/usr/bin/env perl use strict;use warnings;use 5.012;

my $message = shift || 'whatever!';while ('necessary') { say $message; sleep 1;}

10715 gnome-terminal10719 \_ gnome-pty-helper10720 \_ bash24910 \_ bash32549 \_ bash27438 | \_ perl prg.pl27444 \_ bash27462 | \_ perl prg.pl hey you!27463 \_ bash27480 | \_ perl prg.pl another

Image Instance

Image Instance

Type

my $res = $ec2->run_instances( ImageId => 'ami-8c1fece5', MinCount => 1, MaxCount => 1, SecurityGroup => 'quick-start-1', InstanceType => 'm1.small',);

RUNNING_CHECK:while ('necessary') { my $reservations = $ec2->describe_instances() || [];

foreach my $res (@$reservations) { foreach my $instance ($res->instances_set()) { if ($instance->{instance_state}{name} eq 'running') { say 'active, IP: ', $instance->{ip_address}; last RUNNING_CHECK; } } } sleep 1;}

RUNNING_CHECK:while ('necessary') { my $reservations = $ec2->describe_instances() || [];

foreach my $res (@$reservations) { foreach my $instance ($res->instances_set()) { if ($instance->{instance_state}{name} eq 'running') { say 'active, IP: ', $instance->{ip_address}; last RUNNING_CHECK; } } } sleep 1;}

Ora?

Beh... PRIMA...

Sì, SSH

my $res = $ec2->run_instances( ImageId => 'ami-8c1fece5', MinCount => 1, MaxCount => 1, SecurityGroup => 'quick-start-1', InstanceType => 'm1.small',);

RUNNING_CHECK:while ('necessary') { my $reservations = $ec2->describe_instances() || [];

foreach my $res (@$reservations) { #...

my $instance_id = $res->instance_id();

$ec2->terminate_instances( InstanceId => $instance_id,);

my $reservations = $ec2->describe_instances() || [];

foreach my $res (@$reservations) { foreach my $instance ($res->instances_set()) { my $state = $instance->{instance_state}{name}; # ... utilizzare $state... }}

RackSpace

require Net::RackSpace::CloudServers;my $cs = Net::RackSpace::CloudServers->new( user => 'myusername', key => 'mysecretkey', location => 'UK',);

require Net::RackSpace::CloudServers;my $cs = Net::RackSpace::CloudServers->new( user => 'YOUR-CS-USERNAME', key => 'YOUR-CS-SECRETKEY', location => 'UK',);

require Net::RackSpace::CloudServers;my $cs = Net::RackSpace::CloudServers->new( user => 'YOUR-CS-USERNAME', key => 'YOUR-CS-SECRETKEY', location => 'UK',);

my $server = Net::RackSpace::CloudServers::Server->new( cloudservers => $cs, # N::R::CloudServers instance name => 'my-instance', imageid => 4, # Debian 5.0 (lenny) flavorid => 1, # basic server, 256 MB RAM);

Image Instance

Type

Image

Flavor

Server

Ancora niente

my $real_server = $server->create_server();my $root_pass = $real_server->adminpass();

Ora sì

my $id = $real_server->id();

RUNNING_CHECK:while ('necessary') { my $instance = $cs->get_server($id); say 'completion status: ', $server->progress(); if ($server->status eq 'ACTIVE') { say 'active, IP: ', $instance->public_address()->[0]; last RUNNING_CHECK; } sleep 1;}

my $id = $real_server->id();

RUNNING_CHECK:while ('necessary') { my $instance = $cs->get_server($id); say 'completion status: ', $server->progress(); if ($server->status eq 'ACTIVE') { say 'active, IP: ', $instance->public_address()->[0]; last RUNNING_CHECK; } sleep 1;}

Ora?SSH con $root_pass

O anche...

Sì... root passwordvia email

my $server = Net::RackSpace::CloudServers::Server->new( cloudservers => $cs, # N::R::CloudServers instance name => 'my-instance', imageid => 4, # Debian 5.0 (lenny) flavorid => 1, # basic server, 256 MB RAM personality => [ { path => '/root/.ssh/authorized_keys2', contents => <<END_OF_BASE64SUlKckNyZWIxcU5NcGxuS1BIaFBBdFIxL2RMUVJ6SnNzSnNxTWUwRENlbXp5NlVMZ0g3Uy9seWZU...anExQWhSaE1zK0FHaDZDL01aV1N4QStZNmhqd2wwMFozSVl1R3AgaW1wb3J0ZWQtb3BlbnNzaC1rZXkK

END_OF_BASE64 }, ],);

Chiave SSH

$real_server->delete();

Adieu

46

Recommended