クラウドインフラ構築記

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

2014年1月19日
から hiruta
0件のコメント

Riak CSをEC2で構築トライ中

分散ストレージソフトウェアであるRiak CSをEC2上への導入。(トライ中)

rpmも公開されていますが、chefから構築をあえて試してみました。

対象AWS EC2の環境は下記となります。

OS Ubuntu Server 12.04.3 LTS
AMI ami-3f32ac3e
インスタンスタイプ m1.small

ここ に記載されている通り、libssl0.9.8をインストールをします。

sudo apt-get install libssl0.9.8

ファイルディスクリプタの上限変更。

vi /etc/security/limits.conf

 


root soft nofile 65536
root hard nofile 65536
riak soft nofile 65536
riak hard nofile 65536

まずは、githubから、Riak CSのCookbookを取得します。

git clone https://github.com/basho/riak-cs-chef-cookbook.git

次に、chef-soloをEC2にインストールします。

knife solo prepare -i ~/ec2-riak-cs-key.pem ec2-user@xx.xx.xx.xx

次に、実行するレシピを編集します。

vi nodes/xx.xx.xxx.xx.json

 


{
 "run_list":[
 "recipe[yum]",
 "recipe[riak]",
 "recipe[riak-cs]",
 "recipe[riak-cs::stanchion]"
 ]
}

※同じレシピを、Amazon Linuxで実行するとyumのレシピのところで中断してしまいました。

次に、cookbookをドライラン。

knife solo cook -i ~/ec2-riak-cs-key.pem ubuntu@xx.xx.xx.xx -W

いよいよ、cookbooksの実行を行います。

knife solo cook -i ~/ec2-riak-cs-key.pem ubuntu@xx.xx.xx.xx

Riak CS起動時に、エラー発生。


[2014-01-19T07:41:43+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
Chef Client failed. 2 resources updated
[2014-01-19T07:41:43+00:00] ERROR: service[riak-cs] (riak-cs::default line 56) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of /etc/init.d/riak-cs start ----
STDOUT: sudo: unable to resolve host ip-172-16-60-47
Node 'riak-cs@172.16.60.47' not responding to pings.
riak-cs failed to start within 15 seconds,
see the output of 'riak-cs console' for more information.
If you want to wait longer, set the environment variable
WAIT_FOR_ERLANG to the number of seconds to wait.
STDERR: sudo: unable to resolve host ip-172-16-60-47
---- End output of /etc/init.d/riak-cs start ----
Ran /etc/init.d/riak-cs start returned 1
[2014-01-19T07:41:43+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
ERROR: RuntimeError: chef-solo failed. See output above.

そこで、Riak-CSの基盤であるRiakの動作確認をしました。

 sudo riak start

 

 sudo riak attach

Riakのコンソールを表示できましたので、Riakは問題ないようです。

</pre>
Remote Shell: Use "Ctrl-C a" to quit. q() or init:stop() will terminate the riak node.
Erlang R15B01 (erts-5.9.1) [source] [64-bit] [async-threads:0] [kernel-poll:false]

Eshell V5.9.1 (abort with ^G)
(riak@172.16.60.47)1>

riak、riak-cs自体は正常にインストールされているようでした。riak-admin member-statusとか表示できるところまでは確認しました。

2014年1月9日
から hiruta
0件のコメント

CloudFrontを利用してみました。

CloudFrontを使って、S3 Bucketのファイルの配信をしてみました。

まず、バケットポリシーの設定から (下記のぼかしている部分にCloudFrontを利用するS3 Bucketを指定します。)

s3_policy

CloudFrontのConsoleにある「Create Distributions」から新規設定を行います。

cloudfront_1

Origin Domain NameにCloudFrontに使うS3 Bucketを設定します。

cloudfront_2

 

CloudFrontのアクセスログも取れます。詳細なブログ記事が、こちら に載っています。

Alternate Domain Namesに、独自ドメインでCloudFrontを利用するときに利用します。独自ドメインをCloudFrontで使うには、DNSの設定が必須です。

また、独自ドメインを使って、CloudFrontにアクセスする場合、デフォルトの、*.cloudfront.netのSSL証明書ではなく、独自ドメイン用のSSL証明書が必要になります。(.cloudfront.netのSSL証明書を利用すると、ブラウザが警告画面になります。)

Geo Restrictioを利用して、配信するエッジを設定することが可能です。

2014年1月5日
から hiruta
0件のコメント

CentOS 6.5にOracle11gRelease2をインストール

CentOS 6.5 64bitにOTNでダウンロードできるOracle11gRelease2をインストールしてみました。

CentOS 6.5はESXi 5.1上に構築済、各種パッケージは最新化済とします。

必要なパッケージをもろもろインストールします。

yum install compat-libstdc++-33.x86_64 binutils elfutils-libelf elfutils-libelf-devel
yum install glibc glibc-common glibc-devel glibc-headers gcc gcc-c++ libaio
yum install libaio libgcc libstdc++ libstdc++ make sysstat unixODBC unixODBC-devel
yum install unzip

64bitのCentOSですが、compat-libstdc++33に関しては32bit版も必要でした。runInstallerコマンドを実行後、Oracleをインストールするために必要なパッケージが不足している場合は、インストールログに出力されます。

yum install   compat-libstdc++-33.i686

Oracle用のユーザ、グループの作成をします。

groupadd oinstall
groupadd dba
useradd -m -g oinstall -G dba -s /bin/bash oracle

カーネルパラメータの変更をします。

vi /etc/sysctl.conf

以下を追加します。

fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576</p>

ユーザの上限値の設定をします。

nano /etc/security/limits.conf 
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

 

 nano /etc/pam.d/login 

 

session required /lib64/security/pam_limits.so
session required pam_limits.so

 

nano /etc/profile.d/custom.sh 
#!/bin/bash
if [ $USER = &quot;oracle&quot; ]; then
 if [ $SHELL = &quot;/bin/ksh&quot; ]; then
 ulimit -p 16384
 ulimit -n 65536
 else
 ulimit -u 16384 -n 65536
 fi
fi

oraInst.locファイルの作成。サイレントインストールでは必要。

 vi oralnst.loc 

Oracle インベントリディレクトリの指定を行います。

inventory_loc=/opt/oracle/oraInventory
inst_group=oinstall

oracleユーザがoralnst.locファイルを参照できるようにします。

chown oracle:oinstall oralnst.loc
chmod 664 oralnst.loc
mkdir -p /opt/oracle/oradata
chown -R oracle:oinstall /opt/oracle
chmod -R 755 /opt/oracle/

以下でOracle11gR2がインストールされます。インストール中はログに書き込まれていきますので、tailfコマンド等でインストール過程の確認が行えます。インストール時のエラーなども出力されますので、インストールが中断する場合もログを参照すると解決の糸口になるかと思われます。

./runInstaller -silent -responseFile /usr/src/oracle/db.rsp 

orainstRoot.shとroot.shをインストール後手動で実行が必要です。

最後に、環境変数等の設定をします。

 vi ~/.bash_profile 
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2
export ORACLE_SID=orcl
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export PATH=$ORACLE_HOME/bin:$PAT
emctl start dbconsole

ブラウザ等からEnterprise Managerの画面が開ければOK

Oracle Enterprise Manager  SYS    データベース・インスタンス  orcl.localdomain

2014年1月2日
から hiruta
0件のコメント

Oracle VM VirtualBoxからAWSへ仮想マシンインポートを試したが….

Oracle VM VirtualBoxでは、VMDK(Virtual Machine Disk)を仮想ディスクとして作成できるので、VMImport for Linuxを使って、AWSにインポートできるのではと思い、試してみました。Oracle VM VirtualBoxの仮想マシンをAWSに取り込むことができると便利かと思いましたが、

結論、以下エラーが出て、失敗してしまいました。

ERROR: File uses unsupported compression algorithm 0

同じVMDKと言っても、vmware esxiの仮想ディスクとはファイル仕様が異なるからではと予想されます。(圧縮アルゴリムがサポートしていないから?)

フォーラムにはイメージフォーマットが対応していない場合、上記エラーが出力されます。

2013年12月17日
から hiruta
0件のコメント

vmwareからのマイグレーションツールが利用可能です

ESXiイメージ、Hyper-VイメージからAWSのインスタンスに移行できるツールが発表されました。

http://aws.typepad.com/aws/2013/12/vm-import-export-for-linux.html
インポートできるインスタンスタイプには以下に限定されます。

  • m3.xlarge
  • m3.2xlarge
  • hs1.8xlarge
  • hi1.4xlarge
  • cr1.8xlarge
  • cg1.4xlarge
  • cc2.8xlarge
  • cc1.4xlarge

※小規模向けのm1.small、m1.mediumには対応していません。インスタンスにインポートしたあとでも、m1.small等には変更できませんが、c3インスタンスには変更できるようです。(現在c3インスタンスがキャパ不足で、確認できません。)

VMDK、VHDをインポートするには、ec2-import-instanceコマンドを使用します。S3にVMDKをアップロードしたあとで、コンバート処理がバックグランドで走るようです。バックグランドの処理ステータスを確認するには、ec2-describe-conversion-tasksコマンドを利用します。

ec2-import-instanceで使用できる引数は下記となります。VPC内に構成することも可能です。

ec2-import-instance -t instance_type [-g group] -f file_format -a architecture [-p platform_name] -b s3_bucket_name [-o owner] -w secret_key [–prefix prefix] [–manifest-url url] [-s volume_size ] [-z availability_zone] [-d description] [–user-data user_data] [–user-data-file disk_image_filename] [–subnet subnet_id] [–private-ip-address ip_address] [–monitor] [–instance-initiated-shutdown-behavior behavior] [–x days] [–ignore-region-affinity] [–dry-run] [–no-upload] [–dont-verify-format]

ec2-import-instanceは、1つのVMDK、VHDファイルしか指定できませんので、OSディスク以外は、ec2-import-volumeコマンドにて、EBSにインポート後、Attach Diskする必要があります。

ec2-import-volumeで使用できる引数は下記となります。

ec2-import-volume disk_image -f file_format [-s volume_size] -z availability_zone [-b s3_bucket_name] [-o owner] -w secret_key [–prefix prefix] [–manifest-url url] [-d description] [–x days] [–ignore-region-affinity] [–dry-run] [–no-upload] [–dont-verify-format]

vmware環境で複数NICインターフェースもしくは、サブインターフェースを使っている環境をAWSに移行すると、プライマリIPアドレス以外は、無視されて、移行されないことを注意してください。プライマリIPアドレスについても、–private-ip-addressオプションを付けないと、AWS側でDHCPによりプライベートIPアドレスが割り当てられます。

2013年12月16日
から hiruta
0件のコメント

CloudTrailのログをStackDriverで解析してみました。

以前の記事「Cloud Tails設定編」の続きになります。

はじめに、StackDriverのFree版の登録を行います。

次に、StackDriverの登録の際、IAM Roleを作成するように言われますので、WEB上に記載してある通りに、IAM Roleを作成します。

Add Cloud Account

※StackDriverは、Add Cloud Accountにて、複数AWSアカウントが登録可能です。

先ほど作成してRoleのARNを入力する欄があるので、入力してます。

この時点で、紐付けられたAWSアカウントのインスタンス、EBSの数などがグラフ化されます。

いよいよCloudTrailの設定です。CloudTrailのSNS通知を有効にします。StackDriver用のSQSに流しこみのに必要のようです

cloudtrail

SNSの通知設定(この場合ctlog-to-stackdriver)で、ARN「arn:aws:sqs:us-east-1:152022173758:stacklog-consumer」でCreate Subsciptionします。

SNS

StackDriverの画面に戻り、SNS通知設定後のAWSの操作(この場合、EC2インスタンスの停止)が記録されていれば、成功です。多少タイムラグがあるようです。

Feed

Databases

また、ログがSumo logicで確認できるところまでは確認できました。Sumo logicの場合、Monitor機能があるようだが、現時点でどう操作して表示されるのか模索中です。

Sumo Logic

注意!!現時点では、CloudTrailは、US東海岸リージョンのみ利用可能です。

2013年12月14日
から hiruta
0件のコメント

12/13 第19回 AWS User Group – Japan 東京勉強会に参加しました

東京都品川区東品川2-2-28 タチバナビルで行われた第19回 AWS User Group – Japan 東京勉強会に参加しました。

ストレージゲートウェイVTL クラスメソッド 大瀧さん

テープドライブを仮想的に見せるサービス。ドライブは、iSCSI接続のIBM ULT3580-T5テープドライブとして認識。

Storage Gateway ボリューム型と同様、アプライアンスで一時的に保存し、非同期でS3に転送する仕組み。

S3から取り出した仮想テープは、Glacierに保存。※Glacierから復帰させるのは費用がかかる。

商用で確認取れているのは、NetBackupのみ。他のバックアップソフトでもAWS側で動作検証中とのこと。iSCSI接続なので、動作はされるとは思われる。

S3 Direct Hosting リクルート大井さん

「おしゃれ天気」アプリ(メディアテクノロジラボ)のバックエンドサーバーに当初EC2を使用していた。アクセスを集中する時間帯だけオートスケールでサーバー増設で対応。

S3で配信できないかの話

S3のコストの大半は『転送料』

S3にしても、月10円にならない。ただ、オートスケールから解放された。

マルチAZ対応!AWS上で稼働するスケールアウトNASストレージ Red Hat Storage RedHat平さん

OSS版GlusterFSの商用版「Redhat Storage」の話。

Redhat Enterprise Linx 6上のEC2インスタンスをまとめて、1つの仮想ディスクを構築。もちろん、Multi-AZで構築もできる。

HDEメールサービス 「アーカイブサービス」 小椋さん

メインストレージ S3

検索インデックス用は、S3のI/Oは、HTTPベース単体では遅いので、Writeに並列、Readはキャッシュでカバー

全文検索エンジンは、1から開発。ここはS3は使えない。当時はDynamoDBとかなかったので、mongoDB使用したとのこと。(S3は、PUTは高価なので、解析結果を保存には使えなかった)

Amazon S3  クラウドストレージサービス Amazon Simple Storage Service    アマゾン ウェブ サービス(AWS 日本語)

過去のメールはGlacierに保存。ただし、インデックスについては、S3に保存。Glacierから取り出す場合、取り出し料金がかかることに注意。

「WindowsでS3を便利に使うCUI(GUIじゃないよ)のクライアントを3つほど紹介します。Windowsならではのコケるポイントも踏まえて。」

dgtools、s3sync,s3cmdの紹介。

dgtoolsは商用サービスでは無料試用はNG。

s3cmdは、大きいサイズのファイル転送はこける。pythonなので、一部書き換えることで、可避されること。

※windows版pythonに対応していないライブラリの箇所をコメントアウトすることで可避できる。

S3アクセスコントロール 得上さん

ACL、BucketPolicy、IAMによるS3のアクセス制限についての話。以下クラスメソッドのブログを参照したとのこと。

http://dev.classmethod.jp/cloud/aws/s3-acl-wakewakame/

2013年12月11日
から hiruta
0件のコメント

12/10 【AWS勉強会】CM re:Growth Developers.IO Meetup 01に参加しました。

東京都千代田区麹町 1-6-4 SAPジャパンビル 11F で行われた勉強会に参加しました。

EMRからCloudFormation、設計書の自動生成まで幅広く話がありました。

FB_IMG_13866746289542547

※一部加筆途中の箇所がありますが、随時更新を行います。

運用担当者からみた、AWSへシステム移行する際に気にしてほしい5つのこと

  • オンプレサーバーからAWSに移行する場合、「FFTP使えますか」「データの取得」など使い勝手が変わることが予測される。移行計画にオペトレを含めるのが重要。
  • private AMI使わない、インスタンスストレージにデータを置かない
  • 監視はミドルウェアで。(CloudWatchは2週間しかログを取得できない。)
  • 保守では、AWSサポートを薦めていました。VPNもできたら。
  • 数年後も動作していることを考慮し、「後世に知見を残す」ことが重要。wiki、テキストファイルなどなんでもいいので。

「CloudWatchの使い方」

CPU使用率は、EC2のtopコマンドは不正確。これは、EC2はあくまで仮想サーバーなので、EC2で使えるリソースが決まっているので、これらを考慮して、返してくれるCloudWatchからの情報を信用するのがよい。

「6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話」(レジュメ上は「Storage Gateway仮想テープライブラリによるバックアップ戦略」)

※Storage Gateway VTL(Virtual-Tape-Library)の話は、今週金曜日のJAWS-UG東京の勉強会(天王洲アイル)で話されるようです。

月曜日オンエアの視聴者投票のプッシュ配信基盤構築の話。案件スタートから一週間(構築が土、日、月の「3日」)

CloudFormationのテンプレートは、VPC/ELB/EIP/EC2で分割するのがよいとのこと。機能ごとに分割するなど。途中でテンプレートの処理がこけてしまうと、ロールバックされてしまう・

オートスケールの上限を超えて、作ろうとしても、上限を超えて、インスタンスを作らないでも、CloudFormationはエラーは出ず、正常終了する。

6リージョンに展開する場合も、1リージョン用のテンプレートを使い回せる(インスタンス名等リージョンで異なるところは修正は必要だが。)

CloudFormationを使うことで、サーバーを落とす際も、Stackごと一括して落とせるので、落とし忘れの心配もない。

テンプレートを使い回せたことで、短納期で構築が可能とのことでした。

CloudFormationとSerfで作る全自動インフラ

片方のNATインスタンスが障害(デモではリブート)を起こしても、serfがMember Failedを検知して、プライベートVPCからのルーティングテーブルを書き換えて、問題なく通信が行える。

NATインスタンス2個(各VPC)※Serfで監視、プライベートVPCでPINGの疎通によるデモが行っていました。

CloudFormationはむろん、Elastic beanstalk、OpsWorksを使うことで、効率よくシステムを構築できます。先日EngineYard(OpsWorksに似たサービス)の入門セミナーに参加しましたが、時代は自動化の流れと実感。

6リージョンの配信基盤を構築したマネージャから見た話?(レジュメ上は、Amazon DynamoDBによるセッション永続化とフェイルオーバー)

Cloudfrontで分散配信の検討したが、Cloudfrontはユーザの近くのサーバーから配信されるので、同じエリアのユーザが大多数を占める(東京に近いところにユーザが集中している)場合、1DCに偏って、分散されない。

※DynamoDBの話も今後お願いします。

次回は、半年後に今回のような勉強会を開催されるとのことです。

2013年12月10日
から hiruta
0件のコメント

12/9 Engine Yard入門セミナーに参加しました。

本日(12/9)、Engine Yard入門セミナーに参加しました。

内容は

  • サンプルアプリケーションのtodoのデプロイ

Environement
engineyard上で識別するもの

  • サンプルアプリケーションのtodoのデプロイ

 シングル・ステージング、プロダクション・カスタムがある

Engine Yard Cloud - Environment trial_prd of application trial

デプロイされたアプリサーバーにはSSH接続も可能。SSH秘密鍵は事前にUIから登録しておく必要があります。あとからSSH秘密鍵を登録した場合、Applyで更新する必要があります。

アプリサーバー、データベースサーバー、HAProxyが自動で作成されます。現状だと、デプロイに時間がかかります。今後、時期は未定だが、デプロイ時間が早くなるとのこと。

  • アプリサーバーを追加するデモ

※トライアル版では、USリージョンのみだが、製品版では他のリージョンも選択できる。

  • snapshotを取得し、アプリケーションのクローンを作成するデモ
  • ey commandについて

gem install engineyardでインストール

  • eyコマンドでreceipeを編集してアプリケーションを更新するデモの実施

PaaSを使うメリット
ロードバランサー、アプリサーバー、データベースを構築することは可能
構築工数はPaaSを使った方が少なくなる。その上、24/365監視もしてくれる。

価格

AWS使用料 + 20%
※smallはengineyardの方が安くなる

サポート

日中帯は日本語OK
ただし、時間外は海外対応になるで、英語の方が対応が早くなるとのこと

ロードバランサー

HAProxyを使っている ※OpsworksもHAProxy使用しています。
状態はブラウザで確認できる

Statistics Report for HAProxy
ELBも使えるが、HAProxyの方を推奨

AWS OpsWorksもあるが差別化は?

OpsWorksもChefを使っているところは同じ
サービスの度合で差別化を図っている。運用面で。

ey-local

ローカル環境vargrant + VirtualBoxで動くey-localが提供されている
※gitが別途必要
ey-localは今後変わる予定

AWSサービスへの追従

需要があれば対応は随時行う。c3等の新インスタンスなど

今後について

現状デプロイに時間がかかるが、デプロイ速度の高速化が図れる予定になっている
Opsworksに似たサービスになる
UIが変わる予定
現状rubyインタープリタとして動作しているが、rubyインストールは不要になる予定

Azureへの対応

大阪リージョンができれば、国内DRなども可能になる
AWS、Azureなどクラウドインフラを意識することなくアプリケーションに専念できる

2013年12月3日
から hiruta
CloudTrail 設定編 はコメントを受け付けていません

CloudTrail 設定編

Cloud Trailを試してみました。Cloud Trailは、AWSサービスの操作履歴をログとして記録するようにできるサービスになります。

Cloud Trailの初期設定 「S3のバケットを作成する」Cloud Trailの設定をバケットを作成すると、バケットのpermissionの設定もしてくれて楽になります。既存のバケットにする場合Edit bucket policyでポリシーを編集する必要があります。

CloudTrail Management Console

作成完了。「Offにする」ボタンでCloud Trailsのログ出力をとめることも可能です。

CloudTrail Management Console_1

S3のバケットのプロパティ(Permission)のEdit Permission policyを開くと、パーミッションの設定がされていまいることがわかります。

S3 Management Console

EC2のインスタンスをLaunchしたり、止めたりするとS3の指定したフォルダ配下にログファイルが書かれれば成功です。JSONがgz形式に圧縮されてS3に保存されます。

S3 Management Console_10

ログを出力するようにするのはこんな感じで簡単にできてしまいます。ただし、ログ自体はJSON形式なので、テキストエディタで見ることは可能ですが、ログを追うとかには向いていません。実際、ログ解析をするにはサードパーティ製の分析ツール等を使うようになります。

※なお、Cloud Trailは現在US2リージョンのみで利用することが可能です。