vdnih’s diary

技術的な記事を書きます。毎週日曜更新予定。

# AWS無料枠でデータ分析勉強用環境を作成したい(part4)


作成者:仮想デニッシュ(@vdnih)

作成日:2020年2月16日

今回の趣旨

AWSやデータ分析の勉強のために、AWS無料枠を利用してデータ分析環境を作成します。
今回はpart4になります。
分析ユーザに対して、Jupyter NotebookだけではなくSSH接続も許可しましょう。
ユーザが接続を簡単に行えるよう、パスワード認証でSSHできるように設定を行います。

EC2の設定変更

こちらの記事を参考に設定を行います。
SSH を使用して EC2 インスタンスにログインするときに、キーペアの代わりにパスワードログインを有効にする方法を教えてください。

1.SSH クライアントから、EC2 インスタンスにログインします。

Teratermec2-userへSSHログインします。

2.ユーザーのパスワードを設定します。

SSHに使用するOSユーザはすでにパスワードを設定済みです。
(JupyterHubへユーザ登録する際にOSユーザを作成しており、その際に併せてパスワード設定を行っています。)

3.次のように、/etc/ssh/sshd_config ファイルの PasswordAuthentication パラメータを更新します。

(base) [root@ip-10-0-0-137 ~]# vim /etc/ssh/sshd_config
(base) [root@ip-10-0-0-137 ~]# cat /etc/ssh/sshd_config | grep Password
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication, then enable this but set PasswordAuthentication

4.SSH サービスを再起動します。

(base) [root@ip-10-0-0-137 ~]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service

5.SSH クライアントを終了し、ログインしてパスワード認証をテストします。

これで設定は完了です。
簡単ですね。

SSHを試す

実際にSSHしてみます。
クライアントはTeraTermです。

f:id:vdnih:20200216222305p:plain

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

https://aws.amazon.com/amazon-linux-2/
[vdnih@ip-10-0-0-137 ~]$

ログインに成功しました。

セキュリティグループの設定

今回作成している環境ではIPアドレスによってアクセス元の制限をしており、
分析ユーザがログインするためには、セキュリティグループで22ポートへのアクセスを許可する必要があります。
※自宅からのSSHアクセスはあらかじめ許可しています。

なお、IPアドレスによってアクセス制限を行うことは先ほどの記事の中でも推奨されています。

注意: キーペア認証ではなくパスワードベースのログインを使用すると、セキュリティに影響があります。 したがって、パスワードベースのログインは推奨されません。 また、SSH 攻撃を防ぐために、インスタンスに関連付けられているセキュリティグループルールの ソース IP アドレスを最小化することをお勧めします。

スクリーンショットの掲載は省きますが、各分析ユーザのIPアドレスから22ポートへのインバウンド通信を許可する設定を行いました。

おわり

次回はDBの作成や接続について設定を開始したいと考えています。
もしくは、分析ユーザ向けの学習教材の作成を行うかもしれません。
やりたいことはたくさんありますが、なかなか作業が進みませんね...
もっと技術力がほしいです。

AWS無料枠でデータ分析勉強用環境を作成したい(part3.5)


作成者:仮想デニッシュ(@vdnih)

作成日:2020年2月7日

今回の趣旨

AWSやデータ分析の勉強のために、AWS無料枠を利用してデータ分析環境を作成します。
毎週日曜日に更新していますが、今週は週末予定があるため早め&少な目更新です。
友人がJupyter Notebookへアクセスできるよう設定を行います。

OSユーザ追加

SSHしてサーバ内でOSユーザを作成します。
※個人情報保護のために、記事に貼り付けた後アカウント名は最初の文字以外伏字にしています。

(base) [root@ip-10-0-0-137 ~]# useradd d***
(base) [root@ip-10-0-0-137 ~]# ls /home/
d***  ec2-user  vdnih
(base) [root@ip-10-0-0-137 ~]# passwd d***
Changing password for user d***.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

これでOSユーザのdさんを追加できました。

jupyterhubのユーザ追加

jupyter側のユーザ追加はブラウザから行います。 まずは管理者ユーザでログインします。

f:id:vdnih:20200207214615p:plain

Cotorol Panelを開きます。
※見やすくするために画面の横幅を変えました。

f:id:vdnih:20200207214658p:plain

Adminメニューを選択。

f:id:vdnih:20200207214715p:plain

Add Usersでユーザを追加します。

f:id:vdnih:20200207214745p:plain f:id:vdnih:20200207214756p:plain

成功しました。

セキュリティグループにルールを追加

今回はセキュリティ向上のために、アクセス可能なIPアドレスを設定しています。
dさんの家から4000番ポートへアクセス可能になるよう、
IPアドレスをセキュリティルールに追加します。

f:id:vdnih:20200207214812p:plain

赤が追加した部分です。

おわり

今回このサーバには重要なデータやシステムが入る予定もないですが、
初学者が環境にアクセスして作業する予定ですので、
セキュリティ対策はある程度やってほいたほうが安心だと思います。

AWS無料枠でデータ分析勉強用環境を作成したい(part3)


作成者:仮想デニッシュ(@vdnih)
作成日:2020年2月2日

今回の趣旨

AWSやデータ分析の勉強のために、AWS無料枠を利用してデータ分析環境を作成します。
今回はpart3になります。
前回までに作成したJupyterhubへログインし、pythonを実行します。

OSユーザ作成

OSユーザvdnihを作成し、パスワードを設定します。

(base) [root@ip-10-0-0-137 ~]# useradd vdnih
(base) [root@ip-10-0-0-137 ~]# passwd vdnih

Jupyterhubの設定

Jupyterhubの設定を行います。

(base) [root@ip-10-0-0-137 ~]# jupyterhub --generate-config
Writing default config to: jupyterhub_config.py
(base) [root@ip-10-0-0-137 ~]# vim jupyterhub_config.py

Authentication and User Basics を参考に設定を行います。

c.Authenticator.whitelist = {'vdnih'}
c.Authenticator.admin_users = {'vdnih'}

Jupyterhubへのログイン

ログインします。

f:id:vdnih:20200202205545p:plain f:id:vdnih:20200202205632p:plain

無事ログインに成功しました。

pythonの実行

ここまでくればもう困るポイントはありませんね。
Notebookを作成します。

f:id:vdnih:20200202205658p:plain f:id:vdnih:20200202205713p:plain

まずはハローワールドします。

f:id:vdnih:20200202205729p:plain

anaconda環境を作成しているため、便利なライブラリが初めから入っています。

f:id:vdnih:20200202205744p:plain

Jupyter Notebookは使いやすくて便利で良いですね。

ノートブックの保存先について

Notebookに名前をつけて保存します。

f:id:vdnih:20200202205801p:plain

このノートブックは各ユーザのホームディレクトリ直下に保存されるようです。

(base) [root@ip-10-0-0-137 ~]# ls /home/vdnih/
First_Notebook.ipynb

設定変更も可能のようですが、今回は特に変更の必要もないためそのままにしたいと思います。

今回は以上となります。
次回は友人に協力してもらい、複数人のアクセスが可能か確認を行いたいと考えています。
並行してSSHに関しての環境構築も進めているため、準備ができればそちらの法が先にご紹介できるかもしれません。

参考

おわり

来週の日曜日は用事があるため、更新は別の曜日になるかもしれません。

AWS無料枠でデータ分析勉強用環境を作成したい(part2)


作成者:仮想デニッシュ(@vdnih)

作成日:2020年1月26日

今回の趣旨

AWSやデータ分析の勉強のために、AWS無料枠を利用してデータ分析環境を作成します。
今回はpart2、EC2上にJupyterhub環境を構築します。
※EC2 Instance Connectの設定を行うつもりでしたが、次回にしたいと思います。

Jupyterhubとは

What is JupyterHub?

JupyterHub brings the power of notebooks to groups of users. It gives users access to computational environments and resources without burdening the users with installation and maintenance tasks. Users - including students, researchers, and data scientists - can get their work done in their own workspaces on shared resources which can be managed efficiently by system administrators.

公式ドキュメント

自分は英語はあまり得意ではないので自信がないですが…笑
簡単に言えば複数人で使えるノートブックです。
今回自分は複数人で作業可能な分析環境を作りたいと考えていたのでピッタリですね。

Anacondaのインストール

まずはAnacondaをインストールします。
この時、Anacondaを /opt/ 等、一般ユーザでもアクセス可能なディレクトリに
インストールする必要があるとのことです。

まずは前提パッケージをインストールします。

[root@ip-10-0-0-137 ~]# yum install libXcomposite libXcursor libXi libXtst libXrandr alsa-lib mesa-libEGL libXdamage mesa-libGL libXScrnSaver

次に、Anacondaをwgetで取得します。

[root@ip-10-0-0-137 ~]# wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh

インストールします

[root@ip-10-0-0-137 ~]# bash Anaconda3-2019.10-Linux-x86_64.sh

~~~省略~~~

Anaconda3 will now be installed into this location:
/root/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/root/anaconda3] >>> /opt/anaconda3
PREFIX=/opt/anaconda3

~~~省略~~~

確認します。

[root@ip-10-0-0-137 ~]# conda
-bash: conda: command not found

パスが通っていないですね。
bashrcを再読み込みすればロードが可能です。

[root@ip-10-0-0-137 ~]# source .bashrc
(base) [root@ip-10-0-0-137 ~]# conda -V
conda 4.7.12

Jupyterhubのインストール

公式のクイックスタート通りコマンドを打ち込んでいきます。

(base) [root@ip-10-0-0-137 ~]# conda install -c conda-forge jupyterhub  # installs jupyterhub and proxy
(base) [root@ip-10-0-0-137 ~]# conda install notebook  # needed if running the notebook servers locally

確認します。

(base) [root@ip-10-0-0-137 ~]# jupyterhub -V
1.1.0
(base) [root@ip-10-0-0-137 ~]# configurable-http-proxy -V
4.0.1

ではJupyterhubを起動します。

(base) [root@ip-10-0-0-137 ~]# jupyterhub
[I 2020-01-26 13:57:57.995 JupyterHub app:2240] Running JupyterHub version 1.1.0
[I 2020-01-26 13:57:57.996 JupyterHub app:2271] Using Authenticator: jupyterhub.auth.PAMAuthenticator-1.1.0
[I 2020-01-26 13:57:57.996 JupyterHub app:2271] Using Spawner: jupyterhub.spawner.LocalProcessSpawner-1.1.0
[I 2020-01-26 13:57:57.996 JupyterHub app:2271] Using Proxy: jupyterhub.proxy.ConfigurableHTTPProxy-1.1.0
[I 2020-01-26 13:57:58.009 JupyterHub app:1394] Writing cookie_secret to /root/jupyterhub_cookie_secret
[I 2020-01-26 13:57:58.039 alembic.runtime.migration migration:154] Context impl SQLiteImpl.
[I 2020-01-26 13:57:58.039 alembic.runtime.migration migration:161] Will assume non-transactional DDL.
[I 2020-01-26 13:57:58.046 alembic.runtime.migration migration:513] Running stamp_revision  -> 4dc2d5a8c53c
[I 2020-01-26 13:57:58.094 JupyterHub proxy:461] Generating new CONFIGPROXY_AUTH_TOKEN
[W 2020-01-26 13:57:58.095 JupyterHub app:1624] No admin users, admin interface will be unavailable.
[W 2020-01-26 13:57:58.095 JupyterHub app:1626] Add any administrative users to `c.Authenticator.admin_users` in config.
[I 2020-01-26 13:57:58.095 JupyterHub app:1655] Not using whitelist. Any authenticated user will be allowed.
10
[I 2020-01-26 13:57:58.135 JupyterHub app:2311] Initialized 0 spawners in 0.001 seconds
[W 2020-01-26 13:57:58.138 JupyterHub proxy:643] Running JupyterHub without SSL.  I hope there is SSL termination happening somewhere else...
[I 2020-01-26 13:57:58.138 JupyterHub proxy:646] Starting proxy @ http://:8000
13:57:58.414 [ConfigProxy] info: Proxying http://*:8000 to (no default)
13:57:58.419 [ConfigProxy] info: Proxy API at http://127.0.0.1:8001/api/routes
[I 2020-01-26 13:57:58.839 JupyterHub app:2556] Hub API listening on http://127.0.0.1:8081/hub/
13:57:58.841 [ConfigProxy] info: 200 GET /api/routes
13:57:58.842 [ConfigProxy] info: 200 GET /api/routes
[I 2020-01-26 13:57:58.884 JupyterHub proxy:320] Checking routes
[I 2020-01-26 13:57:58.884 JupyterHub proxy:400] Adding default route for Hub: / => http://127.0.0.1:8081
13:57:58.887 [ConfigProxy] info: Adding route / -> http://127.0.0.1:8081
[I 2020-01-26 13:57:58.888 JupyterHub app:2631] JupyterHub is now running at http://:8000
13:57:58.888 [ConfigProxy] info: 201 POST /api/routes/

いろいろメッセージ出てますが修正はそのうち行うことにして、ひとまず接続確認を行います。

Jupyterhubへのアクセス

セキュリティグループでアクセスを制限しているため、このままではアクセスできません。
セキュリティグループの8000ポートを解放します。

f:id:vdnih:20200126233122p:plain
securitygroup

あとは、EC2のアドレスの8000ポートへブラウザでログインします。
以下の画面が出てくれば成功です。

f:id:vdnih:20200126233034p:plain
jupyterhub-login
ひとまず今回はここまでとします。
次回は、実際に複数アカウントによるログインやpythonの実行を行いたいと思います。

参考

おわり

英語のドキュメントが多くて、英語が苦手な自分は大変な思いをしています。
英語も勉強しなくては…

AWS無料枠でデータ分析勉強用環境を作成したい(part1)


作成者:仮想デニッシュ(@vdnih)

作成日:2020年1月19日

今回の趣旨

AWSやデータ分析の勉強のために、AWS無料枠を利用してデータ分析環境を作成します。
将来的には複数人で開発が行える環境を目指しますが、まずは自分ひとり向けで作成します。
本日のゴールは、作成したEC2にSSHできることです。
本日作成する構成がこちらです。

f:id:vdnih:20200119221554p:plain

VPC・サブネット

今回の要件であれば、VPCとサブネットはVPCウィザードから簡単に作成できます。

  • VPCウィザードを起動し、「1 個のパブリックサブネットを持つ VPC」を選択します。
    f:id:vdnih:20200119221950p:plain

  • VPC名とサブネット名を設定し、それ以外はすべてデフォルトで作成します。
    VPC名:vpc-study
    サブネット名:publicsubnet-study
    f:id:vdnih:20200119222042p:plain

  • 完成
    簡単ですね。

EC2・セキュリティグループ

先ほど作成したVPCインスタンスを作成します。

  • AMI : Amazon Linux 2 AMI (HVM), SSD Volume Type
  • インスタンスタイプ : t2.micro
  • VPC : vpc-study(先ほど作成したVPC)
  • サブネット : publicsubnet-study(先ほど作成したサブネット)
  • セキュリティグループ : securitygroup-study
    • タイプ : SSH
    • ソース : マイ IP
  • 新しいキーペア : keypair-study

f:id:vdnih:20200119222115p:plain

作成出来たら、名前をec2-studyに設定しました。

Elastic IP

作成したインスタンスにElastic IPアドレスをつけます。

  • Elastic IP アドレスの割り当て
     → AmazonIPv4 アドレスプール を選択して割り当てを実行
  • 割り当てたIPアドレスを先ほど作成したec2-studyに関連付ける。

接続

SSH接続します。
今回はwindows端末から、Tera Termを使用してアクセスします。

成功すれば以下のような画面が帰ってきます。

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

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-0-0-137 ~]$

これで接続完了です。
サーバ内で自由に作業が可能です。

今後の展望

来週はこのサーバに複数人がアクセスできるように、IAMグループとユーザを作成したいです。
余裕があれば、EC2 Instance Connectによる接続を行えるようにしたいと考えています。

おわり

今週の進捗はここまで。
なんとか日曜日更新を続けられていますね・・・
はたして分析環境作成は何パートになるのでしょうか・・・
来週もお楽しみに。

記事投稿のための事前準備と環境作成について

作成者:仮想デニッシュ(@vdnih)

作成日:2020年1月12日


今回の趣旨

記事を投稿するにあたって行った準備について紹介します。
技術的な記事は来週からにします。

目次

各種アカウント作成

アカウントの整備

  • twitter アカウント
     以前作成して以降あまり使っていなかったアカウントを使うことにします。
     @vdnih フォローよろしくお願いします。

  • google アカウント
     せっかくなのでgmailもひとつ作成しました。
     これでいろいろなアカウントを作成できます。

  • はてなブログ
     はてなブログって初めて使いましたけど、投稿すごく簡単ですね。
     今後は別のプラットフォームでも展開したいですけど、まずはスモールスタートです。

Markdownの勉強

Markdownを書くのは初めてでしたので、その勉強から開始しました。

Markdown(マークダウン)は、文章の書き方です。デジタル文書を活用する方法として考案されました。特徴は、

  • 手軽に文章構造を明示できること
  • 簡単で、覚えやすいこと
  • 読み書きに特別なアプリを必要としないこと
  • それでいて、対応アプリを使えば快適に読み書きできること

などです。Markdownはジョン・グルーバー(John Gruber)によって2004年に開発され、最初は Daring Fireball: Markdown で公開されました。その後、多くの開発者の手を経ながら発展してきました。

日本語Markdownユーザー会のHPより抜粋

慣れるまでは調べながらの記述になりますが、少しずつ覚えていきたいです。

Markdownの作成環境

エディタは Visual Studio Codeを使用しています。
もともとコーディングに使用していたのですが、Markownにも対応していたのですね。
かなり快適です。

今後の展望

githubあたりを活用し、VS Code内で投稿まで完結できないかなあとか考えています。
あとは、AWSを利用してウェブサイト運用したりもしてみたいですね。 少しずつになるかとは思いますが・・・

おわり

来週からは技術的投稿をやっていきたいです。
週一回の投稿大変だ・・・

自己紹介と今年の目標について

作成者:仮想デニッシュ(@vdnih)

作成日:2020年1月5日


今回の趣旨

はじめまして

あいさつ

はじめまして
仮想世界に生きるパン 仮想デニッシュです
新年あけましておめでとうございます。
今年はアウトプットを増やしたいと決心しましたので、
このような記事を作成させていただきました。
今後よろしくお願いいたします。

自己紹介

都内の会社に勤めるインフラエンジニアです。
ビッグデータに興味があります。
学生時代はpython書いたりAIをかじったりしてました。
2019年は会社のお金で資格を取ることをがんばっていました。

保有資格
- 応用情報処理技術者
- AWS クラウドラクティショナー
- AWS ソリューションアーキテクト アソシエイト
- Oracle Master Bronze DBA 12c
- LPIC level1

今年の目標について

エンジニアとしてのスキルアップのために、2020年はアウトプットを頑張りたいと思っています。
そのために、 週1本の記事投稿 を行いたいと考えています。

内容はインフラ技術、特にクラウドやDBといったものになると思います。
自分の学んだことや作ったものをどんどん公開して共有していきたいと考えています。

毎週日曜日に記事を投稿することを続けていきたいです。
目標は今年1年間!!
(まあ正直忙しかったりで難しいとは思いますが・・・)
モチベーションの維持のために頑張っていきたいと思います。

直近の投稿予定

今回(1/5) 自己紹介と今年の目標について
次回(1/12) 記事投稿のための事前準備と環境構築について
次々回以降(数回に分けて投稿予定) AWS無料枠でデータ分析勉強用環境を作成したい

おまけ エンジニア分野以外での自己紹介

家に引きこもるのが好きなオタクです
好きなジャンル
- Vtuber
 Vのオタクです、にじさんじがすきです
- ボカロ
 初音ミクさんがすきです
- 音ゲー
 sdvxとかチュウニズムとかすき、最近あんまりやってない
- TCG
 遊戯王とかポケカとか広く浅くやってた、最近あんまりやっていない
- スマホゲーム
 初音ミクコラボがあると喜ぶ、#コンパスとかすき

おわり

今年一年よろしくお願いいたします。