InspectorでAmazon Linux 2の脆弱性診断に対応したのでやってみた

今回は Amazon Linux 2 LTS Candidate AMI 2017.12.0 (HVM), SSD Volume Type のAMIからインスタンスを作成します。なお、自動的にパッケージを更新されないようにユーザデータに repo_upgrade: none を設定します。SSMを利用するため、ロールに AmazonEC2RoleforSSM のAWSマネージドポリシーをあてます。 続きを読む

iperfでAWSのEC2インスタンスの速度を測定した

自己紹介

最近本腰を入れて技術の勉強をするようになりました、dtd root と言います。
私の投稿では、主に私の勉強の過程を記録し、可能ならば皆さまに知識を分けていただこうという趣旨の元投稿を行います。
至らない点や間違いが数多くありますが、どうぞご容赦ください。

AWSでTCPの最大レートを測定

環境は以下

測定リージョン
東京-東京間
東京-ソウル間

インスタンスタイプ
t2.micro

OS
Amazon Linux AMI 2017.09.1 (HVM), SSD Volume Type

入力コマンド

クライアント側
iperf -c -t 60 -p

※宛先IPはパブリックIPです。

サーバー側
iperf -s -p

実行結果
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-60.2 sec 235 MBytes 32.8 Mbits/sec
[ 5] 0.0-60.0 sec 3.37 GBytes 482 Mbits/sec

Qita1.png

所感
ソウルを跨いだ方が帯域幅が低くなるのは当然の結果かと思われますが、理論値の算出方法がどうにもわかりませんでした。
ググってみてもうまくAWS-EC2の理論帯域が出てこないので、そちらとの比較が出来なかったのが残念だと思っています。
そしてこの値はどうすれば良くなるのか、どうすれば悪くなるのか、といったところも全く分からない状況なので、
今後手探りで知識を得ていければいいなと思っています。

参考文献

[1]Amazon Web Services 基礎からのネットワーク&サーバー構築
[2]ネットワーク測定ツールiperfの使い
https://qiita.com/takish/items/bff7a1df712d475432df
[3]EC2でiperfを使ってネットワークスループットを計測してみた。
https://dev.classmethod.jp/etc/ec2-iperf/

続きを読む

HDP 2.6.3をAWSにインストール 乞食版

ゴール

AWSの超安いインスタンスに、HDPをインストールして遊ぶ。

インスタンス初期化

Ambari

t2.nano

[ec2-user@ip-172-31 ~]$ free -m
              total        used        free      shared  buff/cache   available
Mem:            990          80         731          12         179         739
Swap:             0           0           0

AWS Amazon Linux スワップファイル作成によりSwap領域のサイズを増やす
https://qiita.com/na0AaooQ/items/278a11ed905995bd16af

現在は1GBあるので、8GBのSwapメモリを追加

grep Mem /proc/meminfo
grep Swap /proc/meminfo
free
uname -a
# /swapfile1 に保存
sudo dd if=/dev/zero of=/swapfile1 bs=1M count=8192
grep Swap /proc/meminfo

ll /swapfile1
sudo chmod 600 /swapfile1
sudo mkswap /swapfile1
ll /swapfile1
swapon -s
free
sudo swapon /swapfile1
free
grep Swap /proc/meminfo

メモリ追加しました。

[ec2-user@ip-172-31 ~]$ free -m
              total        used        free      shared  buff/cache   available
Mem:            990          77          64          12         848         731
Swap:          3083           0        3083
[ec2-user@ip-172-31 ~]$

t2.micro instance作成

Ambari:1台
Master:1台
Slave:3台

image.png

注意事項

RHEL 7.4

Red Hat Enterprise Linux 7.4 (HVM), SSD Volume Type – ami-26ebbc5c

AWS setting

t2.micro instance

Storage setups —

Ambari: EBS 15G
NN/DN: EBS 20G

image.png

image.png

セキュリティ設定

All Traffic, Allow, HDPのセキュリティグループID指定(内部通信を全部許可)
All Traffic, Allow, MyIP (管理者のIPを許可)
これでOK

ssh private key

scp -i amuisekey.pem amuisekey.pem ec2-user@ec2-54-234-94-128.compute-1.amazonaws.com:~/.ssh/id_rsa
# 全部サーバーにアップロード

hosts

自分のMBP /etc/hosts

    127.0.0.1 localhost.localdomain localhost
    ::1 localhost6.localdomain6 localhost6

#外部IP
    10.110.35.23 hdpmaster1.hdp.hadoop hdpmaster1
    10.191.45.41 hdpmaster2.hdp.hadoop hdpmaster2
    10.151.94.30 hdpslave1.hdp.hadoop hdpslave1
    10.151.87.239 hdpslave2.hdp.hadoop hdpslave2
    10.70.78.233 hdpslave3.hdp.hadoop hdpslave3
    10.151.22.30 ambarimaster.hdp.hadoop ambarimaster

AWSサーバーの /etc/hosts

    127.0.0.1 localhost.localdomain localhost
    ::1 localhost6.localdomain6 localhost6

#外部IP
    10.110.35.23 hdpmaster1.hdp.hadoop hdpmaster1
    10.191.45.41 hdpmaster2.hdp.hadoop hdpmaster2
    10.151.94.30 hdpslave1.hdp.hadoop hdpslave1
    10.151.87.239 hdpslave2.hdp.hadoop hdpslave2
    10.70.78.233 hdpslave3.hdp.hadoop hdpslave3
    10.151.22.30 ambarimaster.hdp.hadoop ambarimaster

Install

https://community.hortonworks.com/articles/14512/ambari-on-ec2.html

image.png

続きを読む

Ubuntu 16.04 on AWSでリモートデスクトップを実現する(Macから接続)

前置き

Ubuntu 16.04 on AWSでリモートデスクトップ接続を実現しようとしたらハマったのでメモ。
Mac <-> UbuntuなのでVNCとかでやる方が普通そうなので需要あるかわかりませんが。。

以下のようなページを彷徨い、色々と試したが結果的にうまくリモートデスクトップが動かなかった。(ハマった箇所は色々あったが最後はssh接続は問題なくできているのにリモートデスクトップからだと「Connection Refused」で先に進めない。権限周りなどを色々と確認したがうまくいかなかった。)

https://cryptotrader.muragon.com/entry/56.html
http://akira.matrix.jp/archives/972

環境

サーバー
– Ubuntu Server 16.04 LTS (HVM), SSD Volume Type on AWS EC2

クライアント
– MacOSX 10.12.6

解決方法

しかし以下のページのコマンドで一発で行けた。ありがとう。
https://qiita.com/tmikada/items/be27df3affc56eeffd8b

インストール
$ sudo apt install xrdp xfce4 xfce4-goodies tightvncserver

ただし、以降の部分は実行したらうまくいかなかった(接続はされてるが、グレーの画面が表示されてデスクトップが表示されない。Xウィンドウの設定なんだと思うが、時間がないので調査は割愛)。

実行したらうまくいかなかった箇所
$ sudo vi /etc/xrdp/xrdp.ini
# 以下のように編集
---------
...
#. /etc/X11/Xsession
---------

実施した手順

最終的に実行した一連の流れは以下の通り。

xrdpのインストール
$ sudo apt install xrdp xfce4 xfce4-goodies tightvncserver
$ sudo service xrdp restart

AWSコンソールのセキュリティグループの設定(インバウンド)で以下を追加。

image.png

クライアントからログイン

Macのリモートデスクトップ接続で設定。

image.png

無事にデスクトップに接続。

image.png

続きを読む

Amazon Linux 2 で Rails アプリケーションのサーバーを構成してみる

Amazon Linux 2 の特徴

  • AWS INTEGRATION

    • AWS tools (e.g. AWS CLI) と cloud-init が入った
  • LONG TERM SUPPORT
  • EXTRAS REPOSITORY FOR SOFTWARE PACKAGES
    • amazon-linux-extras で nginx などのパッケージを管理できる
  • ON-PREMISES USE
    • オンプレ利用用途に VM Image などが用意されている
  • SYSTEMD SUPPORT
  • TUNED LTS KERNEL AND NEW TOOLCHAIN
  • SECURITY CONFIGURATIONS
  • SECURITY UPDATES

インスタンスの作成

AMI 選択画面で Amazon Linux 2 LTS Candidate AMI 2017.12.0 (HVM), SSD Volume Type (ami-c2680fa4) を選択してインスタンスを立てる.

公開鍵の追加

vi ~/.ssh/authorized_keys

ユーザーの追加

sudo adduser deploy

ライブラリのインストール

sudo yum -y install 
git make gcc-c++ patch 
openssl-devel 
libyaml-devel libffi-devel libicu-devel 
libxml2 libxslt libxml2-devel libxslt-devel 
zlib-devel readline-devel 
mysql mysql-server mysql-devel 
ImageMagick ImageMagick-devel 
epel-release protobuf-devel

デプロイ先フォルダの用意

sudo mkdir /var/www
sudo chown deploy /var/www/
sudo mkdir /var/www/deploy
sudo chown deploy /var/www/deploy/

nginx のインストール

Amazon Linux 2 では amazon-linux-extras で入れる.

# 確認する
amazon-linux-extras
# install する
sudo amazon-linux-extras install nginx1.12
# ついでに emacs も入れる
sudo amazon-linux-extras install emacs

nginx の起動

# 起動
sudo systemctl start nginx.service
# ステータスの確認
sudo systemctl status nginx.service
# systemd を有効化
sudo systemctl enable nginx.service
# 有効になっているか確認
systemctl is-enabled nginx.service

nginx の設定

# nginx の設定ファイル
sudo vi /etc/nginx/nginx.conf
# 設定再読込
sudo nginx -s reload

ffmpeg

sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
mkdir ~/tmp
cd ~/tmp
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum -y localinstall epel-release-latest-7.noarch.rpm
sudo yum -y install ffmpeg ffmpeg-devel

wkhtmltoimage

https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
sudo mv wkhtmltox/bin/wkhtmltoimage /usr/bin/wkhtmltoimage

NodeJS

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
source ~/.bashrc
nvm install v8.9.4
nvm use v8.9.4
nvm alias default v8.9.4

Ruby

sudo git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv
sudo git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugin/ruby-build
sudo /usr/local/rbenv/plugin/ruby-build/install.sh
sudo vi /etc/profile.d/rbenv.sh
sudo su -
source /etc/profile.d/rbenv.sh
rbenv install 2.4.3
rbenv global 2.4.3
gem install bundler --no-ri --no-rdoc

タイムゾーン, host の修正

timedatectl, hostnamectl を利用する.

sudo timedatectl set-timezone Asia/Tokyo
sudo hostnamectl set-hostname deploy.dot.com
sudo reboot

New Relic Infrastructure の追加

https://rpm.newrelic.com/accounts/813076 でライセンスキー確認

echo "license_key: YOUR_LICENSE_KEY" | sudo tee -a /etc/newrelic-infra.yml
sudo curl -o /etc/yum.repos.d/newrelic-infra.repo https://download.newrelic.com/infrastructure_agent/linux/yum/el/7/x86_64/newrelic-infra.repo
sudo yum -q makecache -y --disablerepo='*' --enablerepo='newrelic-infra'
sudo yum install newrelic-infra -y

公開鍵

sudo su - deploy
mkdir ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# デプロイするサービスの公開鍵を追加
vi ~/.ssh/authorized_keys

refs

続きを読む

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.
利用開始後の技術的な話は別記事になっています

続きを読む