pandazx's blog

Hadoop, データ分析など雑多な技術ブログ

EC2にNATサーバ構築

AmazonからはNAT Gatewayというマネージドサービスが提供されているが、お金が少しかかる。 そこで自前で用意する方法を説明する。

OS:Amazon Linux

NATサーバを構築するEC2インスタンスはパブリックIPがあり、外につながっているとする。 以下を設定。IPアドレスに関する部分は適宜、読み替えて設定すること。

# 設定
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

# 設定の確認
sudo iptables -t nat -nL

# 設定の保存(保存しないと再起動で設定が初期化される)
sudo service iptables save

クライアントとなるEC2はパブリックIPがなく、プライベートIPのみとする。以下を設定。

# デフォルトゲートウェイをNATサーバに設定
sudo route del default gw 192.168.0.1
sudo route add default gw 192.168.0.8

sudo vim /etc/sysconfig/network
GATEWAY=192.168.0.8を追記設定

sudo service network restart
※少し時間がかかる

# 接続テスト
wget www.google.co.jp
index.htmlが作成されれば成功

ちなみに、各インスタンスの基本的なポートの開閉などはAWSのセキュリティグループでやればよい。

参考サイト(もっと詳しい説明があります):習うより慣れろ! iptablesテンプレート集(2):natテーブルを利用したLinuxルータの作成 (2/6) - @IT

以下の方法もあるらしい。

AWSでNAT構成を自前で用意する - のんびりSEの議事録

AMIイメージから作成したEC2にSSHで接続できない

それまでパスワード認証でsshでログインしていたEC2があったとする。

そのAMIイメージを作成して、別途、EC2を作成するが、sshでログインできず、「Permission Denied」となる。EC2作成時にはキーペアをなしに設定している。

解決方法

キーペアをありにして作成し、秘密鍵を使って、ec2-userでログイン。 /etc/ssh/sshd_config の PasswordAuthentication を yes にして、sudo service sshd restart すればよい。

そもそも、パスワード認証を使わない方がいいという話もあるが、それはまた別の話。

AWS SDK for Ruby V2でS3にアクセスするサンプルプログラム

AWS SDKをインストー

gem install aws-sdk

サンプルプログラム

# coding: utf-8
#
# AWS SDKを用いて、S3にアクセスするサンプルプログラム
#

require 'aws-sdk'

# Config
AWS_REGION = "ap-northeast-1"
AWS_ACCESS_KEY = "xxx"
AWS_SECRET_ACCESS_KEY = "xxx"
S3_BUECKT_NAME = "xxx"

client = Aws::S3::Client.new(
    :region => AWS_REGION,
    :access_key_id => AWS_ACCESS_KEY,
    :secret_access_key => AWS_SECRET_ACCESS_KEY,
    )

puts "Show S3's bucket list"
puts client.list_buckets.buckets.map(&:name)
puts ""

puts "Show object list"
client.list_objects(:bucket => S3_BUECKT_NAME).contents.each do |object|
  puts object.key
end
puts ""

puts "Upload object"
ret = client.put_object(
    :bucket => S3_BUECKT_NAME,
    :key    => '新しいテキスト ドキュメント.txt',
    :body   => File.open("新しいテキスト ドキュメント.txt")
    )
puts "Done"
puts ""

puts "Read object"
puts client.get_object(:bucket => S3_BUECKT_NAME, :key => '新しいテキスト ドキュメント.txt').body.read

参考サイト:AWS SDK for Ruby V2でS3をいろいろ使う - Qiita

機械学習の用語

評価指標

  • MAE=Mean Absolute Error(平均絶対誤差)
  • RMSE=Root Mean Square Error(2乗平均平方根誤差)

OpenStreetMapサーバの構築 Ubuntu 14.04

OpenStreetMapサーバはKai Krueger氏がUbuntu14.04向けにパッケージングしてくれているので、 これを利用すると構築が簡単。以下の方法が参考になる。

OpenStreetMapサーバを自作する(Install OpenStreetMap on AWS EC2/Ubuntu14.04) | Developers.IO

以下のサイトにはUbuntu16.04 でも構築可能な手順が書いているようだが、未確認。

Installing an OpenStreetMap Tile Server on Ubuntu | OpenStreetMap Carto Tutorials

解説記事によってはインストール後に、sudo ldconfig コマンドが抜けていることがあるので、注意すること。 例えば、下記サイトには記載がない。下記サイトを参考に Ubuntu 16.04で構築を試みたが、/var/lib/mod_tile に何故か地図タイルが作成されず、断念した。

Ubuntu 16.04 で OpenStreetMap タイルサーバを構築 – 2 – – keizoh.com

Tips

すべての地図タイルレンダリング実行

render_list -a

VBoxGuestAdditions.iso の UUID エラー

他からコピーしてきたvboxファイルをVirtualBoxで「追加」で起動しようとすると、

Cannot register the DVD image…

であったり、UUID のエラーメッセージが表示されることがある。

この場合、「新規」に作成し、ストレージにコピーしてきたvmdkファイルを指定して 同一OSで起動すればOK.

他の対応策として、以下もあるらしい。

qiita.com

cuDNNのバージョン確認

cudaのインストールディレクトリが /usr/local/cuda と仮定する。その場合、以下に書いてある。

  • /usr/local/cuda/include/cudnn.h のCUDNN_MAJOR, CUDNN_MINOR, CUDNN_PATCHLEVEL
  • /usr/local/cuda/lib64/libcudnn.so.x.x.x

x.x.xがバージョン