• Час читання ~3 хв
  • 10.09.2022

AWS має SDK майже для всіх популярних мов, включаючи PHP. Ці SDK поводяться дуже подібно, використовуючи однакові виклики API та параметри.

Загалом, SDK чудово використовують переваги кожної мови.

Давайте подивимося, як використовувати PHP SDK - це простіше, ніж ви думаєте!

Налаштування облікових даних

Усі пакети SDK AWS здійснюють виклики API проти AWS. Для цього вам потрібні облікові дані IAM із правильним налаштуванням доступу, щоб надсилати запити на виклики API (ролі та політики IAM).

Якщо у вас є дозволи для запуску Виклики API, які вам потрібні, усі SDK чудово виявляють різні способи передачі облікових даних до SDK.

Ви можете переглянути список способів до отримайте SDK для читання ваших облікових даних тут. Не хвилюйтеся, якщо вони не всі мають сенс.

Ось суть:

  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)

Існують інші, але більш просунуті способи налаштування облікових даних, але ці найпоширеніші.

Зазвичай я так роблю одне з наступного:

  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

Якщо ви встановите певні змінні середовища, SDK зробить усе за вас. Якщо у вас не встановлено змінні середовища, SDK автоматично шукатиме ваш файл ~/.aws/credentials.

Ось що схоже на створення нового об’єкта 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'
]);

Створення команд

Кожна мова має власну довідкову документацію API. документи PHP тут.

Ми побачимо приклад використання API Amazon EC2 для створення сервера. Для цього використовується RunInstances< /code> (множина!) Виклик API.

Ось як виглядає створення сервера 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',
        ],
    ],
]);

Офіціанти

Однією з функцій SDK, про які не звертають уваги, є «очікувачі», які дозволяють чекати, поки ресурс досягне певного стану.

Це корисно, щоб подолати моменти, коли ви опиняєтеся, пишучи такі речі, як:

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

Повірте мені, ви закінчите писати такий код, коли кодуєте на AWS.

Офіціанти не завжди добре задокументовані, залежно від SDK. PHP, на щастя, добре задокументований. Наприклад, на сторінці EC2 ми можемо прокрутити вниз, щоб побачити доступні Waiters.

Ми будемо використовувати InstanceRunning waiter. Зауважте, що це повідомляє нам, що цей офіціант використовує операцію API DescribeInstances. Це означає, що параметри, які ми йому передаємо, використовуються для виклику API.

Подивимося, як це виглядає:

Екземпляр перейде в «запущений» стан щонайбільше 30 секунд. Це 3 спроби з 10 секундами між спробами.

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

Якщо він не досягає цього стану, створюється виняток часу очікування.

Більше прикладів

Якщо вас цікавить більше прикладів, у цьому сховищі є приклади AWS SDK кількома популярними мовами!

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

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...

Про автора CrazyBoy49z
WORK EXPERIENCE
Контакти
Ukraine, Lutsk
+380979856297