経緯
テスト環境を作成する為にAmazonLinux2のEC2インスタンス上にPHP7.4をインストールしました。
PHPは最低限のものだけをインストールします。
設定
EC2インスタンスの起動
作成手順は省略します。
今回はテストで使用しますので、インスタンスタイプをt2.microとしました。
PHPのインストール
SSHでEC2インスタンスに接続して下記コマンドを実行します。
# パッケージのアップデート
sudo yum update
# インストールできるトピックを確認
sudo amazon-linux-extras
# php7.4のトピックのレポジトリの有効化
sudo amazon-linux-extras enable php7.4
# メタデータ削除
yum clean metadata
# php7.4インストール
sudo amazon-linux-extras install php7.4
# インストールの確認
php -v
Composerのインストール
# composerのインストール
curl -sS https://getcomposer.org/installer | php
# pharファイルを環境PATH内に移動
sudo mv composer.phar /usr/local/bin/composer
AWS SDKのインストール
テスト用にプロジェクトフォルダを作成して、そこにAWS SDKをインストールします。
# AWS SDKのインストール
mkdir ~/App-test
cd ~/App-test
composer require aws/aws-sdk-php
composer require aws/aws-sdk-phpで下記エラーとなりました。
Problem 1
- aws/aws-sdk-php[3.198.0, ..., 3.198.4] require ext-simplexml * -> it is missing from your system. Install or enable PHP's simplexml extension.
- Root composer.json requires aws/aws-sdk-php ^3.198 -> satisfiable by aws/aws-sdk-php[3.198.0, ..., 3.198.4].
simpexmlのextensionが無いようなのでインストールします。
sudo yum install php-xml
再度実行すると成功しました。
composer require aws/aws-sdk-php
# インストール確認
aws --version
AWS CLIの初期設定
今回はIAMロールでアクセス制限するので、AccessKeyとSecretAccessKeyは未入力としました。
# AWS CLI初期設定
aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]: ap-northeast-1
Default output format [None]: json
IAMロールのアタッチ
検証用にEC2インスタンスにAmazonEC2ReadOnlyAccessのポリシーをアタッチしたロールを割り当てます。
AmazonEC2ReadOnlyAccessのポリシーを選択
[ロール名]:test-ec2-role
手順は省略しますが、作成されたロールをEC2インスタンスにアタッチします。
アタッチ後、下記コマンドを実行して、AWS CLIでEC2インスタンスの情報が取得できることを確認します。
# AWS CLIでEC2インスタンスの情報を取得
aws ec2 describe-instances
phpファイル作成
下記の内容でec2DescribeInstance.phpファイルを作成します。
<?php
require 'vendor/autoload.php';
use Aws\Ec2\Ec2Client;
use Aws\Exception\AwsException;
try{
$client = new Ec2Client([
'region' => 'ap-northeast-1',
'version' => '2016-11-15',
]);
$result = $client->describeInstances();
var_dump($result);
} catch(AwsException $e){
error_log($e->getMessage());
}
PHPを実行してEC2インスタンスの情報が取得できることが確認できました。
php ec2DescribeInstance.php