クラウドインフラ構築記

現在AWSの構築支援に携わっております。今注視しているのは、GKE、BigQuery、Google Dataflowなどサービスを展開しているGoolge Cloud Platformです。

2013年8月7日
から hiruta
S3などのクラウドストレージのファイルの有無の確認方法について はコメントを受け付けていません

S3などのクラウドストレージのファイルの有無の確認方法について

ObjectStore、S3などにファイルがあるかどうかはgetObjectMetadataで調べられます。なかった場合、例外にスローされますので、catch句で処理を書けばOK.

クラウドストレージとローカルの同期に使えると思われます。

s3.getObjectMetadata(bucketName, ddd);

2013年8月6日
から hiruta
Cloudn Object Storageからのファイルのダウンロード AWS SDK for Java編 はコメントを受け付けていません

Cloudn Object Storageからのファイルのダウンロード AWS SDK for Java編

S3互換を歌っているCloudnのクラウドストレージサービス『ObjectStorage』からAWS SDK for Javaを使ってダウンロードするサンプルをコーディングしました。ローカルファイルとストレージ上のファイルの比較はファイルサイズで行っています。

以下部分を変更すればS3でも動作は問題ないと思われます。SDKを提供していないストレージで同じことを行うとすると相当のコード量になります。SDKが提供されているストレージの優位性が改めて、認識されました。

S3は、HTTPSを使っていますが、CloudnではHTTPを使用しています。


ClientConfiguration clientconf = new ClientConfiguration();
 clientconf.setProtocol(Protocol.HTTP);

S3以外のストレージへアクセスするには、End Point URLを設定する必要があります。


s3 = new AmazonS3Client(pc, clientconf);

s3.setEndpoint("http://str.cloudn-service.com");

// List Objects
 ObjectListing objectListing = s3.listObjects(new ListObjectsRequest().withBucketName(bucketName));

 GetObjectRequest getObjectReq = null;
 ObjectMetadata objMeta = null;
 for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {

if (objectSummary.getSize()!=0){
 System.out.println(" - " + objectSummary.getKey() + "\t" + "(size = " + objectSummary.getSize() + ")" + "\t" + "(" + objectSummary.getLastModified().toString() + ")");

File localFile = new File(st_folder + objectSummary.getKey());

 if(localFile.exists()){
 if (localFile.length()!=objectSummary.getSize()){
 getObjectReq = new GetObjectRequest(bucketName, objectSummary.getKey());
 objMeta = s3.getObject(getObjectReq, localFile);
 }
 }
 else {
 getObjectReq = new GetObjectRequest(bucketName, objectSummary.getKey());
 objMeta = s3.getObject(getObjectReq, localFile);

 }
 getObjectReq = null;
 objMeta = null;
 }
 }

Object StorageのLastModified情報をローカルPCのファイルに引き継ぐことができれば完璧ですが、これについてはわかり次第記載します。

2013年8月4日
から hiruta
cactiをインストールしてみました。 はコメントを受け付けていません

cactiをインストールしてみました。

yumでインストール。

 yum --enablerepo=epel install  cacti

デフォルトのデータベースエンジンがMyISAMなので、InnoDBに変更。

sed -i 's/MyISAM/InnoDB/g' cacti.sql

データベースに初期データ登録。

mysql -u cactiuser -p cacti <  cacti.sql

cron処理の有効化

vi /etc/cron.d/cacti

*/5 * * * *     cacti   /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1

yumからインストールするcactiはapacheの設定はあるが、nginxを使っている場合、以下のようにnginxのserver{}に記載して、nginxを再起動する必要があります。


## cacti
 location /cacti {
 alias /usr/share/cacti;
 index index.php;
 }

location ~ ^/cacti.+\.php$ {
 # fastcgi_pass unix:/var/run/php-fpm.sock;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;

fastcgi_split_path_info ^/cacti(.+\.php)(.*)$;
 fastcgi_param SCRIPT_FILENAME /usr/share/cacti/$fastcgi_script_name;
 include /etc/nginx/fastcgi_params;
 }

http://xxx/cacti/ にアクセスして、初期設定を行います。

しばらく後、グラフが表示されれば、設定は問題ない。

Graphs    Tree Mode

グラフがはじめ表示されませんでしたが、/etc/cacti/db.phpがPermission Diedで読みないとエラーログに記載されていました。yumでcactiをインストールするとrootとapacheユーザしか読めないようになっていたので、chown root:nginx db.phpとオーナーチェンジして無事表示されるようになりました。

あとは、いろいろカスタマイズを検討していきます。

ディスク使用量によりメール通知なども可能(Thold)。

2013年8月3日
から hiruta
WordPress 3.6にバージョンアップしました。 はコメントを受け付けていません

WordPress 3.6にバージョンアップしました。

さきほどWordPressの最新ブランチの3.6日本語版が公開されたので、バージョンアップを行いました。とりあえず、問題などはない模様です。

wordpress 3.5.2のときは問題なかったのですが、解像度の低い(1024×768)のPCで狭いエリアで管理画面を開くと、右が重なる現象が再発しているようです。3.5.2のときは、ブラウザに入りきらない場合、下部に自動的に移動してよかったのですが。表示オプションからスクリーンレイアウトを2から1にすることで可避。

2013年8月1日
から hiruta
Ubuntu 11.10にて、Cloud foundryをインストールしました。 はコメントを受け付けていません

Ubuntu 11.10にて、Cloud foundryをインストールしました。

以前 ここ で紹介されている内容で、Ubuntu 10で構築していたのですが、rubyのバージョンなど8.xだったり、このときのvmcでは、Cloudn PaaSに接続できなかったりしたので、Ubuntu 11.10を構築したので、cloud foundry のインストールにします。

apt-add-repositoryがCommand not foundとなるので、以下パッケージをインストール。

apt-get install python-software-properties

 

sudo apt-add-repository ppa:cloudfoundry/ppa

念のため、システムアップデート。

sudo apt-get update

以下でcloud foundryをインストール。仮想マシン(メモリ4G)へのインストールでしたので、多少時間がかかりました。

sudo apt-get install cloudfoundry-server

最後に、クライアントツール(vmc)をインストール。

sudo apt-get install cloudfoundry-client

詳細な動作検証はまだですが、インストールしたvmcを使って、Cloudn PaaSに接続確認しました。vmcのバージョンがCloudnで推奨している0.3.23ではなく、インストールされたバージョンが0.3.10でした。

2013年8月1日
から hiruta
0件のコメント

Ubuntu 11.10にcloud foundry環境構築の準備しました。

ここをみる限り

リポジトリからcloud foundryをインストールできるようになっているので、Ubuntu 11.10をSun VirtualBoxにインストールしました。64bit版をインストール。

11.10は以下アーカイブページからISOファイルをダウンロード行えます。Ubutuのトップでは最新版しかダウンロードできません、

http://old-releases.ubuntu.com/releases/oneiric/

2013年7月30日
から hiruta
第10回Cloudn勉強会に参加しました。 はコメントを受け付けていません

第10回Cloudn勉強会に参加しました。

第10回Cloudn勉強会 に参加しました。

今回は、Cloudnの概要、PaaSサービスの今後の展開、デモンストレーションを行われました。

最近のニュース記事についても触れられた。「IBMもPaaS基盤として、Cloud foudryを全面サポート

Accel-Martの基盤として、Cloudn PaaSを使用しているとのこと。

PaaSはプリセットされた実行環境、DBが提供され、運用保守軽減が図れる。PaaSを使うこと、分散環境の構築も簡単に、インスタンスが物理サーバー障害などによりダウンした場合も、正常動作しているDEA上で自動起動してくれます。

PaaSサービスを使う場合の注意事項についての説明がありました。

  • 対応している言語、フレームワークであること
  • コネクションを継続する動作をしない。
    • 将来WebSocketに対応すればこれについては改善される!?
  • プロトコルにHTTP(s)に使用すること
  • インスタンス間通信を行わない
  • ローカルディスクに永続データを保存しない
    •   インスタンスを再起動させると、変更した内容がリセットされる。※WordPressをPaaSでデプロイして検証済。
  • 無料で使用できるbuild-inサービスは10Mの制限があるので、運用時はRDBと連携は必要。

今後のPaaSの機能拡張としては、

  • ソースIPのアクセス制御  8/1リリース予定
  • RDB連携 今週中
  • リソース監視 ※今後
  • 現在東京リージョンだけだが、将来的には他のリージョンでも使用可能 ※今後
  • マルチAZ ※今後

最後にデモンストレーション

vmcコマンド、ブラウザでの操作

Windows7 64bitだとvmcをインストールして使えるのだが、PCを再起動するとエラーがでて、使えなくなってしまう。原因は現在調査中。

※コントロールパネルからダウンロードされるWindows用ツールは、タイムアウトの調整など行っているようです。

アプリケーションのデプロイ、インスタンス変更、bindするサービス作成、独自ドメインのマッピングなどが行われました。

質疑応答の時間で、Cloud foundryが最近Version 2がリリースことで、CloudnのPaaSのバージョンアップするのかの質問がありました。

→現状検証中とのこと。cloud foundryは複数のモジュールがあり、すべてのバージョンアップする必要はない。ルータモジュールのバージョンアップは行いたい回答がありました。ルーターをバージョンアップすることにより、WebSocketにも対応できるようになるようだ。

Cloudn PaaSの帯域について 各インスタンスは、100Mベストエフォートで接続。ただし、値は非公表だが、上限値はあるようですが、帯域で問題になることはなさそうです。



2013年7月29日
から hiruta
Cloudn PaaSファーストインプレッション はコメントを受け付けていません

Cloudn PaaSファーストインプレッション

Cloudn PaaS スタートアップガイドをもとにwordpressをPaaSインフラにアップロードしてみました。

PaaSは、インフラ部分(Apache、nginx、データベース)を気にすることなく、開発したアプリケーションをPaaSにデプロイするだけで動かすことができる魅力的なサービスです。Cloudn PaaSはvmware が開発したPaaS基盤を採用しており、Cloud foundry基盤のPaaSサービスからの乗換もしやすい。

wordpressオフィシャルサイトからダウンロードできるものをPaaSにアップロードするには、wp-config.phpの以下部分を変更する必要があります。(DB接続部分+認証用ユニークキー)


$services = getenv("VCAP_SERVICES");
$services_json = json_decode($services,true);
$mysql_config = $services_json["mysql-5.5"][0]["credentials"];

// ** MySQL settings from resource descriptor ** //
define('DB_NAME', $mysql_config["name"]);
define('DB_USER', $mysql_config["user"]);
define('DB_PASSWORD', $mysql_config["password"]);
define('DB_HOST', $mysql_config["hostname"]);
define('DB_PORT', $mysql_config["port"]);

wordpressを解凍したフォルダに移動して、vmcコマンドでアップロードします。

vmc push xxxx-sample

データベースを使うので、サービスを作成、アプリケーションに紐付け(Bind)を行います。

ブラウザからアップロードするファイルの上限は2Mですが、.htaccessに、upload_max_filesizeとpost_max_sizeで変更可能のようです。

PaaSにアップロードしてから、WordPress管理画面からテーマをインストールすると、PaaSアプリケーションを再起動とか行うとインストールしたテーマがリセットされるので、PaaSにデプロイする前に使用するテーマは予め同封させておかないといけないようです。

CMSとして稼働する場合、稼働してからアップするもの(画像、ドキュメント類)はObject Storageに保存するように変更する必要があります。なお、再起動後も、データベースは保持されます。

 

9月27日までに申し込みと利用料金の¥5,000が無料となるキャンペーンを行っているので、試したい方は下記よりお申し込みを。『法人サービスとなっていますが』、個人でも問題なく申し込み可能です。

2013年7月28日
から hiruta
githubにアップロードする【CUI編】 はコメントを受け付けていません

githubにアップロードする【CUI編】

git push -u origin masterでgithubにアップロードするのだが、以下エラーでアップロードできなかった。

$ git push -u origin master
error: The requested URL returned error: 403 Forbidden while accessing https://github.com/webse/aws-cloud.git/info/refs

fatal: HTTP request failed

githubへのアップするためのアクセス権限がないエラーになります。

https//username@github.com/というようにgithubのユーザを指定するとアップロードできるようになります。パスワードを聞いてきますが。

vi .git/config

[remote "origin"]
url = https://webse@github.com/webse/aws-cloud.git
fetch = +refs/heads/*:refs/remotes/origin/*

AWS SDK for PHP 2のサンプルを以下に公開しています。

https://github.com/webse/aws-cloud

BillingでFreeプランにしていないと、プライベートリポジトリを作っていない場合も課金されるので、注意。

2013年7月25日
から hiruta
CloudnのObjectStorageで、MultipartUploadがうまくいかない。(Try編) はコメントを受け付けていません

CloudnのObjectStorageで、MultipartUploadがうまくいかない。(Try編)

CloudnのObjectStorageで、MultipartUploadを試してみました。

AWS SDK for PHP 2は、getcomposer.org よりインストールしました。インストール方法はこちらの記事を参照。

<?php
require_once("aws/vendor/autoload.php");

use Aws\Common\Aws;
use Aws\Common\Enum\Size;
use Aws\S3\Enum\CannedAcl;
use Aws\Common\Enum\Region;
use Aws\Common\Exception\MultipartUploadException;
use Aws\S3\Model\MultipartUpload\UploadBuilder;
use Aws\S3\S3Client;

$access_key = '--access_key---';
$secret_key = '---secret_key---';

$region = Region::AP_NORTHEAST_1; // Region::AP_NORTHEAST_1 = Tokyo Region
$end_point_url = 'http://str.cloudn-service.com';
$bucket = 'devstore';

try {
 // S3
// $s3 = Aws::factory(array(
// 'key' => $access_key,
// 'secret' => $secret_key,
// 'base_url' => $end_point_url
// ))->get('s3');
 $config = array(
 'key' => $access_key,
 'secret' => $secret_key,
 'base_url' => $end_point_url
 );
 $s3 = S3Client::factory($config);
 $filename = 'P1000267.JPG';
 $transfer = UploadBuilder::newInstance()
 ->setClient($s3)
 ->setSource($filename)
 ->setBucket($bucket)
 ->setKey($filename)
 ->setMinPartSize ( 5 * Size::MB)
 ->build();

$transfer->upload();

} catch (MultipartUploadException $e) {
 echo $e->getPrevious();
 $transfer->abort();
}

実行させると、以下エラーとなってしまう。過去のフォーラムの投稿をみていると、AWS SDK for PHP 2のバグでBucketに”(ダブルコーティション)を利用しているとエラーになることがあるが、SDK自体は最新を使っている(と思う。たぶん)のでこのケースは考えにくい。S3に正常にアップロードできるので、あとはCloudn側しか原因が考えられない。


$ php upload-test2.php
Aws\S3\Exception\MalformedXMLException: AWS Error Code: MalformedXML, Status Code: 400, AWS Request ID: ACEE3A10F51811E2, AWS Error Type: client, AWS Error Message: The XML you provided was not well-formed or did not validate against our published schema., User-Agent: aws-sdk-php2/2.4.1 Guzzle/3.7.1 curl/7.19.7 PHP/5.3.3 MUP[

また、S3で対応しているブラウザからストレージにアップロードを行える『 Browser-Based Uploaded by POST』にはObject StorageではPOST Objectをサポートしていないので、使うことができない。(同じクラウドストレージ基盤を使用しているニフティクラウドストレージも未サポートでした。)

上記の件でCloudnのサポートから以下の回答を頂きました。結論分割送信は現時点で動作しないとことです。

こちらでも、調査確認させていただきましたが、お客様と同様のエラーとなることを確認
させていただきました。
現時点では、もうしわけございませんが、確固たる原因およびその対策について明確に返信
することがでません。
引き続き、調査を進めてまいります。情報にアップデートがございましたら、FAQサイトに
追記させていただきたく思います。

S3が一番使い勝手がいい。S3の場合、トラフィック課金があるので、トラフィック量によっては、コストが掛かる場合もありうる。アップロードは、ブラウザを使わず、Javaで実装がいいのか。

CompleteMultiUploadにバグがあった模様。バグfixする前も、S3では問題ない動作をしていたのは疑問が残るところ。

https://twitter.com/tatsuya6502/status/383525950907904000