Help us understand the problem. What is going on with this article?

Google Cloud Storage に AWS CLI や AWS SDK for PHP でアップロード

More than 5 years have passed since last update.

Google Cloud Storage が S3 互換の API を持っているらしいので、AWS CLI や AWS SDK for PHP で Google Cloud Storage にファイルをアップロードしてみました。

Google Cloud Platform にサインアップ

まずはなにはともあれ Google Cloud Platform サインアップします。

「今すぐ試す」をクリックします。

01-signup.png

住所とか氏名とかクレジットカード番号とかを入力してサインアップします。


「デベロッパーコンソール」という AWS でいうところのマネジメントコンソールが開くので、「プロジェクトの作成」から適当にプロジェクトを作成します。

02-console.png

プロジェクト名とプロジェクトIDを入力して 作成 をクリックします。

03-new-project.png

プロジェクトIDは自動で入力されていますが自分で好きな値に書き換えることもできます(ただし重複してはならない)。

なお、わたしは以前に App Engine を使っていたためか、Google Cloud Platform にサインアップした直後に App Engine で作っていたアプリがプロジェクトとして最初から登録されていました。

バケットを作成

次にバケットを作成します。

  • デベロッパーコンソールの左ペインで ストレージ -> Cloud Storage -> ストレージブラウザ を選択
  • Create a Bucket をクリック

04-new-bucket.png

  • バケット名とかを入力して 作成 をクリック

05-new-bucket.png

相互運用性

次に S3 互換の API を使うために Interoperability API を有効にします。

  1. デベロッパーコンソールでプロジェクトを開く
  2. 左ペインで ストレージ > Cloud Storage > ストレージアクセス を選択
  3. 相互運用性 タブを選択
  4. {プロジェクト名} を既定プロジェクトにする をクリック
  5. 相互運用アクセスを有効にする をクリック
  6. 新しいキーを作成 をクリック

06-interop.png

最後の手順でいわゆるアクセスキー/シークレットキーが作成されるので保存しておきます。

07-interop.png

なお、4. の {プロジェクト名} を既定プロジェクトにする は、複数のプロジェクトを作成していて、かつ、API でバケットを作ったりしない限りは多分関係ありません。

既定プロジェクトは、Interoperability API でのすべてのバケットの作成リクエストやバケットの表示リクエストに使用されます。

つまり、バケットの作成やバケットの表示のような、既存の特定のバケットを指定するのではない API の呼び出しでは、ここで設定した既定プロジェクトが選択されるということだと思います(AWS には「プロジェクト」なんて階層はなくて「アカウント→バケット」だから)。

バケットを指定する API では、バケットからプロジェクトは特定できるので既定プロジェクトの設定が使われることはありません(多分)。

(と、思ったんだけど、アクセスキーでプロジェクトは特定されるのではないの?)

AWS CLI

それでは AWS CLI で適当なファイルをアップロードしてみます。

まずはアクセスキー/シークレットキーを保存します。

$ vim ~/.aws/credentials

次のように追記します。

[google-cloud-storage]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_ACCESS_KEY

YOUR_ACCESS_KEYYOUR_SECRET_ACCESS_KEY には↑のほうで作成したアクセスキー/シークレットキーを設定します。

アップロードするファイルを作ります。

$ echo "this is test" > test.txt

エンドポイントに Google Cloud Storage の URL を、プロファイルに google-cloud-storage を指定してs3 cp コマンドでファイルをアップロードしてみます。

$ aws --endpoint-url https://storage.googleapis.com --profile google-cloud-storage \
    s3 cp test.txt s3://YOUR_BUCKET_NAME/test.txt
upload: ./test.txt to s3://YOUR_BUCKET_NAME/test.txt

s3 ls コマンドでアップロードされているか確認してみます。

$ aws --endpoint-url https://storage.googleapis.com --profile google-cloud-storage \
    s3 ls s3://YOUR_BUCKET_NAME/
> 2015-04-22 22:48:09         13 test.txt

デベロッパーコンソールのストレージブラウザを見てみます。

08-aws-cli.png

アップロードされています。

AWS SDK for PHP

次に AWS SDK for PHP でアップロードしてみます。

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

use Aws\S3\S3Client;

$client = S3Client::factory([
    'endpoint' => 'https://storage.googleapis.com',
    'profile' => 'google-cloud-storage',
]);

$result = $client->putObject([
    'Bucket' => 'YOUR_BUCKET_NAME',
    'Key'    => 'php.txt',
    'Body'   => 'this is aws sdk for php',
]);

実行します。

$ php google-cloud-storage.php

デベロッパーコンソールのストレージブラウザを見てみます。

09-aws-sdk.png

アップロードされています。

さいごに

Google Cloud Storage は S3 互換の API を持つので、Web アプリで両方への対応が簡単に実装出来そうです。

ngyuki
テック系男子。 ただのやってみた系の記事ははてなブログに、それ以外の技術系のネタは Qiita に投稿します。
https://ngyuki.jp/
headjapan
中規模~大規模の安定した基幹システム・大規模サイトの分析・要件定義・設計・開発を得意とする、総合的な開発会社です。
http://www.headjapan.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした