EC2でCloudFront署名付きURL発行用PHPを実行しようとして躓いた話

### 【やりたいこと】
CloudFront署名付きURLを発行したい

参考：[【初心者向け】CloudFrontで署名付きURLを発行する【やってみた】](https://dev.classmethod.jp/articles/sap-exam-study-2/)

### 【環境】
AmazonLinux2のEC2インスタンスを作成して、PHPをインストール

参考：[AWS EC2上にPHPサイトを立ち上げて、独自ドメインでアクセスできるようにするまでの全手順](https://qiita.com/harufuji/items/4fcd8f991fab5ad3354a)

### 【やったこと】

Composerをインストール
参考：[AWS SDK for PHPバージョン 3 のインストール](https://docs.aws.amazon.com/ja_jp/sdk-for-php/v3/developer-guide/getting-started_installation.html)

署名付きURL作成用の「test.php」は
[【初心者向け】CloudFrontで署名付きURLを発行する【やってみた】](https://dev.classmethod.jp/articles/sap-exam-study-2/)
のphpファイルを元に作成しています。

```
# cd /usr/local/bin
# curl -s https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...

Composer (version 2.0.9) successfully installed to: /usr/local/bin/composer.phar
Use it: php composer.phar

# ll
total 2164
-rwxr-xr-x 1 root root 2205196 Feb 18 16:33 composer.phar
-rwxrwxrwx 1 root root      31 Feb 18 16:28 test.php

# ./composer.phar require aws/aws-sdk-php
Using version ^2.8 for aws/aws-sdk-php
./composer.json has been created
Running composer update aws/aws-sdk-php
Loading composer repositories with package information
Updating dependencies
Lock file operations: 3 installs, 0 updates, 0 removals
  - Locking aws/aws-sdk-php (2.8.31)
  - Locking guzzle/guzzle (v3.9.3)
  - Locking symfony/event-dispatcher (v2.8.52)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
  - Downloading symfony/event-dispatcher (v2.8.52)
  - Downloading guzzle/guzzle (v3.9.3)
  - Downloading aws/aws-sdk-php (2.8.31)
  - Installing symfony/event-dispatcher (v2.8.52): Extracting archive
  - Installing guzzle/guzzle (v3.9.3): Extracting archive
  - Installing aws/aws-sdk-php (2.8.31): Extracting archive
7 package suggestions were added by new dependencies, use `composer suggest` to see details.
Package guzzle/guzzle is abandoned, you should avoid using it. Use guzzlehttp/guzzle instead.
Generating autoload files
```

### 【躓いたこと】

エラーメッセージ

```
# php test.php
PHP Fatal error:  Class 'Aws\Sdk' not found in /usr/local/bin/test.php on line 22

# ls ./vendor/aws/aws-sdk-php/src/Sdk.php
ls: cannot access ./vendor/aws/aws-sdk-php/src/Sdk.php: No such file or directory
```

「Aws¥Sdk」クラスがないらしい

（原因を探すこと半日……）

ここに正解があった
[バージョン 2 からのアップグレードAWS SDK for PHP](https://docs.aws.amazon.com/ja_jp/sdk-for-php/v3/developer-guide/getting-started_migration.html)
>SDK バージョン 3 から
>主な相違点:
>    Aws\Common\Aws ではなく Aws\Sdk クラスを使用します。

よく見たらAWS SDK for PHP 2がインストールされてますね……。
>  Installing aws/aws-sdk-php (2.8.31): Extracting archive

### 【解決方法】
AWS SDK for PHP 3をインストールしたい。

[AWS SDK for PHPバージョン 3 の要件と推奨事項](https://docs.aws.amazon.com/ja_jp/sdk-for-php/v3/developer-guide/getting-started_requirements.html)

>PHP 拡張機能AWS SDK for PHPを有効にした PHP バージョン 5.5.0 以降を使用する必要があります。

```
# php -v
PHP 5.4.16 (cli) (built: Oct 31 2019 18:34:05)
```
AmazonLinux2に入っているPHPは5.4なので、バージョンアップをしなければならない

参考：[Amazon Linux 2でPHP7.2をインストールする](https://qiita.com/owlbeck/items/20f3e5402cb782f6291e)

```
# yum remove php php-*

# amazon-linux-extras install php7.2
# yum install php php-mbstring
```

AWS SDK for PHP 2を消して3をインストール

```
# rm -rf ./vendor
# vi composer.json
# cat composer.json
{
    "require": {
        "aws/aws-sdk-php": "3.*"
   }
}

# php composer.phar install
# php composer.phar update

# ls ./vendor/aws/aws-sdk-php/src/Sdk.php
./vendor/aws/aws-sdk-php/src/Sdk.php

# php test.php
https://xxxxxx.cloudfront.net/index.html?Expires=xxxxxxxxxxxxxxxxxxxx
```

動いた！！