

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 适用于 PHP 的 AWS SDK 版本 3 的 Amazon EC2 示例
<a name="ec2-examples"></a>

Amazon Elastic Compute Cloud (Amazon EC2) 是一项 Web 服务，可在云中提供虚拟服务器托管。该服务旨在通过提供大小可调整的计算容量来降低开发人员进行网络级云计算的难度。

适用于 PHP 的 AWS SDKGitHub[ 上提供了](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)的所有示例代码。

## 凭证
<a name="examplecredentials"></a>

运行示例代码之前，请配置您的 AWS 凭证，如 [AWS 使用 适用于 PHP 的 AWS SDK 版本 3 进行身份验证](credentials.md) 中所述。然后导入 适用于 PHP 的 AWS SDK，如 [安装 适用于 PHP 的 AWS SDK 版本 3](getting-started_installation.md) 中所述。

**Topics**
+ [凭证](#examplecredentials)
+ [管理 Amazon EC2 实例](ec2-examples-managing-instances.md)
+ [使用弹性 IP 地址](ec2-examples-using-elastic-ip-addresses.md)
+ [使用区域和可用区](ec2-examples-using-regions-and-zones.md)
+ [使用密钥对](ec2-examples-working-with-key-pairs.md)
+ [使用安全组](ec2-examples-using-security-groups.md)

# 使用 适用于 PHP 的 AWS SDK 版本 3 来管理 Amazon EC2 实例
<a name="ec2-examples-managing-instances"></a>

以下示例演示如何：
+ 使用 [DescribeInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeinstances) 描述 Amazon EC2 实例。
+ 使用 [MonitorInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#monitorinstances) 为正在运行的实例启用详细监控。
+ 使用 [UnmonitorInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#unmonitorinstances) 为正在运行的实例禁用监控。
+ 使用 [StartInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#startinstances) 启动之前停止的 Amazon EBS-backed AMI。
+ 使用 [StopInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#stopinstances) 停止由 Amazon EBS 支持的实例。
+ 使用 [RebootInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#rebootinstances) 请求重新启动一个或多个实例。

适用于 PHP 的 AWS SDKGitHub[ 上提供了](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)的所有示例代码。

## 凭证
<a name="examplecredentials"></a>

运行示例代码之前，请配置您的 AWS 凭证，如 [AWS 使用 适用于 PHP 的 AWS SDK 版本 3 进行身份验证](credentials.md) 中所述。然后导入 适用于 PHP 的 AWS SDK，如 [安装 适用于 PHP 的 AWS SDK 版本 3](getting-started_installation.md) 中所述。

## 描述实例
<a name="describe-instances"></a>

 **导入**。

```
require 'vendor/autoload.php';

use Aws\Ec2\Ec2Client;
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);
$result = $ec2Client->describeInstances();
echo "Instances: \n";
foreach ($result['Reservations'] as $reservation) {
    foreach ($reservation['Instances'] as $instance) {
        echo "InstanceId: {$instance['InstanceId']} - {$instance['State']['Name']} \n";
    }
}
```

## 启用和禁用监控
<a name="enable-and-disable-monitoring"></a>

 **导入**。

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$instanceIds = ['InstanceID1', 'InstanceID2'];

$monitorInstance = 'ON';

if ($monitorInstance == 'ON') {
    $result = $ec2Client->monitorInstances([
        'InstanceIds' => $instanceIds
    ]);
} else {
    $result = $ec2Client->unmonitorInstances([
        'InstanceIds' => $instanceIds
    ]);
}

var_dump($result);
```

## 启动和停止 实例
<a name="start-and-stop-an-instance"></a>

 **导入**。

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$action = 'START';

$instanceIds = ['InstanceID1', 'InstanceID2'];

if ($action == 'START') {
    $result = $ec2Client->startInstances([
        'InstanceIds' => $instanceIds,
    ]);
} else {
    $result = $ec2Client->stopInstances([
        'InstanceIds' => $instanceIds,
    ]);
}

var_dump($result);
```

## 重启实例
<a name="reboot-an-instance"></a>

 **导入**。

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$instanceIds = ['InstanceID1', 'InstanceID2'];

$result = $ec2Client->rebootInstances([
    'InstanceIds' => $instanceIds
]);

var_dump($result);
```

# 在 适用于 PHP 的 AWS SDK 版本 3 的 Amazon EC2 上使用弹性 IP 地址
<a name="ec2-examples-using-elastic-ip-addresses"></a>

弹性 IP 地址是专为动态云计算设计的静态 IP 地址。弹性 IP 地址与您的关联 AWS 账户。它是公有 IP 地址，可从 Internet 访问。如果您的实例没有公有 IP 地址，则可以将弹性 IP 地址与您的实例关联以启用与 Internet 的通信。

以下示例演示如何：
+ 使用描述您的一个或多个实例[DescribeInstances](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeinstances)。
+ 使用获取弹性 IP 地址[AllocateAddress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#allocateaddress)。
+ 使用将弹性 IP 地址与实例关联起来[AssociateAddress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#associateaddress)。
+ 使用释放弹性 IP 地址[ReleaseAddress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#releaseaddress)。

的所有示例代码都可以在[此 适用于 PHP 的 AWS SDK 处找到 GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 凭据
<a name="examplecredentials"></a>

在运行示例代码之前，请配置您的 AWS 证书，如中所述[AWS 使用 适用于 PHP 的 AWS SDK 版本 3 进行身份验证](credentials.md)。然后导入 适用于 PHP 的 AWS SDK，如中所述[安装 适用于 PHP 的 AWS SDK 版本 3](getting-started_installation.md)。

## 描述实例
<a name="describe-an-instance"></a>

 **导入** 

```
require 'vendor/autoload.php';

use Aws\Ec2\Ec2Client;
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);
$result = $ec2Client->describeInstances();
echo "Instances: \n";
foreach ($result['Reservations'] as $reservation) {
    foreach ($reservation['Instances'] as $instance) {
        echo "InstanceId: {$instance['InstanceId']} - {$instance['State']['Name']} \n";
    }
}
```

## 分配和关联地址
<a name="allocate-and-associate-an-address"></a>

 **导入** 

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$instanceId = 'InstanceID';

$allocation = $ec2Client->allocateAddress(array(
    'DryRun' => false,
    'Domain' => 'vpc',
));

$result = $ec2Client->associateAddress(array(
    'DryRun' => false,
    'InstanceId' => $instanceId,
    'AllocationId' => $allocation->get('AllocationId')
));

var_dump($result);
```

## 发布地址
<a name="release-an-address"></a>

 **导入** 

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$associationID = 'AssociationID';

$allocationID = 'AllocationID';

$result = $ec2Client->disassociateAddress([
    'AssociationId' => $associationID,
]);

$result = $ec2Client->releaseAddress([
    'AllocationId' => $allocationID,
]);

var_dump($result);
```

# 使用 适用于 PHP 的 AWS SDK 版本 3 来使用用于 Amazon EC2 的区域和可用区
<a name="ec2-examples-using-regions-and-zones"></a>

Amazon EC2 托管在全球多个位置。这些位置由 AWS 区域和可用区构成。每个区域都是一个独立的地理区域，其中包含多个相互隔离的位置，这些位置称为可用区。Amazon EC2 提供了将实例和数据放在多个位置的功能。

以下示例演示如何：
+ 使用 [DescribeAvailabilityZones](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeavailabilityzones) 描述可供您使用的可用区。
+ 使用 [DescribeRegions](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describeregions) 描述当前可供您使用的 AWS 区域。

适用于 PHP 的 AWS SDKGitHub[ 上提供了](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)的所有示例代码。

## 凭证
<a name="examplecredentials"></a>

运行示例代码之前，请配置您的 AWS 凭证，如 [AWS 使用 适用于 PHP 的 AWS SDK 版本 3 进行身份验证](credentials.md) 中所述。然后导入 适用于 PHP 的 AWS SDK，如 [安装 适用于 PHP 的 AWS SDK 版本 3](getting-started_installation.md) 中所述。

## 描述可用区
<a name="describe-availability-zones"></a>

 **导入**。

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$result = $ec2Client->describeAvailabilityZones();

var_dump($result);
```

## 描述区域
<a name="describe-regions"></a>

 **导入**。

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$result = $ec2Client->describeRegions();

var_dump($result);
```

# 结合使用 Amazon EC2 密钥对与 适用于 PHP 的 AWS SDK 版本 3
<a name="ec2-examples-working-with-key-pairs"></a>

Amazon EC2 使用公有密钥密码系统来加密和解密登录信息。公有密钥加密法使用公有密钥来加密数据。随后，收件人使用私有密钥解密数据。公有和私有密钥被称为密钥对。

以下示例演示如何：
+ 使用 [CreateKeyPair](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#createkeypair) 创建 2048 位 RSA 密钥对。
+ 使用 [DeleteKeyPair](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#deletekeypair) 删除指定密钥对。
+ 使用 [DescribeKeyPairs](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describekeypairs) 描述一个或多个密钥对。

适用于 PHP 的 AWS SDKGitHub[ 上提供了](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)的所有示例代码。

## 凭证
<a name="examplecredentials"></a>

运行示例代码之前，请配置您的 AWS 凭证，如 [AWS 使用 适用于 PHP 的 AWS SDK 版本 3 进行身份验证](credentials.md) 中所述。然后导入 适用于 PHP 的 AWS SDK，如 [安装 适用于 PHP 的 AWS SDK 版本 3](getting-started_installation.md) 中所述。

## 创建密钥对
<a name="create-a-key-pair"></a>

 **导入**。

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$keyPairName = 'my-keypair';

$result = $ec2Client->createKeyPair(array(
    'KeyName' => $keyPairName
));

// Save the private key
$saveKeyLocation = getenv('HOME') . "/.ssh/{$keyPairName}.pem";
file_put_contents($saveKeyLocation, $result['keyMaterial']);

// Update the key's permissions so it can be used with SSH
chmod($saveKeyLocation, 0600);
```

## 删除密钥对
<a name="delete-a-key-pair"></a>

 **导入**。

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$keyPairName = 'my-keypair';

$result = $ec2Client->deleteKeyPair(array(
    'KeyName' => $keyPairName
));

var_dump($result);
```

## 描述密钥对
<a name="describe-key-pairs"></a>

 **导入**。

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$result = $ec2Client->describeKeyPairs();

var_dump($result);
```

# 在 Amazon EC2 中结合使用安全组与 适用于 PHP 的 AWS SDK 版本 3
<a name="ec2-examples-using-security-groups"></a>

Amazon EC2 安全组起着虚拟防火墙的作用，可控制一个或多个实例的流量。为每个安全组添加规则来规定流入或流出其关联实例的流量。您可以随时修改安全组的规则。新规则将自动应用于与安全组相关联的所有实例。

以下示例演示如何：
+ 使用 [DescribeSecurityGroups](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#describesecuritygroups) 描述一个或多个安全组。
+ 使用 [AuthorizeSecurityGroupIngress](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#authorizesecuritygroupingress) 向安全组添加入口规则。
+ 使用 [CreateSecurityGroup](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#createsecuritygroup) 创建安全组。
+ 使用 [DeleteSecurityGroup](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ec2-2016-11-15.html#deletesecuritygroup) 删除安全组。

适用于 PHP 的 AWS SDKGitHub[ 上提供了](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)的所有示例代码。

## 凭证
<a name="examplecredentials"></a>

运行示例代码之前，请配置您的 AWS 凭证，如 [AWS 使用 适用于 PHP 的 AWS SDK 版本 3 进行身份验证](credentials.md) 中所述。然后导入 适用于 PHP 的 AWS SDK，如 [安装 适用于 PHP 的 AWS SDK 版本 3](getting-started_installation.md) 中所述。

## 描述安全组
<a name="describe-security-groups"></a>

 **导入**。

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$result = $ec2Client->describeSecurityGroups();

var_dump($result);
```

## 添加入口规则
<a name="add-an-ingress-rule"></a>

 **导入**。

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$result = $ec2Client->authorizeSecurityGroupIngress(array(
    'GroupName' => 'string',
    'SourceSecurityGroupName' => 'string'
));

var_dump($result);
```

## 创建安全组
<a name="create-a-security-group"></a>

 **导入**。

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

// Create the security group
$securityGroupName = 'my-security-group';
$result = $ec2Client->createSecurityGroup(array(
    'GroupId' => $securityGroupName,

));

// Get the security group ID (optional)
$securityGroupId = $result->get('GroupId');

echo "Security Group ID: " . $securityGroupId . '\n';
```

## 删除安全组
<a name="delete-a-security-group"></a>

 **导入**。

```
require 'vendor/autoload.php';
```

 **示例代码** 

```
$ec2Client = new Aws\Ec2\Ec2Client([
    'region' => 'us-west-2',
    'version' => '2016-11-15',
    'profile' => 'default'
]);

$securityGroupId = 'my-security-group-id';

$result = $ec2Client->deleteSecurityGroup([
    'GroupId' => $securityGroupId
]);

var_dump($result);
```