Amazon S3
 Perl Web Client
?
http://aws.amazon.com/s3/
Repository   Repository   Repository




         Amazon S3



             Client
Repository   Repository   Repository




?            Amazon S3



                 Client
$
Repository   Repository   Repository




         Amazon S3



             Client
Repository   Repository   Repository




         Amazon S3

                   HTTP

             Client
Repository   Repository   Repository




         Amazon S3

                   HTTP

             Client
Repository   Repository   Repository




         Amazon S3

                   HTTP

             Client
Oggetto/File
Chiave => Valore
1 byte - 5 Gbyte
1 byte - 5 Gbyte
1 byte - 5 Gbyte
1 byte - 5 Gbyte

Non in scala!
Quanti ne volete
Bucket
Fino a 100
Nome Univoco
Net::Amazon::S3
->new()
use Net::Amazon::S3;
my $s3 = Net::Amazon::S3->new({
   aws_access_key_id => 'chiave-aws',
   aws_secret_access_ke...
->new()
use Net::Amazon::S3;
my $s3 = Net::Amazon::S3->new({
      aws_access_key_id => 'chiave-aws',
      aws_secret_acc...
->new()
use Net::Amazon::S3;
my $s3 = Net::Amazon::S3->new({
      aws_access_key_id => 'chiave-aws',
      aws_secret_acc...
retry
retry
secure
retry
secure
timeout
->buckets()
my $buckets = $s3->buckets();
my $owner =
   $buckets->{owner_displayname};
my $owner_id =
   $buckets->{owner...
->buckets()
my $aref = $buckets->{buckets};
for my $bucket (@$aref) {
    my $nome = $bucket->bucket();
    my $data = $bu...
->add_bucket()

my $bucket = $s3->add_bucket({
      bucket => ’foto-pippo’,
      acl_short => ’public-read’,
      # loc...
->add_bucket()

my $bucket = $s3->add_bucket({
      bucket => ’foto-pippo’,
      acl_short => ’public-read’,
      # loc...
->add_bucket()

my $bucket = $s3->add_bucket({
      bucket => ’foto-pippo’,
      acl_short => ’public-read’,
      # loc...
->add_bucket()

my $bucket = $s3->add_bucket({
      bucket => ’foto-pippo’,
      acl_short => ’public-read’,
      # loc...
Dice il Saggio:
“No Lettere Maiuscole!”
acl_short?
public-read
private

public-read
private
authenticated-read
    public-read
private
authenticated-read
    public-read
 public-read-write
Eliminazione
Eliminazione

$s3->delete_bucket(
   {bucket => ’buttami-via’});
Eliminazione

$s3->delete_bucket(
   {bucket => ’buttami-via’});
$s3->delete_bucket($bucket);
Eliminazione

$s3->delete_bucket(
   {bucket => ’buttami-via’});
$s3->delete_bucket($bucket);
$bucket->delete_bucket();
Ricordate: 100 bucket!
Chiavi
list_bucket()

my $risultato = $s3->list_bucket({
      bucket => ’photo’,
});
Limiti
list_bucket()
my $risultato = $s3->list_bucket({
      bucket => ’photo’,
      max_keys => 100,
      prefix => ’immagini...
list_bucket()
my $risultato = $s3->list_bucket({
      bucket => ’photo’,
      max_keys => 100,
      prefix => ’immagini...
list_bucket()
my $risultato = $s3->list_bucket({
      bucket => ’photo’,
      max_keys => 100,
      prefix => ’immagini...
prefix
immagini/vacanze/IMG_0001.JPG
immagini/vacanze/IMG_0002.JGP
immagini/vacanze/IMG_0003.JGP
immagini/tizio.jpg
immagi...
list_bucket()
my $risultato = $s3->list_bucket({
      bucket => ’photo’,
      max_keys => 100,
      prefix => ’immagini...
prefix +
     delimiter
immagini/vacanze/IMG_0001.JPG
immagini/vacanze/IMG_0002.JGP
immagini/vacanze/IMG_0003.JGP
immagini...
risultato

immagini/vacanze
immagini/tizio.jpg
immagini/caio.png
risultato
                      prefisso
                     “comune”!
immagini/vacanze
immagini/tizio.jpg
immagini/caio.p...
marker
lista di una “directory”

my %ricerca = (
     bucket   => ’photo’,
     prefix   => ’immagini/’,
     delimiter => ’/’,
);
lista di una “directory”
while (1) {
    my $risultato = $s3->list_bucket(%ricerca)
       or die ’errore’;
    say "dir :...
lista di una “directory”
while (1) {
    my $risultato = $s3->list_bucket(%ricerca)
       or die ’errore’;
    say "dir :...
lista di una “directory”
while (1) {
    my $risultato = $s3->list_bucket(%ricerca)
      or die ’errore’;
    say "dir : ...
lista di una “directory”
while (1) {
    my $risultato = $s3->list_bucket(%ricerca)
       or die ’errore’;
    say "dir :...
lista di una “directory”
while (1) {
    my $risultato = $s3->list_bucket(%ricerca)
       or die ’errore’;
    say "dir :...
lista di una “directory”
while (1) {
    my $risultato = $s3->list_bucket(%ricerca)
       or die ’errore’;
    say "dir :...
Perl, baby
lista di una “directory”
my $risultato = $s3->list_bucket_all({
   bucket   => ’photo’,
   prefix   => ’immagini/’,
   del...
Oggetti, finalmente!
Aggiunta

my $bucket =
   $s3->bucket(’bucket-lavoro’);
$bucket->add_key(’un/file/allegro‘
   => "Ciao a tutti!n");
Aggiunta
$bucket->add_key(chiave => ‘valore!’,
   {
         content_type => ’text/plain’,
         acl_short => ’public-r...
Aggiunta

$bucket->add_key_filename(
    ‘mio/file.txt’,
    ‘/path/to/file.txt’,
)
Download

my $bucket =
   $s3->bucket(’il-mio-bucket’);
my $dati =
   $bucket->get_key(’un/file/allegro’);
Download

my $bucket =
   $s3->bucket(’il-mio-bucket’);
my $dati =
   $bucket->get_key(’un/file/allegro’);
Download
$dati = {
     content_type => ‘text/plain’,
     etag => ‘44b6...f367’,
     content => “Ciao a tutti!n”,
     #...
Download

my $bucket =
   $s3->bucket(’il-mio-bucket’);
my $dati =
   $bucket->get_key_filename(
      ’un/file/allegro’, ...
Download
per eccellenza
public_read
public_read_write
http://
bucket.s3.amazonaws.com/
          chiave
http://
polettix.s3.amazonaws.com/
       tmp/pwc.tar.gz
Net::Amazon::S3::ACL
Attori
Attori

• proprietario
Attori

• proprietario
• altro utente Amazon S3
Attori

• proprietario
• altro utente Amazon S3
• tutti gli utenti Amazon S3
Attori

• proprietario
• altro utente Amazon S3
• tutti gli utenti Amazon S3
• tutti
Diritti
Diritti

• lettura
Diritti

• lettura
• scrittura
Diritti

• lettura
• scrittura
• lettura ACP
Diritti

• lettura
• scrittura
• lettura ACP
• scrittura ACP
Diritti

• lettura
• scrittura
• lettura ACP
• scrittura ACP
• controllo completo
N::A::S::ACL
use Net::Amazon::S3::ACL;
my $acl =
   Net::Amazon::S3::ACL->new();
my $acl_xml =
   $bucket->get_acl(’etc/pa...
->add()

$acl->add(
     ’foo@example.com’ => ’WRITE’,
     ALL              => ’READ’,
     ’dfadffadf...‘   => ’*’,
);
set_acl()

$bucket->set_acl({
      key    => $chiave,
      acl_xml => $acl->stringify(),
});
Upload da esterni
Net::Amazon::S3::Policy
F M
Net::Amazon::S3::Policy
       T
    R
F M
Net::Amazon::S3::Policy
       T
    R
         Friendly
?
!
Amazon S3 in Perl
Amazon S3 in Perl
Amazon S3 in Perl
Upcoming SlideShare
Loading in …5
×

Amazon S3 in Perl

1,509
-1

Published on

Usare Amazon S3 in Perl può essere più semplice di quanto pensiate.

Published in: Technology
2 Comments
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
1,509
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
15
Comments
2
Likes
2
Embeds 0
No embeds

No notes for slide
  • Amazon S3 in Perl

    1. 1. Amazon S3 Perl Web Client
    2. 2. ?
    3. 3. http://aws.amazon.com/s3/
    4. 4. Repository Repository Repository Amazon S3 Client
    5. 5. Repository Repository Repository ? Amazon S3 Client
    6. 6. $
    7. 7. Repository Repository Repository Amazon S3 Client
    8. 8. Repository Repository Repository Amazon S3 HTTP Client
    9. 9. Repository Repository Repository Amazon S3 HTTP Client
    10. 10. Repository Repository Repository Amazon S3 HTTP Client
    11. 11. Oggetto/File
    12. 12. Chiave => Valore
    13. 13. 1 byte - 5 Gbyte
    14. 14. 1 byte - 5 Gbyte
    15. 15. 1 byte - 5 Gbyte
    16. 16. 1 byte - 5 Gbyte Non in scala!
    17. 17. Quanti ne volete
    18. 18. Bucket
    19. 19. Fino a 100
    20. 20. Nome Univoco
    21. 21. Net::Amazon::S3
    22. 22. ->new() use Net::Amazon::S3; my $s3 = Net::Amazon::S3->new({ aws_access_key_id => 'chiave-aws', aws_secret_access_key => 'shhhh!', retry => 1, });
    23. 23. ->new() use Net::Amazon::S3; my $s3 = Net::Amazon::S3->new({ aws_access_key_id => 'chiave-aws', aws_secret_access_key => 'shhhh!', retry => 1, });
    24. 24. ->new() use Net::Amazon::S3; my $s3 = Net::Amazon::S3->new({ aws_access_key_id => 'chiave-aws', aws_secret_access_key => 'shhhh!', retry => 1, }); http://aws.amazon.com/s3/
    25. 25. retry
    26. 26. retry secure
    27. 27. retry secure timeout
    28. 28. ->buckets() my $buckets = $s3->buckets(); my $owner = $buckets->{owner_displayname}; my $owner_id = $buckets->{owner_id}; say "Bucket di $proprietario ", "($owner_id):";
    29. 29. ->buckets() my $aref = $buckets->{buckets}; for my $bucket (@$aref) { my $nome = $bucket->bucket(); my $data = $bucket->creation_date(); say "t$nome, creato il $data"; }
    30. 30. ->add_bucket() my $bucket = $s3->add_bucket({ bucket => ’foto-pippo’, acl_short => ’public-read’, # location_constraint => ’EU’, });
    31. 31. ->add_bucket() my $bucket = $s3->add_bucket({ bucket => ’foto-pippo’, acl_short => ’public-read’, # location_constraint => ’EU’, });
    32. 32. ->add_bucket() my $bucket = $s3->add_bucket({ bucket => ’foto-pippo’, acl_short => ’public-read’, # location_constraint => ’EU’, });
    33. 33. ->add_bucket() my $bucket = $s3->add_bucket({ bucket => ’foto-pippo’, acl_short => ’public-read’, # location_constraint => ’EU’, });
    34. 34. Dice il Saggio:
    35. 35. “No Lettere Maiuscole!”
    36. 36. acl_short?
    37. 37. public-read
    38. 38. private public-read
    39. 39. private authenticated-read public-read
    40. 40. private authenticated-read public-read public-read-write
    41. 41. Eliminazione
    42. 42. Eliminazione $s3->delete_bucket( {bucket => ’buttami-via’});
    43. 43. Eliminazione $s3->delete_bucket( {bucket => ’buttami-via’}); $s3->delete_bucket($bucket);
    44. 44. Eliminazione $s3->delete_bucket( {bucket => ’buttami-via’}); $s3->delete_bucket($bucket); $bucket->delete_bucket();
    45. 45. Ricordate: 100 bucket!
    46. 46. Chiavi
    47. 47. list_bucket() my $risultato = $s3->list_bucket({ bucket => ’photo’, });
    48. 48. Limiti
    49. 49. list_bucket() my $risultato = $s3->list_bucket({ bucket => ’photo’, max_keys => 100, prefix => ’immagini/’, delimiter => ’/’, });
    50. 50. list_bucket() my $risultato = $s3->list_bucket({ bucket => ’photo’, max_keys => 100, prefix => ’immagini/’, delimiter => ’/’, });
    51. 51. list_bucket() my $risultato = $s3->list_bucket({ bucket => ’photo’, max_keys => 100, prefix => ’immagini/’, delimiter => ’/’, });
    52. 52. prefix immagini/vacanze/IMG_0001.JPG immagini/vacanze/IMG_0002.JGP immagini/vacanze/IMG_0003.JGP immagini/tizio.jpg immagini/caio.png lavoro/boh.pdf
    53. 53. list_bucket() my $risultato = $s3->list_bucket({ bucket => ’photo’, max_keys => 100, prefix => ’immagini/’, delimiter => ’/’, });
    54. 54. prefix + delimiter immagini/vacanze/IMG_0001.JPG immagini/vacanze/IMG_0002.JGP immagini/vacanze/IMG_0003.JGP immagini/tizio.jpg immagini/caio.png lavoro/boh.pdf
    55. 55. risultato immagini/vacanze immagini/tizio.jpg immagini/caio.png
    56. 56. risultato prefisso “comune”! immagini/vacanze immagini/tizio.jpg immagini/caio.png
    57. 57. marker
    58. 58. lista di una “directory” my %ricerca = ( bucket => ’photo’, prefix => ’immagini/’, delimiter => ’/’, );
    59. 59. lista di una “directory” while (1) { my $risultato = $s3->list_bucket(%ricerca) or die ’errore’; say "dir : $_" for @{ $risultato->{common_prefixes} }; say "file: $_->{key}" for @{ $risultato->{keys} }; last unless $risultato->{is_truncated}; $impostazioni_ricerca{marker} = $risultato->{next_marker}; }
    60. 60. lista di una “directory” while (1) { my $risultato = $s3->list_bucket(%ricerca) or die ’errore’; say "dir : $_" for @{ $risultato->{common_prefixes} }; say "file: $_->{key}" for @{ $risultato->{keys} }; last unless $risultato->{is_truncated}; $impostazioni_ricerca{marker} = $risultato->{next_marker}; }
    61. 61. lista di una “directory” while (1) { my $risultato = $s3->list_bucket(%ricerca) or die ’errore’; say "dir : $_" for @{ $risultato->{common_prefixes} }; say "file: $_->{key}" for @{ $risultato->{keys} }; last unless $risultato->{is_truncated}; $impostazioni_ricerca{marker} = $risultato->{next_marker}; }
    62. 62. lista di una “directory” while (1) { my $risultato = $s3->list_bucket(%ricerca) or die ’errore’; say "dir : $_" for @{ $risultato->{common_prefixes} }; say "file: $_->{key}" for @{ $risultato->{keys} }; last unless $risultato->{is_truncated}; $impostazioni_ricerca{marker} = $risultato->{next_marker}; }
    63. 63. lista di una “directory” while (1) { my $risultato = $s3->list_bucket(%ricerca) or die ’errore’; say "dir : $_" for @{ $risultato->{common_prefixes} }; say "file: $_->{key}" for @{ $risultato->{keys} }; last unless $risultato->{is_truncated}; $impostazioni_ricerca{marker} = $risultato->{next_marker}; }
    64. 64. lista di una “directory” while (1) { my $risultato = $s3->list_bucket(%ricerca) or die ’errore’; say "dir : $_" for @{ $risultato->{common_prefixes} }; say "file: $_->{key}" for @{ $risultato->{keys} }; last unless $risultato->{is_truncated}; $impostazioni_ricerca{marker} = $risultato->{next_marker}; }
    65. 65. Perl, baby
    66. 66. lista di una “directory” my $risultato = $s3->list_bucket_all({ bucket => ’photo’, prefix => ’immagini/’, delimiter => ’/’, }); say "dir : $_" for @{ $risultato->{common_prefixes} }; say "file: $_->{key}" for @{ $risultato->{keys} };
    67. 67. Oggetti, finalmente!
    68. 68. Aggiunta my $bucket = $s3->bucket(’bucket-lavoro’); $bucket->add_key(’un/file/allegro‘ => "Ciao a tutti!n");
    69. 69. Aggiunta $bucket->add_key(chiave => ‘valore!’, { content_type => ’text/plain’, acl_short => ’public-read’, ’x-amz-meta-info’ => ’baz!!!’, } );
    70. 70. Aggiunta $bucket->add_key_filename( ‘mio/file.txt’, ‘/path/to/file.txt’, )
    71. 71. Download my $bucket = $s3->bucket(’il-mio-bucket’); my $dati = $bucket->get_key(’un/file/allegro’);
    72. 72. Download my $bucket = $s3->bucket(’il-mio-bucket’); my $dati = $bucket->get_key(’un/file/allegro’);
    73. 73. Download $dati = { content_type => ‘text/plain’, etag => ‘44b6...f367’, content => “Ciao a tutti!n”, # ... };
    74. 74. Download my $bucket = $s3->bucket(’il-mio-bucket’); my $dati = $bucket->get_key_filename( ’un/file/allegro’, undef, ‘/salvalo/qui’);
    75. 75. Download per eccellenza
    76. 76. public_read public_read_write
    77. 77. http:// bucket.s3.amazonaws.com/ chiave
    78. 78. http:// polettix.s3.amazonaws.com/ tmp/pwc.tar.gz
    79. 79. Net::Amazon::S3::ACL
    80. 80. Attori
    81. 81. Attori • proprietario
    82. 82. Attori • proprietario • altro utente Amazon S3
    83. 83. Attori • proprietario • altro utente Amazon S3 • tutti gli utenti Amazon S3
    84. 84. Attori • proprietario • altro utente Amazon S3 • tutti gli utenti Amazon S3 • tutti
    85. 85. Diritti
    86. 86. Diritti • lettura
    87. 87. Diritti • lettura • scrittura
    88. 88. Diritti • lettura • scrittura • lettura ACP
    89. 89. Diritti • lettura • scrittura • lettura ACP • scrittura ACP
    90. 90. Diritti • lettura • scrittura • lettura ACP • scrittura ACP • controllo completo
    91. 91. N::A::S::ACL use Net::Amazon::S3::ACL; my $acl = Net::Amazon::S3::ACL->new(); my $acl_xml = $bucket->get_acl(’etc/passwd’); $acl->parse($acl_xml); say $acl->stringify(); # XML say $acl->dump(); # YAML, se presente
    92. 92. ->add() $acl->add( ’foo@example.com’ => ’WRITE’, ALL => ’READ’, ’dfadffadf...‘ => ’*’, );
    93. 93. set_acl() $bucket->set_acl({ key => $chiave, acl_xml => $acl->stringify(), });
    94. 94. Upload da esterni
    95. 95. Net::Amazon::S3::Policy
    96. 96. F M Net::Amazon::S3::Policy T R
    97. 97. F M Net::Amazon::S3::Policy T R Friendly
    98. 98. ?
    99. 99. !
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×