25
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWSでゼロからUbuntuを立ち上げるまで

Last updated at Posted at 2019-07-14

Amazon EC2 の初期導入を代行した。
2019年7月時点のAWS画面を用いて、クラウド初級者向けに実例を示して手順を説明する。

ここではアカウントの新規作成から始め、下図のような構成を1時間で構築してみる。
image.png

AWSアカウントの作成

何はともあれアカウントを作成しなければ始まらない。公式チュートリアルの AWSアカウント作成の流れ に沿って進めよう。
アカウント作成後は、下表チェックリストに従って速やかにセキュリティ対策を行うこと。

確認事項 チェック
ルートアカウント(特権ユーザ)のMFA(多要素認証)を有効にしたか? :heavy_check_mark:
日常の操作にルートアカウントを使うことがないように、管理用のIAMユーザを作成したか? :heavy_check_mark:
アクセス許可の管理を容易にするため、IAMグループを作成したか? :heavy_check_mark:
強力なIAMパスワードポリシーを設定したか? :heavy_check_mark:
未使用のアクセスキーは削除されているか? :heavy_check_mark:
具体的な手順は@tmknomさんの記事、AWSアカウントを取得したら速攻でやっておくべき初期設定まとめに書かれているので参照して欲しい。

AWSマネジメントコンソールにログイン

ルートアカウントはもう使わないのでログアウトし、先ほど作成した管理者用IAMユーザでコンソールにログインしなおす。

経理部門用IAMユーザの作成

請求情報の確認のみができるIAMユーザを作成する。
経理担当者にこのIAMユーザを貸与することで、技術部門への照会を減らすことができるし、経理部門が誤ってサービスを停止してしまうこともない。

ポリシーの作成

IAMのメニュー [ポリシー] :arrow_right: [ポリシーの作成] をクリックする。
image.png
AWSユーザーガイド【例8:アカウント設定へのアクセスは拒否し、その他の請求および使用状況の情報へのフルアクセスは許可する】のJSONテキストをコピペする。
image.png

JSON
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "aws-portal:*Billing",
                "aws-portal:*Usage",
                "aws-portal:*PaymentMethods"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": "aws-portal:*Account",
            "Resource": "*"
        }
    ]
}

グループの作成

IAMのメニュー [グループ] :arrow_right: [新しいグループの作成] から任意の名前でグループを作成し、前項のポリシーをアタッチする。

ユーザーの作成

IAMのメニュー [ユーザー] :arrow_right: [ユーザーを追加] から任意の名前でユーザーを作成し、前項のグループに追加する。

請求ダッシュボード

経理部門が見る請求ダッシュボード(オンデマンドインスタンス=従量課金)の例を示す。
image.png
請求書の画面では、EC2リソースごとに詳細な内訳を見ることができる。
image.png
PDF版請求書をメールで受け取ることもできる。
image.png
リザーブドインスタンス(固定料金)への切り替えは、リソースの分析後スペックが固まってからでも良いだろう。

インスタンスの作成

メニュー [EC2] を選択する。作成前に今のリージョンを確認しておこう。(今回は東京を選択する)
image.png

EC2のメニュー [インスタンス] :arrow_right: [インスタンスの作成] をクリックする。
image.png

Amazonマシンイメージ(AMI)の選択

AMIには、AWSが提供するもの、ユーザーコミュニティが提供するもの、ソフトウェアベンダーが提供するもの(Marketplace)がある。
今回は、MarketplaceからUbuntu 18.04を選択する。
image.png

インスタンスタイプの選択

ここではm5.largeを選択(1時間当たり約13円)。今あえて前世代のm4.largeを選択する理由も無いだろう。
image.png
:book: Amazon EC2 インスタンスタイプ

インスタンスの詳細の設定

今回は何も考えずに、デフォルトで追加されたVPC(Virtual Private Cloud)をそのまま使う。
インスタンスを誤って削除しないように、**[削除保護の有効化]**をチェックしておくと安全だ。

なお、インスタンスを複数作成するときは、インスタンスの用途(例えば専用のDBサーバなど)に応じてプライベートサブネットを作ることがあるが、今回はインスタンス(Web/DBサーバ)がひとつしか無いので、そのままデフォルトのパブリックサブネットに置く。

ストレージの追加

IoT機器からセンサーのデータを受け取るため、パーティションを下表のように分割した。

デバイス      容量 マウント先 備考
/dev/sda1 30GB /
/dev/sdb 100GB /data MongoDB(スキーマレスのNoSQL型データベース)で使うため、IOPS重視とする。
/dev/sdc 500GB /archive ログやビッグデータなど大量データを保存するのに使うため、スループット重視とする。
IOPSとスループットの関係はバケツリレーに例えると分かり易い。往復回数がIOPS、水の総量がスループット、ゆえにバケツのサイズに影響する、と考えれば良い。

[新しいボリュームの追加] をクリックし、次のように入力。
image.png
:book: Amazon EBS ボリュームの種類
:book: Amazon EBS の料金

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

VPCにデフォルトのセキュリティグループがあるので、設定を変更する。
要はファイアウォールのことだ。特に解説は不要だろう。
image.png
デフォルトでは、インバウンドはすべて拒否、アウトバウンドはすべて許可となっている。
:book: VPC のセキュリティグループ

新しいキーペアの作成

インスタンス作成の最終工程である。
[キーペアのダウンロード][インスタンスの作成] の順にクリックすれば完了する。
image.png
もし、下のようなメッセージが出ても、暫くして再試行すれば問題ないので慌てずに。
image.png

IPアドレスを割り当てる

インスタンス作成時に自動付与されたパブリックIPアドレス(グローバルIPアドレス)は変化する場合があるので、固定化する。
EC2のメニュー [Elastic IP] :arrow_right: [新しいアドレスの割り当て] をクリックする。
image.png
image.png

IPアドレスをインスタンスに関連付ける

割り当てされたIPアドレスを選択し、アクションメニューからインスタンスに関連付けよう。
image.png
リソースタイプにインスタンス、インスタンスにはインスタンスIDを指定する。
image.png
image.png

以上でコンソール側の操作は終わりだ。
なお、インターネットゲートウェイはデフォルトVPCに最初からアタッチされている。

Linuxの初期設定

インスタンス作成時にダウンロードしたキーペア(秘密鍵)を使い、サーバにログインする。
Ubuntuの場合、初期ユーザー名はec2-userではなくubuntuになる。

パッケージ更新

sudo -i
apt -y update
apt -y upgrade

パーティション作成

lsblkコマンドで、SSDやHDDなどのブロックデバイス一覧を表示する。

$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0         7:0    0 88.4M  1 loop /snap/core/7169
loop1         7:1    0   18M  1 loop /snap/amazon-ssm-agent/1335
nvme0n1     259:0    0  100G  0 disk 
nvme2n1     259:1    0  500G  0 disk 
nvme1n1     259:2    0   30G  0 disk 
└─nvme1n1p1 259:3    0   30G  0 part /

Nitro世代(ニトロではなくナイトロと読むらしい)のインスタンスでは、NVMeデバイス名に名前が変わるので注意。
例えば /dev/sda1/dev/nvme1n1p1 という具合だ。

デバイス名が分かったらフォーマットし、マウントを試みる。

mkfs -t ext4 /dev/nvme0n1
mkdir /data
mount /dev/nvme0n1 /data

マウントに成功したらfstabに登録しよう。
デバイス名は変わる可能性があるので、起動時のマウントはUUIDにすべきだ。
UUIDはmkfsしたときに表示される他、blkidコマンドでも確認できる。

/etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /data  ext4  defaults,nofail  0 2

日本語化

これはお好みで。

apt -y install language-pack-ja-base language-pack-ja ibus-mozc
localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
source /etc/default/locale
apt -y install manpages-ja manpages-ja-dev
timedatectl set-timezone Asia/Tokyo

開発者用アカウント作成

sudo権限付のアカウントとキーペアを作成する。

adduser user
gpasswd -a user sudo

su - user

ssh-keygen -t rsa
mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

キーペアのうち、秘密鍵となる ~/.ssh/id_rsa を安全なルートで開発者に渡そう。
なお、パスワード無しで sudo させたい場合は、--disabled-passwordを付けてadduserし、

/etc/sudoers.d/90-cloud-init-users
user   ALL = NOPASSWD:ALL

のように追加すれば良い。

ホスト名の変更

EC2では、ホスト名の初期値がプライベートIPアドレス(例:ip-12-34-56-78)になっている。
これがシェルプロンプトの一部に表示されるのだが、いくつも端末を立ち上げていると、ここはどこ?になるので変更する。

hostnamectl set-hostname ホスト名

バックアップの取得

サーバを開発部門へ引き渡す前に、バックアップ(スナップショット)を取得しておこう。
再びコンソールにログインする。

インスタンスの停止

停止は必須ではないが推奨されている。
アクションメニューの [インスタンスの状態] から [停止] をクリックする。
EC2では [停止(stopped)][終了(terminated)] は意味がまったく違うので気を付けよう。
image.png

スナップショットの作成

image.png
リソースタイプにインスタンスを選択し、対象インスタンスを選ぶだけでOKだ。
image.png

これでスナップショットからいつでも復元できるようになる。
復元のやり方は何パターンかあり、Qiitaにも関連記事は沢山あるので色々試してみて欲しい。

DNS登録

ネームサーバは自前で管理しているので、Route53 は使わない。
ゾーンファイルにAレコードを追加する。

/usr/local/etc/namedb/master/example.com.zone
$TTL 3600
$ORIGIN example.com.
@       IN      SOA     foo.example.com. (
        2019071401      ; Serial
        43200           ; Refresh after 12 hours
        3600            ; Retry after one hour
        2419200         ; Expire after 4 weeks
        1200    )       ; Negative cache TTL of 20 minutes
;
; Authoritative name servers
;
        IN      NS      ns01.example.com.
;
; Host
;
bar     1800    IN      A      12.34.56.78

サーバの引き渡し

例えば下のような設定ワークシートをたくさん書かなければならないときでも、AWS SDKを使えば労力を抑えられる。
仕様書をExcelで自動生成している例を見つけたので、最後にリンクを載せておく。
https://dev.classmethod.jp/cloud/excel_aws_spec_autogeneration/
image.png

25
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?