• Czas czytania ~3 min
  • 10.09.2022

AWS ma pakiety SDK dla prawie wszystkich popularnych języków, w tym PHP. Te SDK zachowują się bardzo podobnie, używając tych samych wywołań API i parametrów.

Ogólnie SDK wykonują dobrą robotę, wykorzystując mocne strony każdego języka.

Zobaczmy, jak korzystać z pakietu PHP SDK — to prostsze, niż mogłoby się wydawać!

Konfigurowanie poświadczeń

Wszystkie pakiety AWS SDK wykonują wywołania API przeciwko AWS. Aby to zrobić, potrzebujesz poświadczeń uprawnień z poprawną konfiguracją dostępu, aby wysyłać żądania wywołań interfejsu API (role i zasady uprawnień).

Zakładając, że masz uprawnienia do uruchamiania Wywołania API, których potrzebujesz, wszystkie pakiety SDK wykonują niezłą robotę, wykrywając różne sposoby przekazywania poświadczeń do SDK.

Możesz zobaczyć listę sposobów do pobierz pakiet SDK, aby odczytać swoje dane uwierzytelniające tutaj. Nie martw się, jeśli nie wszystkie mają sens.

Oto sedno:

  1. You can set environment variables
  2. You can have your ~/.aws/credentials file
  3. Your environment (EC2 server, CodeBuild environment, Lambda function, ECS environment) can "assume" a role (more advanced)

Istnieją inne, jeszcze bardziej zaawansowane sposoby konfigurowania danych uwierzytelniających, ale są to najczęstsze.

Zazwyczaj to robię jedno z poniższych:

  1. Setting up environment variables (via Laravel's .env file)
  2. Allow the SDK to read the ~/.aws.credentials file, usually done for local development

Jeśli ustawisz określone zmienne środowiskowe, SDK zrobi wszystko za Ciebie. Jeśli nie masz ustawionych zmiennych środowiskowych, pakiet SDK automatycznie wyszuka Twój plik ~/.aws/credentials.

Oto co wygląda na to, aby utworzyć nowy obiekt Ec2Client:

use Aws\Ec2\Ec2Client;
 
$ec2 = new Ec2Client([
    // Region is required if not set by an env var
    'region' => 'us-east-2',
 
    // API version
    'version' => 'latest',
 
    // Use a profile from ~/.aws/credentials
    // 'profile' => 'your-profile-here'
]);

Wykonywanie poleceń

Każdy język ma własną dokumentację referencyjną API. Dokumentacja PHP jest tutaj.

Zobaczymy przykład użycia interfejsu API Amazon EC2 do utworzenia serwera. Używa RunInstances< /code> (liczba mnoga!) Wywołanie API.

Oto, jak wygląda tworzenie serwera EC2:

// $result: ['Location' => 'us-east-2']
$result = $ec2->runInstances([
 
    // ImageId: https://cloud-images.ubuntu.com/locator/ec2/
    'ImageId' => 'ami-0b29b6e62f2343b46',
    'InstanceType' => 't3.small',
 
    // Optional parameters you likely want to define
    // 'KeyName' => "some-key",
    // 'SecurityGroupIds' => ['sg-foobar'],
    // 'SubnetId' => 'subnet-foobar',
 
    'MaxCount' => 1, // You can create multiple servers
    'MinCount' => 1, // but we'll just create one
 
    // Create the root disk volume
    'BlockDeviceMappings' => [
        // Can usually assume this is the correct
        // root device name
        'DeviceName' => '/dev/sda1',
        'Ebs' => [
            'DeleteOnTermination' => true,
            'VolumeSize' => 8,
            'VolumeType' => 'gp3',
        ],
    ],
]);

Kelnerzy

Jedną z pomijanych funkcji SDK są „kelnerzy”, które pozwalają czekać, aż zasób osiągnie określony stan.

To jest przydatne, aby ominąć czasy, w których piszesz takie rzeczy, jak:

while(/* server is not yet running */) {
    // Check if server is running
}

Zaufaj mi, w końcu napiszesz taki kod, gdy będziesz kodować w AWS.

Kelnerzy nie zawsze są dobrze udokumentowani, w zależności od pakietu SDK. PHP są na szczęście dobrze udokumentowane. Na przykład na stronie EC2 możemy przewinąć w dół, aby zobaczyć dostępni kelnerzy.

Skorzystamy z kelnera InstanceRunning. Zauważ, że mówi nam, że kelner używa operacji API DescribeInstances. Oznacza to, że parametry, które mu przekazujemy, są tymi, które są używane w tym wywołaniu API.

Zobaczmy, jak to wygląda:

To będzie czekać maksymalnie 30 sekund, aż instancja osiągnie stan „uruchomiony”. To 3 próby z 10 sekundami między każdą próbą.

$result = $ec2->runInstances([/* ... */]);
 
// We only created one instance, so we can assume
// the zeroeth array index
$instanceId = $result['Instances'][0]['InstanceId'];
 
$ec2->waitUntil('InstanceRunning', [
   // Can pass an array of instance ID's
   // We only have 1 instance
   'InstanceIds'  => [$instanceId],
   '@waiter' => [
       'delay'       => 3, // Wait 3 seconds between polling
       'maxAttempts' => 10, // Max attempts before failing, total of 30 seconds waited here
   ]
]);

Jeśli nie osiągnie tego stanu, zostanie zgłoszony wyjątek limitu czasu.

Więcej przykładów

Jeśli interesuje Cię więcej przykładów, to repozytorium zawiera przykłady AWS SDK w kilku popularnych językach!

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297