51
Nubilus Perl Librerie Perl in the cloud

Nubilus Perl

Embed Size (px)

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

Page 1: Nubilus Perl

Nubilus PerlLibrerie Perl in the cloud

Page 2: Nubilus Perl

IaaS - PaaS - SaaS

2

Page 3: Nubilus Perl

IaaS - PaaS - SaaS2

Page 4: Nubilus Perl

Amazon

Page 5: Nubilus Perl

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

Page 6: Nubilus Perl

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

Page 7: Nubilus Perl
Page 8: Nubilus Perl

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

Page 9: Nubilus Perl

Instance

Page 10: Nubilus Perl

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

Page 11: Nubilus Perl

Instance

Page 12: Nubilus Perl

Image Instance

Page 13: Nubilus Perl

#!/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

Page 14: Nubilus Perl

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

Page 15: Nubilus Perl

#!/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

Page 16: Nubilus Perl

Image Instance

Type

Page 17: Nubilus Perl

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

Page 18: Nubilus Perl
Page 19: Nubilus Perl

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;}

Page 20: Nubilus Perl

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;}

Page 21: Nubilus Perl

Ora?

Page 22: Nubilus Perl

Beh... PRIMA...

Page 23: Nubilus Perl
Page 24: Nubilus Perl
Page 25: Nubilus Perl

Sì, SSH

Page 26: Nubilus Perl

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,);

Page 27: Nubilus Perl

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

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

Page 28: Nubilus Perl

RackSpace

Page 29: Nubilus Perl

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

Page 30: Nubilus Perl

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

Page 31: Nubilus Perl
Page 32: Nubilus Perl

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

Page 33: Nubilus Perl
Page 34: Nubilus Perl

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);

Page 35: Nubilus Perl

Image Instance

Type

Page 36: Nubilus Perl

Image

Flavor

Server

Page 37: Nubilus Perl

Ancora niente

Page 38: Nubilus Perl

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

Page 39: Nubilus Perl

Ora sì

Page 40: Nubilus Perl
Page 41: Nubilus Perl

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;}

Page 42: Nubilus Perl

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;}

Page 43: Nubilus Perl

Ora?SSH con $root_pass

Page 44: Nubilus Perl

O anche...

Page 45: Nubilus Perl
Page 46: Nubilus Perl

Sì... root passwordvia email

Page 47: Nubilus Perl

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 }, ],);

Page 48: Nubilus Perl

Chiave SSH

Page 49: Nubilus Perl

$real_server->delete();

Page 50: Nubilus Perl

Adieu

Page 51: Nubilus Perl

46