PHPでAWSへ接続して、CSVデータを取り込む

## 概要
PHPでAWSを使うことがあったので調べた内容をメモしておく

## AWS SDK for PHP
最新だと3.53のようなので、それと使ってみる。

phpのComposerを使ってインストールします。

```bash:ターミナル
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar require aws/aws-sdk-php
```

## まずやってみる
とりあえず、接続してデータを取ってきてみる。

```php:example1.php
<?php
require __DIR__ . '/vendor/autoload.php';
use Aws\S3\S3Client;

// AWSのS3からCSVファイルを取得する
$client = Aws\S3\S3Client::factory([
    'credentials' => [
        'key'    => '***************',
        'secret' => '********************************',
    ],
    'region'  => 'ap-northeast-1',
    'version' => 'latest'
]);
$result = $client->getObject([
    'Bucket' => 'hoge-data',
    'Key'    => 'goods/20180101.csv'
]);

// CSVファイルの中身を取得する
$data = array();
if ($result['Body']) {
    $stream = $result['Body'];
    $stream->rewind();
    $csv = $stream->getContents();

    $fp = tmpfile();
    fwrite($fp, $csv);
    rewind($fp);
    while ($row = fgetcsv($fp, 4096)) {
        $data[] = $row
    }
    fclose($fp);
}
var_dump($data);
```

## credentials情報を分離する (credentials.ini)
credentials情報をPHPファイルに記述したくないので、分離してみる。

```:credentials.ini
[default]
aws_access_key_id = '****************'
aws_secret_access_key = '**************************'
```

```php:example2.php
<?php
require __DIR__ . '/vendor/autoload.php';
use Aws\Credentials\CredentialProvider;

// AWSのS3からCSVファイルを取得する
$ini = __DIR__ . '/credentials.ini';
$iniProvider = CredentialProvider::ini('default', $ini);
$iniProvider = CredentialProvider::memoize($iniProvider);
$client = new Aws\S3\S3Client([
    'credentials' => $iniProvider,
    'region'      => 'ap-northeast-1',
    'version'     => 'latest'
]);
$result = $client->getObject([
    'Bucket' => 'hoge-data',
    'Key'    => 'fuga/20180101.csv'
]);

// CSVファイルの中身を取得する
$data = array();
if ($result['Body']) {
    $stream = $result['Body'];
    $stream->rewind();
    $csv = $stream->getContents();

    $fp = tmpfile();
    fwrite($fp, $csv);
    rewind($fp);
    while ($row = fgetcsv($fp, 4096)) {
        $data[] = $row
    }
    fclose($fp);
}
var_dump($data);
```

## credentials情報を分離する (~/.aws/credentials)
credentials情報をPHPファイルに記述したくないので、分離してみる。

```:~/.aws/credentials
[default]
aws_access_key_id = '****************'
aws_secret_access_key = '**************************'
```

```php:example3.php
<?php
require __DIR__ . '/vendor/autoload.php';
use Aws\Sdk;

// AWSのS3からCSVファイルを取得する
$sdk = new Sdk([
    'profile' => 'default',
    'region'  => 'ap-northeast-1',
    'version' => 'latest'
]);
$client = $sdk->createS3();
$result = $client->getObject([
    'Bucket' => 'hoge-data',
    'Key'    => 'fuga/20180101.csv'
]);

// CSVファイルの中身を取得する
$data = array();
if ($result['Body']) {
    $stream = $result['Body'];
    $stream->rewind();
    $csv = $stream->getContents();

    $fp = tmpfile();
    fwrite($fp, $csv);
    rewind($fp);
    while ($row = fgetcsv($fp, 4096)) {
        $data[] = $row
    }
    fclose($fp);
}
var_dump($data);
```

## 参考サイト
* [AWS SDK for PHP version 3](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/installation.html)
* [Configuration — AWS SDK for PHP documentation](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/configuration.html)
* [Class Aws\Credentials\CredentialProvider](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.Credentials.CredentialProvider.html)
* [S3の基本的な操作をしたメモ(AWS SDK for PHP 3.x)](https://qiita.com/Ikumi/items/d2fd60f1e15c3617f521)
* [Credentials — AWS SDK for PHP documentation](https://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html)
* [AWS SDK for PHP（バージョン3）を使ってオブジェクトをアップロード・ダウンロードする](https://remotestance.com/blog/3044/)