カテゴリ:13.実際にやってみる > 13.8 AWS

(1)AWSについて
EC2(Elastic Compute Cloud)は、仮想サーバを構築することができます。VPSと思ってもいいでしょう。Elasticは「弾力性がある」という意味で、規模を拡大したり数を増減させたりが柔軟なクラウドと考えればいいでしょう。
その他、ストレージサービスのS3(Simple Storage Service)、データベースサービスのRDS(Relational Database Service)があります。※参考ですが、SQLを使わないDBのDynamoDBというものもあります。

(2)アカウントの作成
AWSを利用するには、アカウントを作るところから開始します。
無料枠を使って進めます。ただ、残念なのが、必ずクレジットカード情報を入れる必要があることです。IBMクラウドなどはその必要がありません。なので、偽名などで登録することは実質不可能です。
上記URLの画面右の「まずは無料で始める」をクリックして開始します。
aws1
aws2クレジットカード情報や住所を正しくいれます。たしか、電話番号のSMSによる認証もあったかと思います。
また、アカウント名を作成しますが、ログインには使いません。

(3)ログイン
アカウントができたら、早速ログインしましょう。
①ログイン画面にアクセス
aws3
②メールアドレスとPWでログインをする

③AWS マネジメントコンソール の画面が表示されます。
 ・左上のAWSのアイコンは、ホームボタンのような役割をしています。
 ・サーバを起動するには、真ん中あたりの「ソリューションの構築」の「仮想マシンを起動する」から行います。
 または、上のメニューの「サービス」>「コンピューティング」>「EC2」から起動します。
 ・メニューの「アカウント名(皆さんが設定したもの)」をクリックすると、アカウント管理のメニューになります。
 
(4)最初の設定 ※主にセキュリティ
①接続するサーバの場所を変更
 リージョンとエンドポイントを変更します。
 メニューバーの右の方に、「米国東部 (バージニア北部)」などとなっている部分です。日本に変更しましょう。具体的には、アジアパシフィック (東京)にします。
 ※詳細は以下

②アカウントの設定
メニューバーで、自分のアカウントをクリックして「マイアカウント」

→たくさんあるので、次の節で。

③認証の強化
二段階認証 MFA(Multi-Factor Authentication)を入れる
以下から実施する。
または、「サービス」メニューの「セキュリティ、ID、およびコンプライアンス」>「IAM」を開く
ここで、「ルートアカウントの MFA を有効化」から2段階認証を実行する。
詳しくは、以下

※ログインしたらメールで通知してほしいが、簡単にはできなさそうである。残念

(5)アカウントの設定
メニューバーで、自分のアカウントをクリックして「マイアカウント」
①お支払い通貨の設定
→JPNに変更。手数料が安くなるような噂
aws4
②Billingの設定
それぞれチェック
・電子メールでPDF版請求書を受け取る
・無料利用枠の使用のアラートの受信
・請求アラートを受け取る

(6)請求に関して
①毎月の請求額の確認
 無料で使えるといっても、アカウントが乗っ取られるなどして、大量に使われるリスクもあります。
 請求額の確認は、「マイアカウント」>「Billing」>「請求書」
②リアルタイムの料金を表示
「マイアカウント」>「Cost Management」>「Cost Explorer」
でコストエクスプローラを有効にします。
 少し時間がかかります。 

③請求の上限設定
・「マイアカウント」>「Budgets」で「Create a budget」ボタンを押します。
aws5
・「コスト予算」を選択します。
aws6
間隔:月別、定期予算、で上限を$20に設定しました。
→次のページで80%(Alert threshold)で通知する設定をしました。80という数字は、あらかじめ入っているように見えましたが、自分で設定が必要です。
aws7
④料金計算
EC2の料金は複雑と言われます。コア数やメモリにもよります。不要なインスタンス(サーバ)は停止しておきましょう。(※削除しなくても、停止だけで課金はされないはず)。それ以外に、ストレージ(EBS)や、通信量によっても課金されます。インバウンドの通信は無料のようすだが、Dos攻撃をくらうと同時にアウトバウンドも増えるので、費用が怖い。いわゆるEDoS攻撃である。

(1)EC2でのサーバの構築に関して
今回は、Linux(基本はCentos7)サーバをAWS上に構築します。ローカルにサーバを持つ必要はなく、インストールも不要。とても便利です。

(2)ネットワーク構成とVPC
・作成するサーバは、Amazon上の閉じられたネットワークに配置されます。
・ネットワーク構成に関して、VPCの理解が必須です。
以下のサイトの内容をよく読みましょう。これで概念がわかってもらえると思います。
-------------
Virtual Private Cloud (VPC) は、AWS アカウント専用の仮想ネットワークです。VPC は、AWS クラウドの他の仮想ネットワークから論理的に切り離されており、AWS のリソース(例えば Amazon EC2 インスタンス)を VPC 内に起動できます。VPC の IP アドレス範囲を指定して、サブネットを追加し、セキュリティグループを関連付けて、ルートテーブルを設定できます。
-------------
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/what-is-amazon-vpc.html

・もう少し詳しく説明します。
以下の画像を見てください。
まず、AWSの中に、ユーザのアカウントに紐づけられたVPCが
作成されます。Regionの中に入っています。
つまり、RegionごとにVPCが作成されます。ですから、北米
で作るサーバと日本で作るサーバは、別のVPC上に作成されます。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/images/default-vpc-diagram.png
・VPCの中で、サーバを構築します。内部からアクセスするプライベートIPアドレスとグローバルIPアドレスが割り当てられます。
IPアドレスは表示されますので、公開サーバとしてアクセスしたい場合は、そのグローバルIPアドレス(またはFQDN)にアクセスします。
※ifconfigで見ると、eth0しかありません。なので、両者は同一のIFであり、グローバルIPアドレスにNATされています。
・確認のため、VPCを見てみましょう。
https://console.aws.amazon.com/vpc/
・ネットワーク(サブネット)も、適宜作成されます。

(3)サーバの構築
前置きが長くなりましたが、サーバを構築してみましょう。
①EC2のダッシュボードを開く
これが、サーバの構築です。
どこのリージョンかを選択した上で、「サービス」
>「コンピューティング」>「EC2」を選択します。

②インスタンスの作成
aws8
「インスタンスの作成」ボタンをクリック。
検索画面で「Windows」と入れれば、WindowsOSが出てきます。
Amazon Linux 2 AMIで作成しましょう。
ちなみに、Amazon Linux 2はCentOS7をベース、Amazon LinuxはCentOS6をベースにしています。

※AMIは、「Amazon マシンイメージ」のことです。

・無料枠の「Amazon Linux 2 AMI (HVM)」を選択します。
aws9


③インスタンスタイプの選択
T2が検証用には向いているでしょう。CPUやメモリによって
nano、microなどが変わりますが、microのt2.microを選びます。

④その他、詳細な設定を進めます。
まあ、デフォルトのままでもいいでしょう。

(⑤セキュリティグループ)
FWの機能が実現できる。
デフォルトでは、外からの通信はSSH以外は全て拒否、内からの通信は全て許可になっています。SSHを止めてしまうと、このサーバに接続できなくなってしまいます。

⑥キーペアの作成
適当に名を付けて作成します。
また、自分がSSHで接続するには必要なので、このキーをファイルとして保存します。
aws10


⑦「インスタンスの作成」
ボタンを押して、作成します。
エラーが出て止まる。
Your request for accessing resources in this region is being validated, and you will not be able to launch additional resources in this region until the validation is complete. We will notify you by email once your request has been validated. While normally resolved within minutes, please allow up to 4 hours for this process to complete. If the issue still persists, please let us know by writing to aws-verification@amazon.com for further assistance.

→しばらくすると接続できます。

(5)SSHでの接続
AWSのコンソール画面から接続する方法があります。
※おそらく、この場合はコンソールにログインしているので、さきほどのキーは不要です。

TeraTermなどの通常のSSHで接続する方法を紹介します。
①TeraTermの起動
②接続先として、作成したインスタンス(サーバ)のグローバルIPアドレスに接続します。
③ユーザ名はec2-user (※デフォルトで作成されているユーザです)、パスワードを入れる必要はありません。RSA/DSA/ECDSA/ED25519鍵を使うのところで、先ほどの秘密鍵を入れて接続します。
aws11
★デフォルトのec2-userは変更すべきという考えもあるので、そこは必要に応じて変更する
④Linuxのコマンドプロンプトが表示されれば、接続成功です。

(6)AWS上での操作
基本的にCentOS7なので、CentOS7のコマンドが実行できます。
以下のコマンドで、rootになっておこう。
$ sudo -i
#
あとは通常のLinuxと同じ

(7)使わないインスタンスは停止しておこう
インスタンスを選択し、「アクション」>「インスタンスの状態」>「停止」で停止します。無駄な料金が
発生しませんし、このサーバには誰もアクセスできません。

(8)作成したインスタンスの削除(サーバの削除)
インスタンスを選択し、「アクション」>「インスタンスの状態」>「終了」で削除します。すぐには消えないかも。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/terminating-instances.html#termination-overview

①インスタンスにもよるが、デフォルトではWebサーバ(httpd)は入っていないと思う。
②yumでインストールしましょう。
http://sm.seeeko.com/archives/15877187.html
③サービスを起動します。
④セキュリティグループでHTTPを許可します。
 インスタンスのセキュリティグループを開き、インバウンドとしてHTTPを許可します。
⑤該当サーバのグローバルIPアドレスにアクセスすれば、Apacheのトップページが見えるはずです。
⑥必要に応じてコンテンツを変更しましょう。
たとえば、/var/www/html 配下にindex.htmlファイルを作り、「Hello!」とでも入力すると、それが表示されます。
※参考
サーバのiptableは使う必要が無い。(効いていないので、全通しだと思われる)。
2重管理の必要はないので、わかりやすいセキュリティグループだけで管理すればいいだろう。

TeraTermで接続するといいでしょう。
以下の記事の(5)SSHでの接続 です。
http://sm.seeeko.com/archives/18733856.html

接続した後は、TeraTermの画面の「ファイル」>「SSH SCP」を開き
From にWindows上のファイルを指定し、ToにAWSのLinux上パスを指定します。
そして、「Send」を押すだけです。

※残念ながら、フォルダごとのUploadはできません。なので、やる場合は圧縮が必要です(※未実施)

■1.方針
AWSのLightsailを使う。
以下を参考にした。
https://briarpatch.co.jp/wordpress-aws

以下のAWSのサイトにも、Lightsailが便利だと記載されている。
https://aws.amazon.com/jp/getting-started/tutorials/launch-a-wordpress-website/

(2)費用
AWSのLightsailは、サーバスペックにもよるが、最小で月額3.5ドル。初回1ヶ月は無料。AWSの料金とは別に3.5ドルではなく、込みの値段だと思っている(が、真実は不明)

■2.作り方
①AWSにログイン

②検索画面でLightsailと入力
または、コンピューティングのEC2のすぐ下にあるはず。

③設定画面
・日本語を選択
・インスタンスの作成
 →日本(東京)、Linux、アプリ+OS、Wordpress (※Multisiteではない方)
・料金プラン(インスタンスプラン)は3.5ドル/月を選択
・インスタンス名をつける「-SS」と付けた
・「インスタンスを作成」ボタンでインスタンスが作成
できた →超簡単だ!!

④起動
・作成したインスタンスをクリックする。
・パブリック IP が表示されていて、そこにアクセス
すれば、デフォルトのページが表示される。
 →IPアドレスは変わらないはずだ。インスタンスを落としても変わらないのか、試してみよう。→停止するとIPアドレスが変わる。なので、基本的には停止しないようにする必要がある。
・SSHで接続すれば、接続できる。
→なぜかコマンドが入力できない。
※一つ前のインスタンスの画面で「…」から「接続」
を押したらうまくいった。
・以下でPWを表示 (rootにはならないこと)
$ cat bitnami_application_password

⑤WPへログイン
http://パブリック_IP/wp-admin

ここで、ユーザ名は「user」、先ほどのPWを入力すればログインできる。
めちゃくちゃ簡単だ。すごい!!

■WordpressでHP作成
①WPへログイン
先と同様の方法でログインする

②とりあえず、UpdatesですべてUpdateしておいた。
精査はしていない。

③「Settings」でSiteLanguageを「日本語」に。タイムゾーンなども変更

④タイトルの変更
HPのタイトルや説明などを記載する

⑤テーマを選ぼう
「外観」「テーマ」から「テーマを追加」
検索窓で「lightning」を入れて実行
「インストール」→「有効化」をする

これで、なんとなくHPらしくなる。

■独自ドメインの設定
①ドメインの取得
②DNSの設定で、AWSのIPアドレスと、FQDNを対応させる。
ちなみに、私は以下を使っている。
https://www.value-domain.com/

■Wordpress
habakiriをつかってみた。
habikriに関しては、以下が詳しい
https://mominoco.com/habakiri3/

・右下のロゴを消す
https://qiita.com/MosamosaPoodle/items/24ae64627820e557790b

・CSS
外観>テーマエディター 追加CSS から変えられる。

・上の管理バーを消す
ユーザー>あなたのプロフィール
から設定できる。
サイトを見るときにツールバーを表示するのチェックを
外す

・地図を埋め込むこともGoogleマップから簡単に行える
Googleの地図を埋め込むのはとても簡単。まず、住所を入れてGoogleで地図を表示します。
そして、左側にある「共有」を押して、「地図を埋め込む」というタブのHTMLをサイトに貼るだけです。

・問い合わせフォーム
メールが送信できるように事前にWP Mail SMTPのプラグインを入れておく
作り方などは、以下あたりを参考にした
https://newstd.net/user_manual/mwwpform
https://xn--t8jc2c0hs41uof6d.com/responsive-inquiry-form/

・下のバーにある「Habakiri theme by モンキーレンチ Powered by WordPress」を消させていただく。
AWSのlightsailを使っているので、AWSのコンソールから接続。
なぜか、コマンドがうまく入らない。右下のドキュメントっぽいアイコンを押して、何か入力してからカーソルに戻ると、入力できた。対処療法でしかないが…。もしかすると、全角になっていただけかも。
sudo -i でsuの権限にする。
/opt/bitnami/apps/wordpress/htdocs/wp-content/themes/habakiri/modules/copyright.php から編集します。
以下にあるように、ソースをゴッソリ入れ替え
https://mominoco.com/habakiri3/
?>が無かったので、足してみた。

・テンプレート
私は、メニューページが無いものにしたかった。そこで、固定ページのテンプレートを「サイドバー無し」というのにした。
https://habakiri.2inc.org/demo/habakiri-coco/?page_id=2179
設定は、固定ページのクイック編集からできる。

■バックアップ
Lightsailの場合、スナップショットがいいだろう。
価格も安い。月額 0.05 USD/GB が適用されるので、
20Gの場合、月1ドル。
https://aws.amazon.com/jp/lightsail/faq/
また、Wordpress上でバックアップを取ってもいいかもね。
BackWPupのプラグインを使おう
https://saruwakakun.com/html-css/wordpress/backup
プラグインをインストールし、
ジョブを新規で作成。
デフォルトのままで、宛先は「ファイル」にして保存し、「今すぐ実行」
「ジョブ・ログをチェック」ではなく、「作成した
ジョブを実行」から、右の方で「ダウンロード」
そして、該当するファイル(恐らくZIP)をダウンロードする。

AWSのサーバをSSL化する
Let'enryptを入れ、証明書を発行、証明書を入れて、PCからHTTPSで通信できるまでの手順。3か月後に自動更新
※AWSのCentOS7であるが、ちょっとだけややこしい。

ドメインはmomiji.pw
サーバは、https://www.momiji.pw とする。

例えば、手順は以下
https://qiita.com/takahiko/items/a08895550727b95b6c36

sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
sudo chmod 700 /usr/bin/certbot-auto

だが、証明書を発行しようとすると、AWSのEC2特有の事情によるエラーがでる。※だが、lightsailの方はエラーにならなかった。

certbot-auto certonly --webroot -w /var/www/html -d momiji.pw --email hoge@momiji.pw

Sorry, I don't know how to bootstrap Certbot on your operating system!
・・・

そこで、以下URLの「2. certbot-autoを書き換える」
の部分を以下で進める。インストールされた場所は/home/bin かな?

https://qiita.com/MysteriousMonkey/items/f26316447c1ff390ce21

 elif grep -i "Amazon Linux" /etc/issue > /dev/null 2>&1 || \
   grep 'cpe:.*:amazon_linux:2' /etc/os-release > /dev/null 2>&1; then
  Bootstrap() {
    ExperimentalBootstrap "Amazon Linux" BootstrapRpmCommon
  }
  BOOTSTRAP_VERSION="BootstrapRpmCommon $BOOTSTRAP_RPM_COMMON_VERSION"

※syntaxエラーがでて面倒だった。古いのをコメントアウトではなく消したら
うまくいった。コメントアウトを#ではなく/にしたのが間違っていたのかもしれない。

再度実行

certbot-auto certonly --webroot -w /var/www/html -d momiji.pw --email hoge@momiji.pw --debug
※説明は以下
https://qiita.com/sayama0402/items/011644191dfdbde9c646
※最後の--debug がないと怒られる。

★★-d momiji.pw にすると、https://momiji.pwはOKだが、https://www.momiji.pwはダメ。 -d www.momiji.pw と指定する必要がある。
※ワイルドカードに本当はしたいよね。

途中でメッセージが出る
(agree、noでいったん進む。→完了

成功したようなメッセージ(Congratulation)がでる。
サーバ証明書と秘密鍵は以下に入っているようだ。

 /etc/letsencrypt/live/momiji.pw/cert.pem
 /etc/letsencrypt/live/momiji.pw/privkey.pem

また、同じフォルダにchain.pemも入っている。→これは不要な気がする

・mod_sslをインストール

# yum install mod24_ssl

・設定ファイル(ssl.conf)の設定
上記のパスを記載する。
https://qiita.com/sayama0402/items/011644191dfdbde9c646

#systemctl restart httpd

エラーが出る場合は、以下のコマンドで設定ファイルのテスト

#service httpd configtest

■AWSのLightsailの場合
以下でできるみたい。それと、wwwとwwwなしドメインの両方でいけるようだ。

基本的に以下のサイトの通りで成功する。すごい。
https://qiita.com/yshishido/items/67c57b9faafbda07da81

cd /tmp
curl -s https://api.github.com/repositories/37038121/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d '"' -f 4 | wget -i -
tar xf lego_v3.3.0_linux_amd64.tar.gz ←バージョンはタブで押せばダウンロードしたものが自動で表示される。
sudo mv lego /usr/local/bin/lego
sudo /opt/bitnami/ctlscript.sh stop

sudo lego --email="{メールアドレス}" --domains="{ドメイン}" --path="/etc/lego" --tls run

--domains="example.com" --domains="www.example.com" の2つを実行

Do you accept the TOS? Y/n
でyと答える。

sudo mv /opt/bitnami/apache2/conf/server.crt /opt/bitnami/apache2/conf/server.crt.old
sudo mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/server.key.old
sudo mv /opt/bitnami/apache2/conf/server.csr /opt/bitnami/apache2/conf/server.csr.old
sudo ln -s /etc/lego/certificates/{ドメイン名}.key /opt/bitnami/apache2/conf/server.key
sudo ln -s /etc/lego/certificates/{ドメイン名}.crt /opt/bitnami/apache2/conf/server.crt
sudo chown root:root /opt/bitnami/apache2/conf/server*
sudo chmod 600 /opt/bitnami/apache2/conf/server*

sudo /opt/bitnami/ctlscript.sh start

■SSLへのリダイレクト
Googleの検索エンジンでもHTTPSが優先されるし、ChromeではHTTPのサイトは警告がでる。
なので、HTTPで通信してきた場合はHTTPSに強制的にリダイレクトされるようにしよう。
以下のサイトの通りにやればできた。
https://www.karelie.net/aws-lightsail-build-wordpress-ssl/#https

/opt/bitnami/apache2/conf/bitnami/bitnami.confに関して、以下の3行を追加する。
 
9行目あたりの以下の下に
DocumentRoot “/opt/bitnami/apache2/htdocs”
以下を追加
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://example.com/$1 [R,L]

Apacheの再起動 →restart httpdは動かなかった。
/opt/bitnami/ctlscript.sh restart apache

公開サーバに、ドメイン名でアクセスできるようにする。

■Route 53について
Route 53というサービスがあり、ドメインの取得とDNSサーバが運用できる。
他で取得したドメインでも使えるはず。
https://qiita.com/Yuki_BB3/items/effdf1bb38263bfef82a
ただ、別のこの機能を使わなくてもElastic IPアドレスと他のDNSサービスで
取得したドメインおよびドメインの設定で問題ないと思う

■ドメインの取得
まずは、ドメインを取得しよう
momiji.pw

■Elastic IP
(1)概要
Elastic IPアドレスを取得して、固定的にIPアドレスを使う。
使わなくなったり、EC2が実行中でない場合には課金される。
→使わなくなったら、廃止しましょう。
※Elasticとは、弾力がある、という意味

どんな利点があるかというと、サーバを再起動したりしてもIPアドレスが変わらない。
また、IPアドレスを取得しておくと、その割り当てを柔軟に変更できる。途中でインスタンスを変更することも可能。便利だ。

(2)設定
・EC2のメニューの左メニュー、「ネットワーク&セキュリティ」>Elastic IP
「Elastic IPアドレスの割り当て」
・2つの選択肢から、「Amazon の IPv4 アドレスプール」を選択して「割り当て」
すると、パブリックIPアドレス(=グローバルIPアドレス)が割り当てられる
→このIPをメモしておこう18.177.177.50
・次に、割り当てたパブリックIPアドレスをEC2のインスタンスに割り当てる。「Elastic IPアドレスの関連付け」ボタンを押す。「インスタンス」を選択、該当するインスタンスを適用する→関連付けるをクリック
・EC2のインスタンスで、先ほど割り当てたインスタンスに、Elastic IPが割り当てられているかを確認する
※Elastic IPアドレスもリージョン単位で管理されている。

(2)-2 解放するには
該当する「Elastic IP」をクリックで選択して、「Elastic IP アドレスの関連付け解除」
これにより、インスタンスに割り当てられていたIPアドレスが元に戻る
・また、該当する「Elastic IP」をチェックボックスを入れて選択、「アクション」
から「Elastic IPの解放」。これで、Elastic IPが完全に開放された。

(3)DNSの設定
ドメインを取得したDNSレジストラで、Aレコードを設定
a www 203.0.113.124 ←Elastic IPアドレス

(4)試してみる
きちんと、取得したドメインでWebサーバにアクセスできた

(5)メモ Route 53を使わずに実施できたのだが、Route 53のメモ。
ホストゾーンの作成というのがあるが、これが何をしているのか、よくわからない。
ホストゾーンの作成を行わずにうまくいけた気がする。気のせいか。
参考であるが、ホストゾーンの作成は以下。
AWSにて、サービス>ネットワーキングとコンテンツ配信>Route 53
選択するメニューらしきが出たら「ドメインの登録」でいいと思う
左のメニューから、「ホストゾーン」「ホストゾーンの作成」をクリックする
「ドメイン名」を入れる。「作成」ボタンを押す

↑このページのトップヘ