AWS RDS勉強まとめ

・RDSの制限事項
バージョンが限定
キャパシティに上限
OSログインやファイルシステムへのアクセス不可
など

上記が許容できない場合はOn EC2かオンプレミスで構築

Multi-AZ
同期レプリケーションと自動フェイルオーバー
インスタンスやハードウェア障害時など

リードレプリカ
デフォルトで5台増設可能
マルチAZやクロスリージョン対応も可能
マスタと異なるタイプに設定可能
読み取り専用などに設定し、スループット向上

・スケールアップ、スケールダウン可能

・ストレージタイプ
汎用SSD
プロビジョンドIOPS
マグネティック

・バックアップ
自動スナップショット+トランザクションログをS3に保存
1日1回設定した時間に自動スナップショット取得、保存期間は0日~35日、手動スナップショットも可能

・リストア
スナップショットをもとにDBインスタンス作成
指定した時刻の状態にすることも可能(Point-in-Time)

・スナップショットはDBインスタンスのサイズと同サイズまでコスト無料
・自動スナップショットはDBインスタンス削除と同時に削除
※手動スナップショットは削除されないので、削除前に最終スナップショットをとること推奨
・スナップショット実行時にI/Oが停止するが、マルチAZの場合はスタンバイから取得するためアプリへの影響なし

リネーム
RDSに接続する際のエンドポイントを切り替える機能
旧本番インスタンスをリネーム→新本番インスタンス(スナップショットからリストア)をリネーム

・リネームの注意点
DNSはすぐに切り替わるわけでない
CloudWatchのMetricNameは引き継がない
マスターをリードレプリカの関係、タグ、スナップショットは引き継ぐ

・RDSにかかわる制限事項
RDSインスタンス数:40
1マスターあたりのリードレプリカ数:5
手動スナップショット数:100
DBインスタンスの合計ストレージ:100TB
必要に応じて上限緩和申請

・デフォルトではDBインスタンスに対するネットワークアクセスはオフ
→セキュリティグループで制御し、アクセス許可のポートなどを指定

・DBインスタンスとスナップショットの暗号化可能

オンデマンドDBインスタンスVSリザーブドインスタンス
リザーブドインスタンス:予約金を支払うことで価格割引

参考URL:https://www.slideshare.net/AmazonWebServicesJapan/20170510awsblackbeltrds

続きを読む

AWS EBS勉強まとめ

2017年新しい機能追加
==
・起動ボリュームの暗号化をサポート

スループット最適化HDD
高スループットを必要とするワークロード(MapReduce、Kafka、ETL処理、ログ処理、データウェアハウスなど)向けのタイプ; 1GBあたり月額0.054ドル
コールドHDD
同様のワークロードでアクセス頻度が低いユースケース向け; 1GBあたり月額0.03ドル
プロビジョンドIOPS SSD
I/O性能に依存するNoSQLデータベースやリレーショナルデータベース
汎用SSD
起動ボリューム、低レイテンシを要求するアプリケーション、開発・テスト環境
マグネティック
アクセス頻度の低いデータ
参考URL:https://aws.amazon.com/jp/blogs/news/amazon-ebs-update-new-cold-storage-and-throughput-options/

・汎用SSDボリュームのバーストクレジットの残高がCloudWatchで確認可能(残高はパーセンテージ)

・稼働中のEBSをオンラインのまま、ダウンタイムなく、変更することを可能にするエラスティックボリューム機能をリリース

・現行世代のインスタンスに関しては下記可能
①容量の拡張
②IOPS値の変更(PIOPSボリュームのみ)
③ボリュームタイプの変更(汎用SSD→コールドHDDなど)
→CloudWatchとCloudFormationやAWS Lambdaなどで自動化も可能

参考URL:https://aws.amazon.com/jp/blogs/news/amazon-ebs-update-new-elastic-volumes-change-everything/

・EBSスナップショットにコスト配分タグをサポート
→コスト集計ができるようになった
==

・EBSスナップショットはS3に保存
・AZごとに独立。同一AZのインスタンスのみから利用可能
→しかし、Snapshotから任意のAZに復元可能
・EC2に複数のEBSを接続可能だが、反対は不可

・EBSはレプリケートされているので、冗長化は不要
・セキュリティグループによる制御の対象外。全ポートを閉じてもEBSは利用できる

・インスタンスストアVSEBS
インスタンスストア:揮発性。EC2のローカルディスク。仮想マシンが止まるとデータ消去。一時的なデータの置き場所などに利用。
EBS:永続化ストレージ。OSやDBのデータなど永続化のデータ用。

・スペックは下記の順
プロビジョンドIOPS→汎用SSD→スループット最適化HDD→コールドHDD→マグネティック

SSDの種類は下記2種類
汎用SSD
I/O機能を一時的に3000IOPSまで上げるバースト機能付き
→I/O Creditが必要。CloudWatchで監視可能。上限(540万I/Oクレジット)に対するパーセント
容量:1GB~16TB
IOPS:ベースは100IOPS。最大10000IOPS
スループット:128MB/秒~160MB/秒

プロビジョンドIOPS
容量:4GB~16TB
IOPS:50IOPS/1GB。最大20000IOPS
スループット:最大320MB/秒

HDDの種類は下記2種類
→小さいデータのランダムアクセスになりがちな処理、起動ボリューム、データベース、ファイルサーバー等への利用は非推奨
→ログ処理などのシーケンシャルアクセス用途。アクセス頻度が低いもの

スループット最適化HDD
容量:500GB~16TB
IOPS:最大500IOPS
スループット:40MB/秒がベース

コールドHDD
容量:500GB~16TB
IOPS:最大250IOPS
スループット:12MB/秒がベース

マグネティック
磁気ディスクタイプ
容量:1GB~1TB
IOPS:100IOPS
スループット:40MB/秒~90MB/秒
I/Oリクエスト回数による課金が唯一ある

EBS最適化インスタンス
EC2とEBSの独立した帯域を確保し、I/O性能の安定化

事前ウォーミング
Snapshotから復元したボリュームへの初回アクセス時に設定

・EBSのパフォーマンス改善
①EC2インスタンス側のスループット
EBS最適化を有効にする
EBSからのスループットの上限値に到達していないかをCloudWatchのVolume Read/Write Bytesの合計値で確認

②EBSが処理できるIOPS
CloudWatchのVolume Read/Write Opsを参照

③各EBSボリュームのスループット
CloudWatchのVolume Read/Write Bytesの合計値で確認

・Snapshot
EBSのバックアップ機能
S3に保管。2世代目以降は増分バックアップ。1世代目を削除しても復元可能
ブロックレベルで圧縮して保管するため、圧縮後の容量に対して課金
データ整合性を保つため、静止点を設けることを推奨
別AZに移動したい場合や、容量変更などもSnapshot経由で行う

・バックアップと静止点
EBSへのI/O停止→Snapshot作成指示→作成指示レスポンス→EBSへのI/O再開
※Snapshotの作成完了前にEBSへのI/O再開してよい

・Snapshotの削除
1世代目を削除しても、1世代目にしかないデータは削除されない

・リージョン間コピーをサポート
リージョン間でのコピーも可能

参考URL:https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-amazon-elastic-block-store-ebs

続きを読む

AWSのEC2で行うAmazon Linuxの初期設定

AWSのEC2で行うAmazon Linuxの最低限の初期設定をまとめてみました。まだすべき設定が残っているとは思いますので、こちらを更新していければと思っています。

開発環境

  • Mac OS X(El Capitan) 10.11.6
  • Amazon Linux AMI 2017.09.1 (HVM), SSD Volume Type – ami-33c25b55

事前に用意しておく必要があるもの

  • 接続先EC2のパブリックDNS
  • デフォルトユーザ(Amazon Linuxの場合デフォルトはec2-user)
  • EC2からダウンロードした秘密鍵(デフォルトは****.pem)

参考

AWSのEC2にSSH接続

秘密鍵の配置設定

以下のコマンドを実行してEC2からダウンロードした秘密鍵を【.ssh】ディレクトリに配置し、管理しやすくします。

$ mv /Users/ユーザ名/Downloads/秘密鍵名.pem ~/.ssh/

秘密鍵の権限設定

SSHを機能させるためには秘密鍵が公開されていないことが必要ですので、以下のコマンドを実行てし権限の設定をします。

$ chmod 400 ~/.ssh/秘密鍵名.pem

SSH接続

以下のコマンドを実行してAWSのEC2にSSH接続します。

$ ssh -i ~/.ssh/秘密鍵名.pem ユーザ名@パブリックDNS

ログイン完了

以下が表示がされたらログイン完了です。

Last login: Mon Jan 15 17:27:41 2018 from ***.***.***.***

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.09-release-notes/

Amazon-linuxの初期設定

パッケージの更新

以下のコマンドを実行してAmazon-linuxのパッケージを更新します。

# パッケージの更新
$ sudo yum update -y

パッケージの自動更新設定

以下のコマンドを実行してyum-cronをインストールし、パッケージの自動更新を設定します。

# インストール
$ sudo yum install yum-cron -y

# 有効化確認
$ sudo chkconfig --list yum-cron

# 有効化
$ sudo chkconfig yum-cron on

# 自動更新設定
$ sudo sed -i "s/^apply_updates.*$/apply_updates = yes/g" /etc/yum/yum-cron.conf

# 起動
$ sudo service yum-cron start

# 起動確認
$ sudo service yum-cron status

タイムゾーンの変更

以下のコマンドを実行してインスタンスのローカルタイムとハードウェアクロックを変更します。

# 現在の設定確認
$ date

# ローカルタイムを【Japan】に変更
$ sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime

# ハードウェアクロックを【Japan】に変更
$ sudo sed -i s/ZONE=\"UTC\"/ZONE=\"Japan\"/g /etc/sysconfig/clock

# システム再起動
$ sudo reboot

# 現在の設定確認
$ date

文字コードを日本語に変更

以下のコマンドを実行して文字コードを日本語対応に変更します。

# 文字コードを日本語に変更
$ sudo sed -i s/LANG=\"en_US.UTF-8\"/LANG=\"ja_JP.UTF-8\"/g /etc/sysconfig/i18n

不要なサービスの停止

以下のコマンドを実行してGUIで不要なサービスの停止することができます。

# 不要サービスの一括設定(GUI)
$ sudo ntsysv

ユーザーアカウント追加

ユーザーアカウント追加

以下のコマンドを実行して新規ユーザーアカウントを追加します。今回は【newuser】として作成します。

# newuserを追加
$ sudo adduser newuser

sudo権限の変更

以下のコマンドを実行してsudoersファイルを安全に編集します。

# sudoersファイルの編集
$ sudo visudo

作成したnewuserグループをsudoコマンドがパスワード無しで実行できるように追記します。

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
+ %newuser       ALL=(ALL)       NOPASSWD: ALL

ユーザーアカウント切り替え

以下のコマンドを実行してnewuserへ切り替えます。

# newuserへ切り替え
$ sudo su - newuser

公開鍵認証設定

公開鍵認証用ファイルの作成

以下のコマンドを実行して公開鍵認証用のディレクトリとファイルを作成します。

# newuserのホームディレクトリに.sshディレクトリを作成
$ mkdir .ssh

# ファイルパーミッションを700(所有者のみ、読み取り、書き込み、削除が可能)に変更
$ chmod 700 .ssh

# authorized_keysを作成
$ touch .ssh/authorized_keys

# ファイルパーミッションを600(所有者のみ、読み取りおよび書き込みが可能)に変更
$ chmod 600 .ssh/authorized_keys

キーペアのパブリックキーをコピー

以下のコマンドを実行してパブリックキーをコンピュータから取得します。

# パブリックキーをコンピュータから取得
$ ssh-keygen -y

# キーを持つファイルのパスを指定
Enter file in which the key is (/Users/****/.ssh/id_rsa): /path_to_key_pair/my-key-pair.pem

表示されたインスタンスのパブリックキー(※以下は例)の末尾の【キーペア名】を除いてコピーします。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V
hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr
lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ
qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb
BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE

取得したキーペアのパブリックキーをペースト

以下のコマンドを実行して、コピーしたキーペアのパブリックキーを【authorized_keys】にペーストします。

#.ssh/authorized_keysを編集
$ vi .ssh/authorized_keys

デフォルトユーザ(ec2-user)を削除する場合

追加したユーザーアカウントでAWSのEC2にSSH再接続

以下のコマンドを実行してAWSのEC2にSSH再接続します。

$ ssh -i ~/.ssh/秘密鍵名.pem 追加したユーザーアカウント@パブリックDNS

ログイン完了

以下が表示がされたらログイン完了です。

Last login: Mon Jan 15 17:27:41 2018 from ***.***.***.***

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.09-release-notes/

デフォルトユーザーの削除

以下のコマンドを実行してデフォルトユーザ(ec2-user)とそのホームディレクトリを削除します。

# ec2-userとそのホームディレクトリの削除
$ sudo userdel -r ec2-user

ブログ記事の転載になります。

続きを読む

BlockSci環境構築(AWS編)

本記事はhkalodner氏が主に開発している BlockSci についての記事です。
まだまだ開発途中で情報が少ないので色々試行錯誤した記録を書き出してみたいと思います。

インストール

BlockSci公式ドキュメントにありますami-7cf38706を使ってEC2インスタンスにインストールします。
ami-7cf38706からインストールするとすでに必要なライブラリはセットアップされていて、またmainnetのデータをBlockSciでパースしたデータがすでに入っています。
初めから入ってるパースデータは/home/ubuntu/bitcoin/にあります。
このパースデータは2017/12/12 15:54:15までのデータでブロック高は498919です。
EC2が起動してから約3.5時間でデータが全て展開されデータ解析できるようになります。
bitcoindは入っていないので必要であれば別途インストールしましょう。
その際は残容量にご注意ください。

推奨スペック

項目 スペック
SSD 200GiB以上
メモリ 60GiB以上
インスタンス r4.2xlarge

testnetのデータを使う場合

AMIが作成された後にマージされたコードがあるためそちらを自身で修正する必要があるかもしれません。

BlockSci/src/parser/parser_configuration.cpp
ParserConfiguration<FileTag>::ParserConfiguration(const boost::filesystem::path &bitcoinDirectory_, const boost::filesystem::path &dataDirectory_) : ParserConfigurationBase(dataDirectory_), bitcoinDirectory(bitcoinDirectory_) { 
     auto bitcoinDirectoryString = bitcoinDirectory.native();
     if (bitcoinDirectoryString.find("litecoin") != std::string::npos || bitcoinDirectoryString.find("Litecoin") != std::string::npos) { 
         blockMagic = 0xdbb6c0fb;
         workHashFunction = doubleSha256;
     } else if (bitcoinDirectoryString.find("regtest") != std::string::npos) {
         blockMagic = 0xdab5bffa;
         workHashFunction = doubleSha256;
     } // diff ここから
       else if (bitcoinDirectoryString.find("testnet") != std::string::npos) {
         blockMagic = 0x0709110b;
         workHashFunction = doubleSha256;
     } // diff ここまで
       else {
         blockMagic = 0xd9b4bef9;
         workHashFunction = doubleSha256;
     }
 }
console
cd release
make
sudo make install

データ解析

ローカルマシンのターミナルでsshトンネルを使用してEC2インスタンスのjupyter notebookに接続できるようにします。

  1. ssh -i your_private_key.pem -N -L 8888:localhost:8888 ubuntu@your_url.amazonaws.com
  2. ブラウザを開きlocalhost:8888jupyter notebookが開きます。
  3. BlockSci Demo.ipynbが用意してあるので全てのセルを実行します。
  4. 初めに入っているパースデータを元にスクリプト形式別のトランザクション数のグラフやセカンドレイヤーのトランザクション数のグラフなどが描画されます。

jupyter notebookを公開したい場合

  1. ssh -i your_private_key.pem ubuntu@your_url.amazonaws.com でインスタンスに繋ぎます。
  2. jupyter notebook --generate-configをしてjupyter_notebook_config.pyを生成します。
  3. .jupyter/jupyter_notebook_config.pyをエディタで開きc.NotebookApp.ip = '*' を追記します。(許可するIPは適宜編集してください)
  4. sudo shutdown -r nowで再起動します。

以上でsshトンネルを使わなくてもjupyter notebookに接続可能になります。
公開設定する場合はセキュリティに配慮して、必ずAWS側でセキュリティグループを設定する等をしてください。

その他具体的なプログラムについては BlockSciデータ解析編 に書いております。


補足等ありましたら編集リクエストいただけると助かります。

続きを読む

AWS Snowball Edgeが我が家にやってきた。

概要

AWS Snowball Edgeを注文して自家用で使うべく注文した話です。
到着後に技術的に使用する話は別記事になっています

やっと来たSnowball

従来のAWS Snowballは専用のツールでデータを格納してS3とデータを出し入れするだけのストレージでした。
そこにAWS Snowball Edgeが登場。名前は似ているがこれは別物らしい。

NFS対応アップデート登場

AWS Snowball Edge登場当初は、ただのS3互換ローカルストレージでした。
2017年6月のアップデートでNFSサーバとして接続できるFile Interface機能が登場。
NFSサーバとしてローカルストレージにできる!?
申し込もう。

アマゾン時間

2016年内に全リージョンでGAとなるはずだったAWS Snowballなのに来る気配が無い。
2017年春、クローズドで一部パートナー等に出しているという話を聞くも自家用には借りられない。
2017年9月、やっと来た。
アマゾン時間はJSTと9ヶ月の時差があるようです。

申し込めないよSnowball

早速申し込もうとするもTokyoは日本の都道府県ではないと弾かれ申し込めません。
snow11.jpg

東京独立国構想も悪くないね!?
しかしどの都道府県を選択しても同じで申し込めず、サポートへ問い合わせ。

サポートからの返事は…
snow12.jpg

なんと言語設定をEnglishにして申し込んでくれというものでした。
ぶひー!!
(注:本不具合は2018年1月現在、修正済みです)

外人から連絡が><

申し込みを終えると、何やら外人からサポートケースを開かれ横文字で質問が来ました。
sn1.jpg

け!また横文字かよ。
しかも「質問に返答するまでSnowballを出荷しない」と書かれています。
ヤンキーらしいなぁ。
と思いつつ、後にこれに助けられることとなるのでここはおとなしく。

内容はSnowballはこういう仕様だけど、利用用途と環境に問題無いかという申し込みの確認です。
30TB程のデータがあり、スイッチには10Gbps RJ45とSFPポートがあるよと答えると、出荷の準備に入ると連絡が来ました。

大人気のSnowball Edge

しかし待てど暮らせど届かない。マネコンの状況も変化せず1週間。
サポートケースに更新がありました。
sn2.JPG

Snowball Edgeデバイスが大人気ですぐには出荷できないとのこと。
S3へデータを輸送するだけならこの注文をキャンセルして50TBか80TBのSnowballを注文してくれと書かれています。
それでは意味がないですし、来月のJAWS FESTA向けのネタなので急ぎませんから気長に待つことにします。

それは突然に

大人気で出荷できないよと連絡が来た翌日はJAWS-UG長野をリブートしに出かけていました。
長野の支部長と信州盛りの大量に盛られた蕎麦を食べていると、かーちゃんから怒りの電話が。
 「あんたまたアマゾンに何頼んだの。大きい荷物が届いたけど重くて動かせないよ」
と怒っています。

何か注文した記憶はありません。
ん!?!?
まさかとマネコンを開くと。。。

sn3.jpg
配達済みとか書かれています。
どうやらそのようです。長野遠征中につき2日間おあずけとなりました><

普通の宅配便として届くSnowball

日通警備さんとかが警備しながら持ってくるのかなと思いきや、宅配便の荷物として普通に届きました。
日本では西濃運輸さんが担当されているようです。
sn4.jpg

アクティベーションしないと使えませんし、配送は適当でも問題ないのでしょうね。
メソさんのブログによると欧州では玄関先に放置配達されたようですし対面受取なだけ日本はマシかも?

しかも外箱などは無く、筐体へ配達伝票と納品書がそのまま貼り付けられて届きます。
確かに物理的衝撃に強い構造ですから梱包不要でしょうけど、なんか面白いですね。

Eインクは?

上部にはEインクの表示パネルがあり、配達先等が表示されています。
sn5.jpg

電源が無くても光るんですね。背面のバックライト?はずっと光っていました。
しかし西濃運輸さんが非対応なのか、通常の宅配伝票が筐体側面に貼られています。

開封の儀

SnowBall Edgeには3つの扉があります。

上部を開くと電源ケーブルが収納されているのでこれを取り出します。
sn6.jpg
付属品はこれだけです。
ネットワークケーブルは必要な物を自前で準備しなければなりません。

背面を開くとネットワークポートと電源コネクタがあるので、ネットワークケーブルと先ほど取り出した電源ケーブルを接続します。
sn7.jpg
図解で「電源接続時は蓋を上げた状態で使用し閉じるな」と書かれています。

当然ですよね。
sn8.jpg
開けるとこの状態です。
これを閉じて使用したら発熱ですぐに熱暴走することでしょう。

前面を開くと電源スイッチと操作パネルがあります。
sn9.jpg
電源ボタンを押すと動き出します。

中身はHDDだった

ゴゴゴゴゴゴとHDD駆動音らしき音がします。
どうやらSSD等の半導体記憶媒体ではないようです。
衝撃に耐えるのは停止状態のみで良いわけですから、HDDでも要件を満たせますからね。

返却もふつうの宅配便

使用後に電源を切ると、筐体上面のEインクは返送用の宛名ラベルになります。
sn10.jpg

しかし、これまたEインク非対応であります。米国のみのようですね。
同梱されている西濃運輸さんの印字済み伝票を筐体に貼り付けます。
sn11.jpg

あとは普通の宅配便同様、西濃運輸さんへ集荷を依頼します。
いつもの運ちゃんが集荷に来て回収されます。

返却処理には時間がかかる

AWSのデータセンタは非公開のため、西濃運輸さんの拠点へ届けられます。
その後、AWSへ輸送されますがこの一連の処理が完了するまで1週間かかります。
sn15.jpg
処理が完了すると、マネコンのジョブステータスが完了済みとなり終了します。

料金の計算方法

Snowball Edgeは300ドルの基本料金に10日間の利用期間が含まれています。
届いた当日と、集荷された日は利用日に含まれません。
届いた翌日から集荷される前日までが利用期間となります。
よって、今回のように不在なのに家族が受け取ると残念なことになります。
また、送料別途で往復で120ドルかかりますから最低利用料金420ドルと覚えておきましょう。

まとめ

どんな物流なのか楽しみにしていましたが、普通の宅配便で届くことがわかりました。
一般のご家庭にも安心して注文できますね。一家に一台 AWS Snowball Edge.
利用開始後の技術的な話は別記事になっています

続きを読む

いきなり13%のシェア 「MaaStodon」とは何か

… インスタンスでユーザー数は約12万4000人。Octodonと合わせると13万人を超え、先日100万ユーザーになったばかりのマストドン全体の13%を占める。 MaaStodonのサーバは全てIntel Xeon、SSDで動作しておりフランスにホスティング。インスタンスの一部をAWSやGoogle Cloudにプッシュするようなことはしないという。 続きを読む

いきなり全マストドンユーザーの13%を占める「MaaStodon」とは何か

MaaStodonのサーバは全てIntel Xeon、SSDで動作しておりフランスにホスティング。インスタンスの一部をAWSやGoogle Cloudにプッシュするようなことはしないという。 photo. マストドンのホスティングサービスとしては、ポルトガルのMasto.host、日本のムトー、Hostdonがあるが、それに続く4つ目だ。 この連載を「連載記事 … 続きを読む

Amazon Linux 2 に elasticsearchのbenchmarkツールrallyをインストールして、Amazon Elasticsearch Serviceの性能評価を行う.

Amazon Linux 2 に elasticsearchのbenchmarkツールrallyをインストールして、Amazon Elasticsearch Serviceの性能評価を行う.

Amazon Elasticssearch Serviceのパフォーマンスを調査する為に、Elasticsearchが提供するベンチマークツールのrallyを導入したEC2インスタンスを立ち上げ、性能評価を行います。

AMIは、最近発表された
Amazon Linux 2 LTS Candidate AMI 2017.12.0 (HVM), SSD Volume Type - ami-7707a10f
を利用してみます.

rallyは、python3上で動作する為、python3をインストールが必要になります.
AMIとして利用するAmazon Linux2に標準でインストールされているpythonは、version2系(Python 2.7.5)の為、python3系をインストールします。

$ sudo amazon-linux-extras install python3
$ python3 --version
Python 3.6.2

rally用のpython3環境とする為、python3の仮想環境を作ります.

$ python3 -m vent .py-esrally-venv
$ source .py-esrally-venv/bin/activate

rallyのインストール,実行時に不足するライブラリをインストールします.

$ sudo yum install gcc python3-devel git

rallyをインストールします.

(.py-esrally-venv) $ pip3 install esrally
(.py-esrally-venv) $ esrally configure
 # Press Enter to skip. 

elasticsearch serviceへのアクセスは、 Signature Version 4でアクセスする必要がある為、rallyから直接接続するすることができません. そこで Elasticsearch serviceにアクセスする為のproxyを立ち上げます.
今回は、 nodeベースのproxy aws-es-proxyを利用します.

nodeをインストールする為にnvmのインストールを行い、その後、nodeをインストールし、 aws-es-proxyを導入します.

(.py-esrally-venv) $ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
(.py-esrally-venv) $ source .bashrc
(.py-esrally-venv) $ nvm install  v8.9.3
(.py-esrally-venv) $ npm init
(.py-esrally-venv) $ npm install --save aws-es-proxy

proxyを起動します.
なお、aws credentials情報(access_key_id, aws_secret_access_key)は、aws cliで設定しておいてください.

(.py-esrally-venv) $ node_modules/aws-es-proxy/bin/aws-es-proxy --port 9200 --profile default --region [region]  [endpoint]

proxy経由でElasticsearch Serviceにアクセスできることを確認します.

(.py-esrally-venv) $ curl http://localhost:9200/

rallyを実行します. target-hostsとして、proxyのアドレスを指定します。

(.py-esrally-venv) $ esrally --pipeline=benchmark-only --target-hosts=localhost:9200
    ____        ____
   / __ ____ _/ / /_  __
  / /_/ / __ `/ / / / / /
 / _, _/ /_/ / / / /_/ /
/_/ |_|__,_/_/_/__, /
                /____/

[INFO] Writing logs to /home/xxxxx/.rally/logs/rally_out_20171225T052238Z.log

************************************************************************
************** WARNING: A dark dungeon lies ahead of you  **************
************************************************************************

Rally does not have control over the configuration of the benchmarked
Elasticsearch cluster.

Be aware that results may be misleading due to problems with the setup.
Rally is also not able to gather lots of metrics at all (like CPU usage
of the benchmarked cluster) or may even produce misleading metrics (like
the index size).

************************************************************************
****** Use this pipeline only if you are aware of the tradeoffs.  ******
*************************** Watch your step! ***************************
************************************************************************
    :
  • 参考
    利用させていただいたproxy.
    https://github.com/joona/aws-es-proxy
    esrallyのドキュメント
    https://esrally.readthedocs.io/en/latest/index.html

  • 残件
    Amazon Elasticsearch Serviceの構成変更での性能評価を目的としている為、異なるproxyを利用する必要はないと想定しているが、go言語で実装された aws-es-proxyを使った場合の比較などもやっておくべきかもしれない. proxyで、パフォーマンスに差が出ると、性能指標の基準が低くなってしまうはず..
    trackを指定することで、異なるデータパターンでの評価を行うことができるので、サービスでの利用方法に近いtrackでの評価を実施すべき..デフォルト(オプション指定無)は、geonames.

  • 備考
    インスタンスタイプがt2.microだと、途中で異常終了してしまうようです. 評価中、CPU Creditを、使い切って途中で異常終了しました.
    また、Amazon Elasticsearch Service側の構成として、簡単に1台で立ち上げられますが、1台構成の場合、StatusがYellowの為、デフォルトでは、測定できません。 以下のようなERRORを出力して、測定が中断します.
    [ERROR] Cannot race. ('Could not execute benchmark', Cluster did not reach status [green]. Last reached status: [yellow])
    どうしても1台構成で実行する場合は、rally実行時に、 --cluster-health=yellow optionを付与する必要があります。

続きを読む

AWSの料金表

AWSの料金ってAWSのページあるのですが探すの大変だったり月額だとのいくらかかるの?ってことがよくあると思います。
全タイプ網羅したかったのですが多いので主に私が使う頻度が高いタイプに限ります。。
そのうち追加できたらしますw

正確な見積もりはAWS料金シュミレーターがおすすめです。
AWS 料金シュミレーター

この記事はエクセルの表をマークダウンに変換してくれる便利なWEBサイト使いました。
Tables Generator

Tecotec Advent Calendar 21日目の投稿です。

  • 2017.12.21 create

基本情報

レート
1ドル = 112.99435

2017/12/20現在のレート

月の時間
1ヶ月 = 720h

で計算してます。

EC2

一般的な目的 – 現行世代

タイプ vCPU ECU メモリ(GiB) インスタンスストレージ(GB) Linux/UNIX 1時間料金 月額料金/ドル 月額料金/円
t2.nano 1 可変 0.5 EBS のみ $0.0076 $5.472 ¥618.31
t2.micro 1 可変 1 EBS のみ $0.0152 $10.944 ¥1,236.61
t2.small 1 可変 2 EBS のみ $0.0304 $21.888 ¥2,473.22
t2.medium 2 可変 4 EBS のみ $0.0608 $43.776 ¥4,946.44
t2.large 2 可変 8 EBS のみ $0.1216 $87.552 ¥9,892.88
t2.xlarge 4 可変 16 EBS のみ $0.2432 $175.104 ¥19,785.76
t2.2xlarge 8 可変 32 EBS のみ $0.4864 $350.208 ¥39,571.53
m4.large 2 6.5 8 EBS のみ $0.1290 $92.880 ¥10,494.92
m4.xlarge 4 13 16 EBS のみ $0.2580 $185.760 ¥20,989.83
m4.2xlarge 8 26 32 EBS のみ $0.5160 $371.520 ¥41,979.66
m4.4xlarge 16 53.5 64 EBS のみ $1.0320 $743.040 ¥83,959.32
m4.10xlarge 40 124.5 160 EBS のみ $2.5800 $1,857.600 ¥209,898.30
m4.16xlarge 64 188 256 EBS のみ $4.1280 $2,972.160 ¥335,837.29
m3.medium 1 3 3.75 1 x 4 SSD $0.0960 $69.120 ¥7,810.17
m3.large 2 6.5 7.5 1 x 32 SSD $0.1930 $138.960 ¥15,701.69
m3.xlarge 4 13 15 2 x 40 SSD $0.3850 $277.200 ¥31,322.03
m3.2xlarge 8 26 30 2 x 80 SSD $0.7700 $554.400 ¥62,644.07

*コンピューティング最適化 – 現行世代 *

タイプ vCPU ECU メモリ(GiB) インスタンスストレージ(GB) Linux/UNIX 1時間料金 月額料金/ドル 月額料金/円
c4.large 2 8 3.75 EBS のみ $0.1260 $90.720 ¥10,250.85
c4.xlarge 4 16 7.5 EBS のみ $0.2520 $181.440 ¥20,501.69
c4.2xlarge 8 31 15 EBS のみ $0.5040 $362.880 ¥41,003.39
c4.4xlarge 16 62 30 EBS のみ $1.0080 $725.760 ¥82,006.78
c4.8xlarge 36 132 60 EBS のみ $2.0160 $1,451.520 ¥164,013.56
c3.large 2 7 3.75 2 x 16 SSD $0.1280 $92.160 ¥10,413.56
c3.xlarge 4 14 7.5 2 x 40 SSD $0.2550 $183.600 ¥20,745.76
c3.2xlarge 8 28 15 2 x 80 SSD $0.5110 $367.920 ¥41,572.88
c3.4xlarge 16 55 30 2 x 160 SSD $1.0210 $735.120 ¥83,064.41
c3.8xlarge 32 108 60 2 x 320 SSD $2.0430 $1,470.960 ¥166,210.17

メモリの最適化 – 現行世代

タイプ vCPU ECU メモリ(GiB) インスタンスストレージ(GB) Linux/UNIX 1時間料金 月額料金/ドル 月額料金/円
r3.large 2 6.5 15 1 x 32 SSD $0.200 $144.00 ¥16,271.19
r3.xlarge 4 13 30.5 1 x 80 SSD $0.399 $287.28 ¥32,461.02
r3.2xlarge 8 26 61 1 x 160 SSD $0.798 $574.56 ¥64,922.03
r3.4xlarge 16 52 122 1 x 320 SSD $1.596 $1,149.12 ¥129,844.07
r3.8xlarge 32 104 244 2 x 320 SSD $3.192 $2,298.24 ¥259,688.13
r4.large 2 7 15.25 EBS のみ $0.160 $115.20 ¥13,016.95
r4.xlarge 4 13.5 30.5 EBS のみ $0.320 $230.40 ¥26,033.90
r4.2xlarge 8 27 61 EBS のみ $0.640 $460.80 ¥52,067.80
r4.4xlarge 16 53 122 EBS のみ $1.280 $921.60 ¥104,135.59
r4.8xlarge 32 99 244 EBS のみ $2.560 $1,843.20 ¥208,271.19
r4.16xlarge 64 195 488 EBS のみ $5.120 $3,686.40 ¥416,542.37

RDS Aurora

スタンダードインスタンス – 現行世代

タイプ 時間あたりの料金/ドル 月額料金/ドル 月額料金/円
db.t2.small $0.063 $45.36 ¥5,125.42
db.t2.medium $0.125 $90.00 ¥10,169.49

メモリ最適化インスタンス – 現行世代

タイプ 時間あたりの料金/ドル 月額料金 月額料金/円
db.r3.large $0.35 $252.00 ¥28,474.58
db.r3.xlarge $0.70 $504.00 ¥56,949.15
db.r3.2xlarge $1.40 $1,008.00 ¥113,898.30
db.r3.4xlarge $2.80 $2,016.00 ¥227,796.61
db.r3.8xlarge $5.60 $4,032.00 ¥455,593.22
db.r4.large $0.35 $252.00 ¥28,474.58
db.r4.xlarge $0.70 $504.00 ¥56,949.15
db.r4.2xlarge $1.40 $1,008.00 ¥113,898.30
db.r4.4xlarge $2.80 $2,016.00 ¥227,796.61
db.r4.8xlarge $5.60 $4,032.00 ¥455,593.22
db.r4.16xlarge $11.20 $8,064.00 ¥911,186.44

RDS MySQL

シングルAZ
スタンダードインスタンス – 現行世代

タイプ 時間あたりの料金/ドル 月額料金/ドル 月額料金/円
db.m3.medium $0.120 $86.40 ¥9,762.71
db.m3.large $0.240 $172.80 ¥19,525.42
db.m3.xlarge $0.485 $349.20 ¥39,457.63
db.m3.2xlarge $0.965 $694.80 ¥78,508.47
db.m4.large $0.254 $182.88 ¥20,664.41
db.m4.xlarge $0.508 $365.76 ¥41,328.81
db.m4.2xlarge $1.017 $732.24 ¥82,738.98
db.m4.4xlarge $2.034 $1,464.48 ¥165,477.97
db.m4.10xlarge $5.087 $3,662.64 ¥413,857.63
db.m4.16xlarge $8.128 $5,852.16 ¥661,261.02
db.t2.micro $0.026 $18.72 ¥2,115.25
db.t2.small $0.052 $37.44 ¥4,230.51
db.t2.medium $0.104 $74.88 ¥8,461.02
db.t2.large $0.209 $150.48 ¥17,003.39
db.t2.xlarge $0.418 $300.96 ¥34,006.78
db.t2.2xlarge $0.836 $601.92 ¥68,013.56

メモリ最適化インスタンス – 現行世代

タイプ 時間あたりの料金/ドル 月額料金 月額料金/円
db.r3.large $0.285 $205.20 ¥23,186.44
db.r3.xlarge $0.570 $410.40 ¥46,372.88
db.r3.2xlarge $1.135 $817.20 ¥92,338.98
db.r3.4xlarge $2.270 $1,634.40 ¥184,677.97
db.r3.8xlarge $4.540 $3,268.80 ¥369,355.93
db.r4.large $0.285 $205.20 ¥23,186.44
db.r4.xlarge $0.570 $410.40 ¥46,372.88
db.r4.2xlarge $1.141 $821.52 ¥92,827.12
db.r4.4xlarge $2.282 $1,643.04 ¥185,654.24
db.r4.8xlarge $4.563 $3,285.36 ¥371,227.12
db.r4.16xlarge $9.126 $6,570.72 ¥742,454.24

マルチAZ
スタンダードインスタンス – 現行世代

タイプ 時間あたりの料金/ドル 月額料金/ドル 月額料金/円
db.m3.medium $0.240 $172.80 ¥19,525.42
db.m3.large $0.480 $345.60 ¥39,050.85
db.m3.xlarge $0.970 $698.40 ¥78,915.25
db.m3.2xlarge $1.930 $1,389.60 ¥157,016.95
db.m4.large $0.508 $365.76 ¥41,328.81
db.m4.xlarge $1.016 $731.52 ¥82,657.63
db.m4.2xlarge $2.034 $1,464.48 ¥165,477.97
db.m4.4xlarge $4.068 $2,928.96 ¥330,955.93
db.m4.10xlarge $10.173 $7,324.56 ¥827,633.90
db.m4.16xlarge $16.256 $11,704.32 ¥1,322,522.03
db.t2.micro $0.052 $37.44 ¥4,230.51
db.t2.small $0.104 $74.88 ¥8,461.02
db.t2.medium $0.208 $149.76 ¥16,922.03
db.t2.large $0.418 $300.96 ¥34,006.78
db.t2.xlarge $0.836 $601.92 ¥68,013.56
db.t2.2xlarge $1.672 $1,203.84 ¥136,027.12

メモリ最適化インスタンス – 現行世代

タイプ 時間あたりの料金/ドル 月額料金/ドル 月額料金/円
db.r3.large $0.570 $410.40 ¥46,372.88
db.r3.xlarge $1.140 $820.80 ¥92,745.76
db.r3.2xlarge $2.270 $1,634.40 ¥184,677.97
db.r3.4xlarge $4.540 $3,268.80 ¥369,355.93
db.r3.8xlarge $9.080 $6,537.60 ¥738,711.86
db.r4.large $0.570 $410.40 ¥46,372.88
db.r4.xlarge $1.141 $821.52 ¥92,827.12
db.r4.2xlarge $2.282 $1,643.04 ¥185,654.24
db.r4.4xlarge $4.563 $3,285.36 ¥371,227.12
db.r4.8xlarge $9.126 $6,570.72 ¥742,454.24
db.r4.16xlarge $18.253 $13,142.16 ¥1,484,989.83

続きを読む

AWS UbuntuへPythonをコンパイルして導入する手順(virtualenv)

概要

  • AWS EC2のAWS提供 Ubuntu AMIへ現時点で最新安定版のPython3.6.3を導入します

    • ターゲットイメージ:Ubuntu Server 16.04 LTS (HVM), SSD Volume Type
  • パッケージではなく、ソースコンパイルします
  • 初期状態でPython2系、Python3系も導入済みのため、virtualenvで環境分離します

ダウンロードページ

ディレクトリ

すべてホーム配下のlocalディレクトリへ配置します。今回は下記のようにしてみました。

Path 内容
~/local/src/Python-3.6.3 ダウンロードしたソースを展開
~/local/lib/Python-3.6.3 ビルドしたモジュール出力先
~/local/p363/ virtualenvが指す場所

手順

  • コマンドを記述します
  • コマンドの実行結果を表現する場合はプロンプト付きでコマンドを記述します

EC2インスタンスを起動します

  • Ubuntu Server 16.04 LTS

    • ターゲットイメージ:Ubuntu Server 16.04 LTS (HVM), SSD Volume Type

必要パッケージインストール

sudo apt update
sudo apt upgrade -y
sudo apt install build-essential zlib1g-dev libssl-dev libffi-dev libsqlite3-dev libreadline-dev libbz2-dev libgdbm-dev liblz-dev -y

ソースダウンロードと展開

mkdir -p ~/local/src
cd ~/local/src

wget -qO- https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz | tar zxf -

コンパイル準備とコンパイルとインストール

cd Python-3.6.3/
./configure --enable-optimizations --prefix=$HOME/local/lib/Python-3.6.3
make
make install

virtualenvによる配置

~/local/lib/Python-3.6.3/bin/pip3 install virtualenv
~/local/lib/Python-3.6.3/bin/virtualenv --python ~/local/lib/Python-3.6.3/bin/python3 ~/local/p363

確認

activateを実行(source)することでpythonが指す場所が変化、プロンプトにディレクトリ(p363)が表示されます
(戻す時はdeactivate)

$ source ~/local/p363/bin/activate
(p363) $ python --version
Python 3.6.3

ログインスクリプトへ追加

echo 'source ~/local/p363/bin/activate' >> ~/.profile

続きを読む