Memo

メモ > サーバ > サービス: AWS > AWS SDK(バージョン3)

■AWS SDK(バージョン3)
AWS SDK for PHP | AWS https://aws.amazon.com/jp/sdk-for-php/ 「AWS SDK for PHP v3」を使ったS3へのアップロード・ダウンロード処理 | 株式会社ビヨンド http://beyondjapan.com/blog/2017/04/%E3%80%8Caws-sdk-for-php-v3%E3%80%8D%E3%82%92%E4%BD%BF%E3%81%A3%... 2017/11/16時点で、この方法ならPHPからS3にアップロードできた。 ■インストール
composer require aws/aws-sdk-php
■証明書エラー phpからAWS S3にアクセスしようとしたときに「SSL certificate problem: unable to get local issuer certificate」となった場合の対応 https://www.scriptlife.jp/contents/programming/2017/09/18/php-curl-certificate-failed/ 証明書エラーになったが、以下のように設定すれば解消した C:\xampp\php\php.ini
curl.cainfo = "C:\Program Files\Git\etc\pki\ca-trust\extracted\openssl\ca-bundle.trust.crt"
■稼働中のEC2を取得する例
<?php require_once 'vendor/autoload.php'; use Aws\Ec2\Ec2Client; use Aws\Ec2\Exception\Ec2Exception; try { // アクセスキーとシークレットアクセスキーを指定して接続 $client = new Ec2Client([ 'credentials' => [ 'key' => 'XXXXX', 'secret' => 'YYYYY', ], 'region' => 'ap-northeast-1', 'version' => 'latest', ]); // インスタンスの情報を取得 $result = $client->describeInstances([ 'Filters' => [ [ 'Name' => 'instance-state-name', 'Values' => ['running'], ], ], ]); // 結果を出力 foreach ($result['Reservations'] as $reservation) { $instance = $reservation['Instances'][0]; echo 'InstanceId ... ' . $instance['InstanceId'] . '<br />'; echo 'PrivateIpAddress ... ' . $instance['PrivateIpAddress'] . '<br />'; echo '<hr />'; } } catch (Ec2Exception $e) { exit('Ec2Exception: ' . $e->getMessage()); } catch (Exception $e) { exit('Exception: ' . $e->getMessage()); }
■S3のディレクトリを一覧する例
<?php require_once 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; try { // アクセスキーとシークレットアクセスキーを指定して接続 $client = new S3Client([ 'credentials' => [ 'key' => 'XXXXX', 'secret' => 'YYYYY', ], 'region' => 'ap-northeast-1', 'version' => 'latest', ]); // バケットとディレクトリを指定して取得 $result = $client->listObjects([ 'Bucket' => 'ZZZZZ', 'Prefix' => 'blog/', 'Delimiter' => '/', ]); // ディレクトリを表示 foreach ($result['CommonPrefixes'] as $prefix) { echo $prefix['Prefix'] . '<br>'; } } catch (S3Exception $e) { exit('S3Exception: ' . $e->getMessage()); } catch (Exception $e) { exit('Exception: ' . $e->getMessage()); }
■S3のファイルを一覧する例
<?php require_once 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; try { // アクセスキーとシークレットアクセスキーを指定して接続 $client = new S3Client([ 'credentials' => [ 'key' => 'XXXXX', 'secret' => 'YYYYY', ], 'region' => 'ap-northeast-1', 'version' => 'latest', ]); // バケットとディレクトリを指定して取得 $result = $client->listObjects([ 'Bucket' => 'ZZZZZ', 'Prefix' => 'blog/photo/', 'Delimiter' => '/', ]); // ファイルを表示 foreach ($result['Contents'] as $content) { echo $content['Key'] . '(' . $content['LastModified'] . ')' . '<br>'; } } catch (S3Exception $e) { exit('S3Exception: ' . $e->getMessage()); } catch (Exception $e) { exit('Exception: ' . $e->getMessage()); }
■S3のファイルを取得する例
<?php require_once 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; try { // アクセスキーとシークレットアクセスキーを指定して接続 $client = new S3Client([ 'credentials' => [ 'key' => 'XXXXX', 'secret' => 'YYYYY', ], 'region' => 'ap-northeast-1', 'version' => 'latest', ]); // バケットとファイルを指定して取得 $result = $client->getObject([ 'Bucket' => 'ZZZZZ', 'Key' => 'images/photo01.jpg', ]); // ファイルを表示 header('Content-Type: image/jpeg'); echo $result['Body']; exit; } catch (S3Exception $e) { exit('S3Exception: ' . $e->getMessage()); } catch (Exception $e) { exit('Exception: ' . $e->getMessage()); }
■S3にファイルを保存する例
<?php require_once 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; try { // アクセスキーとシークレットアクセスキーを指定して接続 $client = new S3Client([ 'credentials' => [ 'key' => 'XXXXX', 'secret' => 'YYYYY', ], 'region' => 'ap-northeast-1', 'version' => 'latest', ]); // バケットにファイルを保存 $result = $client->putObject(array( 'Bucket' => 'ZZZZZ', 'Key' => 'images/photo01.jpg', 'Body' => file_get_contents('img/image.jpg'), )); exit; } catch (S3Exception $e) { exit('S3Exception: ' . $e->getMessage()); } catch (Exception $e) { exit('Exception: ' . $e->getMessage()); }
■S3に認証なしでアクセス ※未検証 バケットの公開設定によっては、認証情報なしでアクセスできるみたい AWS SDK (PHP) での認証なしの S3 へのアップロード - Qiita https://qiita.com/mangano-ito/items/d368e3e46048e2139936 ■CloudWatchLogsのデータを取得する例 <?php /* FilterLogEvents - Amazon CloudWatch Logs https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_FilterLogEvents.html 「The start of the time range, expressed as the number of milliseconds after Jan 1, 1970 00:00:00 UTC. 」 ↑時間の指定はUNIXタイムスタンプのミリ秒で行う PHPを使って、CloudWatch Logsからデータを取得します。 https://gist.github.com/yusukemurayama/0d0a81cad039cc68964b 「filterPattern」の指定例がなかなか見つけられないが、上記では使われている
<?php require_once '../libs/vendor/autoload.php'; use Aws\CloudWatchLogs\CloudWatchLogsClient; use Aws\CloudWatchLogs\Exception\CloudWatchLogsException; try { $client = new CloudWatchLogsClient([ 'credentials' => [ 'key' => 'XXXXX', 'secret' => 'YYYYY', ], 'region' => 'ap-northeast-1', 'version' => 'latest', ]); $result = $client->filterLogEvents([ 'logGroupName' => '/var/log/nginx/access.log', 'startTime' => (time() - 60 * 60) * 1000, // 開始時間(UNIXタイムスタンプのミリ秒) 'endTime' => time() * 1000, // 終了時間(UNIXタイムスタンプのミリ秒) 'filterPattern' => '[httprequest != "*.ico*" && httprequest != "*.xml*"]', ]); foreach ($result->get('events') as $event) { echo $event['message']; echo '<hr>'; } } catch (CloudWatchLogsException $e) { exit('CloudWatchLogsException: ' . $e->getMessage()); } catch (Exception $e) { exit('Exception: ' . $e->getMessage()); }
■認証情報の外部ファイル化 あらかじめ credentials.ini を作成して認証情報を記載しておくと、
[default] aws_access_key_id=XXXXX aws_secret_access_key=YYYYY
CredentialProviderを使用して、認証情報を読み込むことができる
<?php require_once 'vendor/autoload.php'; use Aws\CloudWatchLogs\CloudWatchLogsClient; use Aws\CloudWatchLogs\Exception\CloudWatchLogsException; use Aws\Credentials\CredentialProvider; try { $ini = './credentials.ini'; $iniProvider = CredentialProvider::ini('default', $ini); $iniProvider = CredentialProvider::memoize($iniProvider); $client = new CloudWatchLogsClient([ 'credentials' => $iniProvider, 'region' => 'ap-northeast-1', 'version' => 'latest', ]);
また認証情報を ~/.aws/credential で管理していて「[default]」の定義を使用する場合、以下のように簡略化できる(未検証)
<?php require_once 'vendor/autoload.php'; use Aws\CloudWatchLogs\CloudWatchLogsClient; use Aws\CloudWatchLogs\Exception\CloudWatchLogsException; use Aws\Credentials\CredentialProvider; try { $client = new CloudWatchLogsClient([ 'credentials' => CredentialProvider::defaultProvider(), 'region' => 'ap-northeast-1', 'version' => 'latest', ]);
[PHP]aws-sdkでS3にファイルをアップロードする | akamist blog https://akamist.com/blog/archives/4426

Advertisement