У AWS есть SDK почти для всех популярных языков, включая PHP. Эти SDK ведут себя очень похоже, используя одни и те же вызовы API и параметры.
Как правило, SDK хорошо используют сильные стороны каждого языка.
Давайте посмотрим, как использовать PHP SDK — это проще, чем вы думаете!
Настройка учетных данных
Все AWS SDK выполняют вызовы API для AWS. Для этого вам потребуются учетные данные IAM с правильной настройкой доступа, чтобы выполнять запросы вызовов API (роли и политики IAM).
Предполагается, что у вас есть разрешения на запуск Вызовы API, которые вам нужны, все SDK отлично справляются с обнаружением различных способов передачи учетных данных в SDK.
Вы можете увидеть список способов до получите SDK для чтения ваших учетных данных здесь. Не волнуйтесь, если они не все имеют смысл.
Вот суть:
- You can set environment variables
- You can have your
~/.aws/credentials
file - Your environment (EC2 server, CodeBuild environment, Lambda function, ECS environment) can "assume" a role (more advanced)
Есть и другие, еще более продвинутые способы настройки учетных данных, но эти являются наиболее распространенными.
Обычно я так и делаю одно из следующих:
- Setting up environment variables (via Laravel's
.env
file) - 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 находится здесь.
Мы рассмотрим пример использования Amazon EC2 API для создания сервера. При этом используются 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 мы можем прокрутить страницу вниз и увидеть доступные ожидающие.
Мы будем использовать ожидание InstanceRunning
. Обратите внимание, что это говорит нам, что этот официант использует операцию API DescribeInstances
. Это означает, что параметры, которые мы передаем, используются для этого вызова API.
Давайте посмотрим, как это выглядит:
$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
]
]);
Это приведет к ожиданию не более 30 секунд, прежде чем экземпляр перейдет в состояние "работает". Это 3 попытки с 10-секундным интервалом между каждой попыткой.
Если он не достигает этого состояния, возникает исключение тайм-аута.
Еще примеры
Если вам нужны дополнительные примеры, в этом репозитории есть примеры AWS SDK для нескольких популярных языков!