[PHP]aws-sdkでS3にファイルをアップロードする

カテゴリ: 未分類

PHPからaws-sdkを使ってS3にファイルをアップロードするスクリプトを作成する手順です

前提条件

今回のプログラムでは、ローカルに存在するhello.txtを、S3のバケットaws-php-s3-testhello-sw.txtの名前でアップロードします。

AWSにアクセスするための認証情報はプログラムにハードコーディングせず、credentials.iniに保存することとします。

作業手順

S3にバケットを作成

まずはS3にアップロード先のバケットを作成します。今回はaws-php-s3-testの名前でバケットを作成しました。

バケット作成時に聞かれる"このバケットのブロックパブリックアクセス設定"の選択肢は、"パブリックアクセスをすべてブロック"を選択しても大丈夫です。

aws-sdkをダウンロード

下記のコマンドでインストールします。

ついでに、PHPのバージョンもcomposerの依存関係に登録しておきます(任意)。requireした後にautoloadのファイルをダンプしておきます。

composer require aws/aws-sdk-php

# 下記は任意
composer require php
composer dumpautoload

すると、composer.json, composer.lockファイルと、vendorディレクトリが作成されます。

composer.jsonが以下のような形になっていることを確認します。(バージョンは実行したタイミング、環境に依存します)

{
    "require": {
        "aws/aws-sdk-php": "^3.179",
        "php": "^8.0"
    }
}

認証情報を作成

.aws/credentialsを参考に、以下のような形でcredentials.iniファイルを作成します。
クレデンシャルを持っていない場合は、aws consoleのIAMからユーザ作成します。作ったユーザにはS3にファイルをPutできる権限を付与しておきます。

AWSのIAMについて詳しくない場合、AdministratorAccess権限を付与したIAMユーザを一時的に作成すれば、全権限を付与できるためプログラム実行時の問題の切り分けが行いやすいです。

[default]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

アップロードするファイルを作成

適当な内容でhello.txtを作成します。

hello world!!

PHPのプログラム

以下の内容でmain.phpを作成します。

<?php

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

use Aws\Credentials\CredentialProvider;

function main()
{
    $ini = './credentials.ini';
    $iniProvider = CredentialProvider::ini('default', $ini);
    $iniProvider = CredentialProvider::memoize($iniProvider);

    $srcFile = 'hello.txt';

    $client = new Aws\S3\S3Client([
        'region'   => 'ap-northeast-1',
        'version'  => '2006-03-01',
        'credentials' => $iniProvider
    ]);

    $client->putObject([
        'Bucket' => 'aws-php-s3-test',
        'Key' => 'hello-s3.txt',
        'SourceFile' => $srcFile,
        'ContentType'=> mime_content_type($srcFile)
    ]);
}

main();

プログラムの実行

先程作ったphpプログラムを、php main.phpで実行します。

エラーが出なければaws consoleにアクセスし、先程作ったバケットにhello-s3.txtの名前でファイルができていることを確認します。

その値

 ~/.aws/credentialの利用

AWSのクレデンシャル情報を~/.aws/credentialで管理しており、[default]の定義を利用する場合、下記のphpコードに簡略化できます。

参考: 認証情報プロバイダの使用

function main()
{
    $srcFile = 'hello.txt';

    $client = new Aws\S3\S3Client([
        'region'   => 'ap-northeast-1',
        'version'  => '2006-03-01',
        'credentials' => CredentialProvider::defaultProvider(),
    ]);
    $client->putObject([
        'Bucket' => 'aws-php-s3-test',
        'Key' => 'hello-s3.txt',
        'SourceFile' => $srcFile,
        'ContentType'=> mime_content_type($srcFile)
    ]);
}

main();

Amazonでおトクに買い物する方法
AmazonチャージでポイントGET


Amazonは買いもの前にAmazonギフト券をチャージしてポイントをゲットしないと損!

こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。