クラウドインフラ構築記

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

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

さくらのBase Storageへfluentd(td-agent)を利用してnginxのログの転送に成功!

前回のブログで、fluentd(td-agent)を利用して、さくらのBase Storageへnginxのログの転送にエラーが出る件ですが、設定を試行錯誤した結果、無事転送できるようになりました。

修正したところは、fluentd起動にアクセスチェックを行わないように、check_apikey_on_startをfalseにしたところになります。

これは、IDCFの分散ストレージへのfluentd(td-agent)による転送の設定と同じでした。

fluentdの設定を一部記載しておきます。

<match nginx.access>
 type s3
aws_key_id XXXXXXX
 aws_sec_key YYYYYYYYYYYYYYYYYYYYYYYYYY
 s3_bucket sakuralog
check_apikey_on_start false
 s3_object_key_format %{path}%{time_slice}_%{index}.%{file_extension}
 s3_endpoint b.storage.sakura.ad.jp
 path logs/
 buffer_path /var/log/td-agent/s3
 flush_interval 1440m
 time_slice_format %Y%m%d-%H
</match>

ストレージ内をs3cmdで確認すると、確かに、ログが作成されていることが確認できました。


# s3cmd ls s3://sakuralog/logs/
 DIR s3://sakuralog/logs/20140204/
2014-02-06 13:08 635 s3://sakuralog/logs/20140206-04_0.gz
2014-02-06 13:08 2939 s3://sakuralog/logs/20140206-05_0.gz

相変わらず、Base Storageのコントロールパネルのオブジェクトからは確認できない。この辺りはおそらく未実装ではと予想される。

この状態でしばらく運用してみます。

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

さくらのストレージサービス Base Storageを試してみました。

2/3 さくらインターネットからストレージサービス Base Storageベータサービスが発表されました。

主な特徴として

  • S3互換ストレージ
  • 1オブジェクト最大4TBまで扱える。(S3だと5TBまで)
  • イレイジャーコーディングによるデータ保護 (S3はコピーを複数Azに作る方法とは別のようです)

まずはサインアップ

さくらインターネット会員登録

さくらの会員IDをもっていれば、ログインして電話認証

さくらインターネット会員登録-1

画面に記載された電話番号に電話を掛けて、音声案内で暗証番号が読み上げられるので、上記下部部分に暗証番号を入力してOK

Base Storageのページのコントロールパネルをクリック

さくらのクラウドとはコントロールパネルが異なるので注意。翌々は統一してもらいたいところ。

アカウント選択-1

アカウント選択-2

ネームスペース(S3だとBucket)を新規作成

パブリック、プライベートしか設定できず。S3ほどのアクセスポリシーの機能はなさそう。

作成   ネームスペース

管理   ネームスペース

アクセストークンのユーザ名が、AWSだとアクセスキー、トークンが、シークレットキーに相当します。

ここ に記載されている通りで、s3cmdでストレージへのアクセスは成功しました。

s3cmd lsでは表示されるのに、コントロールパネルの一覧にはなにも表示されない症状が表示されてしまいます。

次に、fluentd(td-agent)のs3-pluginをさくらのBase Storageに振り向けてみた。
aws_key_id、aws_sec_key、s3_bucket、s3_endpoint を変更。
SSLのワイルドカードSSLが「*.storage.sakura.ad.jp」なので、「s.b.storage.sakura.ad.jp」だとSSLでエラーが起きているようにみられる。td-agentが出力したエラーは下記となります。

2014-02-03 20:57:40 +0900 [error]: unexpected error error_class=OpenSSL::SSL::SSLError error=#<OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed>

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

2月参加予定の勉強会

2月参加予定の勉強会(セミナー)です。

2/4  AWSクラウドで安全なWebシステムを実現     「Deep Security&InfoCage SiteShellハンズオンセミナー」 申し込みサイト
2/4  第4回 OSS運用管理勉強会 申し込みサイト
2/15 JAWS-UG 千葉支部 Vol.3 -AWSスタートアップあるある  申し込みサイト
2/19 第4回さくらの夕べ 申し込みサイト
2/20 gumiStudy #18 申し込みサイト

勉強会(セミナー)参加レポートは後日ブログにアップします。

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

M3インスタンスタイプの値下げ

M3インスタンスタイプの価格が時間あたり $0.171から$0.113にプライスダウンのニュースリリースがAWsから発表されました。元記事はこちら

となっていますが、m3.medium、前世代のm1を比較してみました。

vCPU ECU メモリ インスタンスストレージ(GB) Linux/UNIX 料金
m3.medium 1 3 3.75  1 x 4 SSD $0.113/時間
m1.medium 1 2 3.75 1 x 410 $0.175/時間
m1.small 1 1 1.7 1 x 160 $0.088/時間
c3.large 2 7 3.75 2 x 16 SSD $0.192/時間

上記表から一目でわかる通り、m3.mediumをm1.smallに近い価格で利用できます。

おまえに、m3.mediumのインスタンスストレージはSSDなので、高速なIOを必要とする処理も十分対応できると思われます。

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東海岸リージョンのみ利用可能です。