AWS WorkSpaces で急造テレワーク環境! 続き2

2020年5月12日

テレワークの環境が端末だけでは成り立たんのではないかと言うことで
「安い」、「早い」、「まずは形だけでも」を前提に周辺環境を作っておこうかとと言うことでテーマと言うか題材的な物を定義してみました。
なので、実際に仕組みを作成していく過程を書いていこうかと思います。

おさらいですが、以下がAWS上に構成したVPC(ネットワーク)の構成です。
別にこんな無駄にサブネット作らなくても良いと思います。
・外部接続専用のサブネット
・EC2等の実際のシステムを配置展開する内部サブネット
この二つだけでも始めるなら十分だと思います。

さらにこの上に乗せる仕組みのイメージがこちら。

あくまでも個人的な私見ですがクラウド、オンプレに限らず実際の基盤構造のデザインに大差はないと思っています。特に安上がりに仕上げるなら基本に忠実が一番だと思ってます。

1.外部接続経路は一意
2.機能への接続証跡を追いやすくすることを目的とした目的別のNW構成を取る
3.提供機能はインターフェイスとストアに分ける
4.機能間は連携してもいいけどできうる限り疎結合

だいたいこんなところだと思います。安上がりでも粗造乱造にしないのが大切ですな。

今回はAWSを道具として使っています。このVPCの構成や配置に関してはよほどハンズオンや書籍を見ていただいた方が良いのでここでは割愛します。
ちなみに自分は以下の本でお稽古を始めました。むしろほぼやってることはそのままです。
これも個人的な感想ですが最初の参考書としては一番おすすめです。

なので、具体的な粒の部分について自分の備忘かねてまとめて行きたいと思います。
ここではWorkSpacesの環境はすでにある前提で進めます。実際のサーバに接続しての作業はWorkSpacesからデフォルトのec2-userでSSH接続して実施していると思ってください。
また構築サーバがネットワーク経由で外部に直接資材を取得する手段はWorkSpacesで利用するNATゲートウェイを利用することになります。

今回、dockerコンテナでredmine、owncloud、rocket.chatを提供するためEC2インスタンスをプライベートサブネット上に配置します。
利用するインスタンスタイプとしては無償利用枠のあるt2.micro(1CPU/1GBメモリ)でもとりあえず作る、試すのレベルではあれば充分動きますがリソースとしてはメモリがカツカツになります。
ある程度の余裕率を考えると無償枠はありませんが、自分はt3.smallを選択しています。
以下が今回、自分が利用しているEC2となります。ディスクはAWSに限らずクラウドサービスの場合はだいたい必要に応じて拡張可能なので追加のEBSを用意する必然性は無いですが、先々なんかあったら嫌なのでデータ領域を分けました。

インスタンスタイプ利用OS(AMI)EBS(システム)容量EBS(追加容量)
t3.small(vCPS 2/メモリ 2GiB)Amazon Linux 215GB15GB
※EBSはシステム/追加双方、インスタンス作成時にKMSによるディスクの暗号化を行っています。
独自に作成したKMSを割り当てることもできますが、今回はインスタンス作成時に選択可能な事前に
用意されているマネージド型キーを割り当ててました。

スモールスタートなので、インスタンス起動後はOS側設定はほぼ手を入れまてません。
セキュリティ的な手段としてはAWSの機能に頼ります。
適用するセキュリティグループで利用したいポートのみを許可する制限とAWSのコンポーネント利用許可のために必要な権限のみを付与したIAMロールをアタッチしました。
あとはsudo yum -y updateでパッケージの最新化を行ったのと、docker利用の事前準備としてはEBS(追加容量)を整備したのみです。
以下、追加EBSの整備です。

  • 追加EBSの確認
[ec2-user@******~]$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1       259:0    0  15G  0 disk
nvme0n1       259:1    0  15G  0 disk 
├─nvme0n1p1   259:2    0  15G  0 part /
└─nvme0n1p128 259:3    0   1M  0 part 

lsblkコマンドで対象のディスクを確認します。
nvme1n1とnvme0n1の二つのディスクが認識されていることがわかります。

  • フォーマットが必要なディスクの確認
[ec2-user@******~]$ sudo file -s /dev/nvme1n1
/dev/nvme1n1: data

ファイルシステム作られていないディスクは上記のように出力されます。

  • フォーマット及び自動マウントの設定(/volumeへのマウント)
1 ターゲットディレクトリの作成
[ec2-user@******~]$ mkdir /volume
2 ディスクのフォーマット・UUIDの確認
[ec2-user@******~]$ sudo mkfs -t xfs /dev/nvme1n1
[ec2-user@******~]$ sudo blkid | grep nvme1n1
/dev/nvme1n1: UUID="5b34a8ed-0ddb-42ab-aec7-91b2fafa4bf1" TYPE="xfs"
3 自動マウントの定義追加
[ec2-user@******~]$ sudo cp -p /etc/fstab /etc/fstab.`date +%Y%m%d`
[ec2-user@******~]$ vi /etc/fstab
※以下を追記して保存
UUID=5b34a8ed-0ddb-42ab-aec7-91b2fafa4bf1     /volume     xfs    defaults,nofail   0   2
4 マウントの確認
[ec2-user@******~]$ sudo mount /volume
[ec2-user@******~]$ sudo chown ec2-user:ec2-user /volume
[ec2-user@******~]$ ls -ld /volume
rwxr-xr-x 13 ec2-user ec2-user 4096 *** 10 **:** /volume

次に、Dockerのセットアップを行います。RHEL系Linuxの手順と同様ですね。
特にリポジトリの追加などは行わないでインストールできます。
導入されるバッケージはdocker-19.03.6ce-2.amzn2.x86_64(※2020年4月現在)です。

1 パッケージの導入と起動/自動起動設定
[ec2-user@******~]$ sudo yum install -y docker
[ec2-user@******~]$ sudo service docker start
[ec2-user@******~]$ sudo systemctl enable docker
2 ec2-userで制御できるようにする
[ec2-user@******~]$ sudo usermod -a -G docker ec2-user

単体サーバ上での利用なのでdockerコマンドだけで運用もできますが、できる限り楽したいので定義ファイルを作って一括制御できるようdocker-composeも導入します。
導入方法はdocker docsのInstall Docker Composeに説明の手順のままです。

[ec2-user@******~]$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[ec2-user@******~]$ sudo chmod +x /usr/local/bin/docker-compose
[ec2-user@******~]$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compos
[ec2-user@******~]$ docker-compose --version
docker-compose version 1.25.5, build 1110ad01

と言うことで駆け足ですが実装サーバの開発環境整備となります。
次回から実際のdockerで実装するコンポーネント周りの構築を説明したいと思います。