S3のパブリックバケットにローカルから画像をアップロードする

今回はローカルPCとしてはmacを使用して画像をS3のパブリックバケット上にアップロードする作業を実施します。

事前作業

①IAMユーザ準備

S3FullAccess権限のついたIAMユーザを作成し、ローカルPCにセッティングします。

$ cat /Users/<user>/.aws/credentials 

defaultに作成したIAMユーザのアクセスキー、シークレットアクセスキーが設定されていたらOKです。
アカウントに影響のないCLIコマンド等を打って対象アカウントに誤りがないか確認します。

$ aws s3 ls

②composerインストール

macの場合は、brewが入っている前提ですが、brewコマンドでcomposerをインストールします。

$ brew install composer

作業手順

1. 作業用ディレクトリ作成および移動

$ mkdir aws_sdk_sample && cd aws_sdk_sample

2. AWS SDK for PHPをインストール

composerを使って、AWS SDK for PHPをインストールします。

$ composer require aws/aws-sdk-php

作業用ディレクトリに以下のファイルが作成されます。

$ ls -la
total 56
drwxr-xr-x   5 t-yyyy  XXXX\Domain Users    160  5 15 00:42 .
drwxr-xr-x+ 59 t-yyyy  XXXX\Domain Users   1888  5 15 00:41 ..
-rw-r--r--   1 t-yyyy  XXXX\Domain Users     63  5 15 00:42 composer.json
-rw-r--r--   1 t-yyyy  XXXX\Domain Users  22486  5 15 00:42 composer.lock
drwxr-xr-x  11 t-yyyy  XXXX\Domain Users    352  5 15 00:42 vendor
$ cd vendor/
$ ls -la
total 8
drwxr-xr-x  11 t-yyyy  XXXX\Domain Users  352  5 15 00:42 .
drwxr-xr-x   5 t-yyyy  XXXX\Domain Users  160  5 15 00:42 ..
-rw-r--r--   1 t-yyyy  XXXX\Domain Users  178  5 15 00:42 autoload.php
drwxr-xr-x   3 t-yyyy  XXXX\Domain Users   96  5 15 00:42 aws
drwxr-xr-x   3 t-yyyy  XXXX\Domain Users   96  5 15 00:42 bin
drwxr-xr-x  11 t-yyyy  XXXX\Domain Users  352  5 15 00:42 composer
drwxr-xr-x   5 t-yyyy  XXXX\Domain Users  160  5 15 00:42 guzzlehttp
drwxr-xr-x   3 t-yyyy  XXXX\Domain Users   96  5 15 00:42 mtdowling
drwxr-xr-x   3 t-yyyy  XXXX\Domain Users   96  5 15 00:42 psr
drwxr-xr-x   3 t-yyyy  XXXX\Domain Users   96  5 15 00:42 ralouphie
drwxr-xr-x   5 t-yyyy  XXXX\Domain Users  160  5 15 00:42 symfony

3. S3バケット作成

以下の通りS3バケットを作成します。
名前は今回は「s3-public-test-bucket」にします。

f:id:tomomiik:20200515012631p:plain

画像下部に表示されている「バケットを作成」ボタンを押下
バケット作成時、パブリックアクセスを許可していない場合は以下の画面でチェックを外し許可すること

f:id:tomomiik:20200515013002p:plain

4. index.phpスクリプト作成

作業用ディレクトリの配下に以下のような「index.php」ファイルを作成します。
S3のバケット名を作成したものに設定し、アップロードするファイルを「test.png」とします。
keyにはアクセスキーを、your secret access keyにはシークレットアクセスキーをセットしてください。

<?php
 
require './vendor/autoload.php';
 
$s3client = new Aws\S3\S3Client([
    'credentials' => [
        'key' => 'your access key id',
        'secret' => 'your secret access key'
    ],
    'region' => 'ap-northeast-1',
    'version' => 'latest',
    'scheme' => 'http',
]);
 
$result = $s3client->putObject([
    'Bucket' => 's3-public-test-bucket',
    'Key' => 'test.png',
    'SourceFile' => 'test.png',
    'ContentType' => mime_content_type('test.png'),
]);

5. test.png配置

アップロードする画像ファイル「test.png」を同じディレクトリ配下に以下の通り配置します。

f:id:tomomiik:20200515013740p:plain

6. スクリプト実行

以下コマンドでスクリプトを実行

$ php index.php

7. 画像アップロード確認

作成したS3バケットにテスト用画像がアップロードされたかを確認します。
以下のようにアップロードされていればOK。

f:id:tomomiik:20200515014047p:plain

8. 画像を公開

アップロードした画像を以下の通り公開します。

f:id:tomomiik:20200515014302p:plain

8. ブラウザ確認

発行されたオブジェクトURL↓にアクセスし画像が表示されることを確認すれば完了です。

オブジェクト URL
https://s3-public-test-bucket.s3-ap-northeast-1.amazonaws.com/test.png

f:id:tomomiik:20200515014622p:plain

今日もお疲れ様でした。