My Tracking

My Tracking

記憶力の低下が気になるアラフォー男の備忘録

【sendmail】mailqの処理の備忘録

メールシステムの運用を行うと、メールキューが溜まったり、またそれらをメンテナンスしたりと 比較的に、メールキューに近いところでシステム管理業務をすることが多いので、その備忘録。

なお、下記はsendmailをベースとした内容を前提としている。

目次

メールキューとは

sendmailは、メールメッセージをすぐに配信することができなければ、 後で配信するためにそのメールメッセージを一時的に保存される。

この一時的に保存される場所のことが「キュー」と呼ばれる。

メールキューの再送間隔とかキューの保持期間とか。

確か、キューに保存されるとsendmailには以下のデフォルトが適用されると思ったが、定かでない。

  • 再送間隔:1時間
  • キュー内の保持最大期間:5日(当該期間を超過すると削除だったはず

※今度、しっかり調べる・・

キューに保存されるファイル

キューに保存されるメールメッセージは、2つに分類される

  • qfファイル:メッセージヘッダ(キュー制御ファイル)
  • dfファイル:メッセージ本文

qfファイル

メッセージヘッダ(キュー制御ファイル)を制御するqfファイルは 下記のような内容を保持している。

  • メッセージの配信。(発信アドレスと受信者アドレス)
  • メッセージの処理順序
  • メッセージの期限切れによる削除
  • メッセージの説明

実際には、下記のような内容となる。(※補足説明のために追加)

[root@mx-ns mqueue]# cat qfu7S5iNCP018797
V8(※バージョン)
T1472363064(※キューに生成された日時)
K1472364785(※最後に処理された時間)
N2(※施行した回数)
P210451(※優先度)
I253/2/131555
MDeferred: mx1.mail.yahoo.co.jp.: No route to host(※キューに入った原因)
Fbs
$_localhost [127.0.0.1]
$rESMTP
$smx-ns.simalab.com
${daemon_flags}
${if_addr}127.0.0.1
S<ment@mx-ns.simalab.com>
MDeferred: mx1.mail.yahoo.co.jp.: No route to host
rRFC822; test@yahoo.co.jp
RPFD:<test@yahoo.co.jp>
H?P?Return-Path: <g>※以降はメールヘッダ情報
H??Received: from mx-ns.simalab.com (localhost [127.0.0.1])
        by mx-ns.simalab.com (8.14.4/8.14.4) with ESMTP id u7S5iNCP018797
        for <test@yahoo.co.jp>; Sun, 28 Aug 2016 14:44:24 +0900
H??Received: (from ment@localhost)
        by mx-ns.simalab.com (8.14.4/8.14.4/Submit) id u7S5iN7L018796
        for test@yahoo.co.jp; Sun, 28 Aug 2016 14:44:23 +0900
H??From: ment@mx-ns.simalab.com
H??Message-Id: <201608280544.u7S5iN7L018796@mx-ns.simalab.com>
H??Date: Sun, 28 Aug 2016 14:44:23 +0900
H??To: test@yahoo.co.jp
H??Subject: test
H??User-Agent: Heirloom mailx 12.4 7/29/08
H??MIME-Version: 1.0
H??Content-Type: text/plain; charset=us-ascii
H??Content-Transfer-Encoding: 7bit
.
[root@mx-ns mqueue]#

dfファイル

メール本文は、dfファイルとして、保存される。 たとえば、「test」というメール本文となるメールのdfファイルは 下記の通りとなる。

[root@mx-ns mqueue]# cat dfu7S5iNCP018797
test
[root@mx-ns mqueue]#

mailqの表示

実際にメールキューを表示する場合は、「mailq」コマンドを実施する。

[root@mx-ns mqueue]# mailq
                /var/spool/mqueue (1 request)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
u7S5iNCP018797        5 Sun Aug 28 14:44 <ment@mx-ns.simalab.com>
                 (Deferred: mx1.mail.yahoo.co.jp.: No route to host)
                                         <test@yahoo.co.jp>
                Total requests: 1
[root@mx-ns mqueue]#

mailqの削除

メールキューを削除する場合は、通常は/var/spool/mqueue/のディレクトリ上で、 下記のとおり、実行する。

rm -f [dq]f[キューID]

キューIDを「u81EtjjS018075」を削除したい場合、下記のとおり実施し、 qfファイルとdfファイルを一緒に実行する。

※[dq]の後のfを忘れずに付ける。

[root@mx-ns mqueue]# cd /var/spool/mqueue/
[root@mx-ns mqueue]# rm -f [dq]fu81EtjjS018075

実行中のmailq

mailqを確認したとき、メッセージIDの右側にアスタリスク(*)があるメールキューは そのメッセージがロックされていることを示す。

[root@mx-ns ~]# mailq
                /var/spool/mqueue (2 requests)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
u7S7aDBu020301*       2 Sun Aug 28 16:36 <ment@mx-ns.simalab.com>
                                         <test@yahoo.co.jp>
[root@mx-ns ~]# 

ロックされているファイルを先述の削除方法で、実行した場合、 うまく削除できない場合がある。

その場合は、当該プロセスを強制的に削除してから、削除する。

ファイルをロックしているプロセスを確認する。

[root@mx-ns ~]# ps -ef | grep sendmail
root      1360     1  0 Aug27 ?        00:00:02 sendmail: accepting connections
smmsp     1369     1  0 Aug27 ?        00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
root     20394     1  0 16:41 ?        00:00:00 sendmail: ./u7S7f0FQ020391 mx3.mail.yahoo.co.jp.: user open
root     20411 20396  0 16:41 pts/0    00:00:00 grep sendmail
[root@mx-ns ~]#

上記で、u7S7f0FQ020391をロックしているプロセスID20394を強制停止する。

[root@mx-ns ~]# kill -9 20394
[root@mx-ns ~]# ps -ef | grep sendmail
root      1360     1  0 Aug27 ?        00:00:02 sendmail: accepting connections
smmsp     1369     1  0 Aug27 ?        00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
root     20415 20396  0 16:41 pts/0    00:00:00 grep sendmail
[root@mx-ns ~]#
[root@mx-ns mqueue]# service sendmail status
sendmail (pid  1360) を実行中...
sm-client (pid  1369) を実行中...
[root@mx-ns mqueue]#

再度mailqを表示する。u7S7f0FQ020391のアスタリスク(*)が消えていることを確認。

[root@mx-ns ~]# mailq
                /var/spool/mqueue (1 request)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
u7S7f0FQ020391        5 Sun Aug 28 16:41 <ment@mx-ns.simalab.com>
                                         <test@yahoo.co.jp>
                Total requests: 1
[root@mx-ns ~]#

ファイルのロックが消えたら、当該キューIDを削除する。

[root@mx-ns ~]# cd /var/spool/mqueue/
[root@mx-ns mqueue]# rm -f [dq]fu7S7f0FQ020391
[root@mx-ns mqueue]# mailq
/var/spool/mqueue is empty
                Total requests: 0
[root@mx-ns mqueue]#

mailqから、キューIDのみ抽出する。

mailqに大量のキューが溜まった場合、キューIDのみ 抽出したい場合のコマンド。(うまいかどうかはさておいて)

[root@mx-ns mqueue]# mailq | sed -e 's/\s\+/ /g' | cut -d' ' -f1 | grep "^u"
u81FU89g026804
u81GU8bU009083
u81JleD0025444
u819U8pe002487*
u81GU8bS009083
u81DU8CX029519
u81NSj96014787
u816U88x022456*
u818U8rP020157
u81AU8jW017518
u816U891022456
u817U8En005000
u816U890022456
u819U8pd002487*
u81G7g8M003629
u81BU8OZ032246
u817U8Eo005000*
u818U8rQ020157*
u817U8El005000*
u817U8Em005000
u815U8VB007800*
u81EtjjS018075*
u81F7MY1020895
u81AQsV3016687
u7VI79np032048
u7UJU8fS020724*
u7U1U8Ub011452
u7TNIIGO011127
u7T16129005631*
[root@mx-ns mqueue]#

参考文献

sendmail 第3版〈VOLUME1〉運用編

sendmail 第3版〈VOLUME1〉運用編

【AWS学習記】WordPress 環境構築⑥~Wordpressへの接続および投稿

WordPress構築を行うにあたり、WEBサーバ用のEC2にApache/PHP/Wordpresの追加まで完了したため、 いよいよ、wordpressを利用する。

目次

構成

(構成図)

Wordpress用DBの作成

RDS上に、WordpressのDB作成を行う。ここでは、DB名を「wordpress」とした。

[ec2-user@ip-10-0-0-158 html]$ mysql -h  aws-mysql-rds.ciszm1fnyhoj.ap-northeast-1.rds.amazonaws.com -u admin -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 68
Server version: 5.6.27-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql> create database wordpress;
Query OK, 1 row affected (0.02 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| innodb             |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
6 rows in set (0.00 sec)

mysql>

wordpressのセットアップ

次に、wordpresのセットアップを行う。

ここでは、下記のとおり、アクセスすると

http://公開用WEBサーバのEIP/wordpress

wordpresのようこそ画面が表示される。

ここで、サイト名やユーザー名・パスワードを設定する。

完了すると、パスワードが通知される。

通知されたパスワードでログインする。

Wordpressへのテスト投稿

ログインができたら、テスト投稿してみる。

テスト投稿を入力し、投稿。

投稿が正常に登録できたら、wordpressの記事一覧上にも表示されることを確認する。

【AWS学習記】WordPress 環境構築⑤~WEBサーバ用EC2インスタンスにApache/PHP/Wordpressの追加

WordPress構築を行うにあたり、WEBサーバ用EC2インスタンスおよびRDSへの接続まで完了したため、WEBサーバ用のEC2にApache/PHP/Wordpresを追加インストールする。

なお、WEBサーバ用のEC2(AmazonLinux)には、ec2-userで接続したものとして、以降の手順を記載。

目次

構成

(構成図)

Apacheのインストール

まず、下記のとおり、Apacheをインストールする。

[ec2-user@ip-10-0-0-158 ~]$ sudo yum -y install httpd

Apacheの起動

インストールしたApacheを起動する。起動時にメッセージがでるが、ここではとりあえず無視。

[ec2-user@ip-10-0-0-158 ~]$ sudo service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for ip-10-0-0-158
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [  OK  ]
[ec2-user@ip-10-0-0-158 ~]$ 

wordpressの取得

wordpressを下記のとおり、取得⇒解凍⇒Apacheの公開ディレクトリ(ここでは、/var/www/html/)に、コピーまで行う。

[ec2-user@ip-10-0-0-158 ~]$cd /usr/local/src
[ec2-user@ip-10-0-0-158 src]$ sudo wget https://ja.wordpress.org/wordpress-4.0-ja.tar.gz
[ec2-user@ip-10-0-0-158 src]$ sudo tar zxf wordpress-4.0-ja.tar.gz
[ec2-user@ip-10-0-0-158 src]$ ls -l
total 6344
drwxr-xr-x 5 nobody nfsnobody    4096 Sep  5  2014 wordpress
-rw-r--r-- 1 root   root      6489528 Dec 15  2014 wordpress-4.0-ja.tar.gz
[ec2-user@ip-10-0-0-158 src]$

[ec2-user@ip-10-0-0-158 src]$ sudo cp -r wordpress /var/www/html/

PHPのインストール

次に、下記のとおり、PHPに関するパッケージをインストールする。

[ec2-user@ip-10-0-0-158 wordpress]$ sudo yum install -y php php-mysql

Apacheの設定

ApachePHPを利用できるようにするため、下記のとおりhttpd.confを開き、

[ec2-user@ip-10-0-0-158 wordpress]$ sudo vi /etc/httpd/conf/httpd.conf

下記を追記する。

AddType application/x-httpd-php .php

PHPの設定

ここでは、検証と学習のための環境なので、深く考えず、
PHP(/etc/php.ini)の設定は、下記のサイトに記載のPHPの設定をまんま設定した。

https://www.neteng.co/?p=348

Apacheの再起動

Apacheを再起動し、ここまでの設定を反映させる。

[ec2-user@ip-10-0-0-158 ~]$ sudo service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: httpd: apr_sockaddr_info_get() failed for ip-10-0-0-158
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [  OK  ]
[ec2-user@ip-10-0-0-158 ~]$

Linux(CentOS)で不要起動ポートを停止するまでの備忘録

あまり使っていない野良サーバ(CentOS)に久しぶりにログインし、 オープンポートを調べた際に、見慣れないオープンポートを発見。

それらのポートを停止するまでの作業の備忘録。

目次

起動ポートの確認。

野良サーバに久しぶりにログインし、nmap でオープンポートを調べたことがそもそもの経緯。

[root@Linux ~]# nmap localhost

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2016-08-29 09:23 JST
Interesting ports on localhost.localdomain (127.0.0.1):
Not shown: 1672 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
81/tcp   open  hosts2-ns
111/tcp  open  rpcbind
755/tcp  open  unknown
3306/tcp open  mysql

見慣れない「755/tcp」ポートの起動を確認。
「unknown」となっていることから、調べてみることに。

起動ポートのプロセス確認。

下記記事を参考に、lsof コマンドとやらでプロセス確認

[root@Linux ~]# lsof -i:755
COMMAND    PID USER   FD   TYPE DEVICE SIZE NODE NAME
rpc.statd 4813 root    7u  IPv4   9087       TCP *:755 (LISTEN)
[root@Linux ~]#

不要サービスの停止。

rpc.statd とは下記のようなものらしい。

Man page of rpc.statd

NFSは当該サーバでは、利用していないので、心置きなく停止。

[root@Linux ~]# service nfslock stop
NFS statd を停止中:                                        [  OK  ]
[root@Linux ~]#

ポートがオープンしていないことを確認

nmapを再度実行し、「755/tcp」ポートがオープンしていないことを確認

[root@Linux ~]# nmap localhost
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2016-08-29 09:26 JST
Interesting ports on localhost.localdomain (127.0.0.1):
Not shown: 1673 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
81/tcp   open  hosts2-ns
111/tcp  open  rpcbind
3306/tcp open  mysql

Nmap finished: 1 IP address (1 host up) scanned in 0.038 seconds

後は、「nfslock 」をchkconfigで永続的に起動しないように設定。

たまにしか、やらないので忘れないようにメモ。

【AWS学習記】WordPress 環境構築④~WEBサーバ用EC2インスタンス起動

WordPress構築を行うにあたり、RDSの起動まで完了したため、WEBサーバ用のEC2のインスタンスを起動する。」 ここでも、極力aws-cliを利用する。

目次

構成

(構成図)

EC2の起動

EC2には、AmazonLinuxを起動する。

なお、作成するにあたり、以下で、作成した下記のサブネットに該当するsubnetIDを指定する。

* 10.0.0.0/24 公開用WEBサーバを収容する。(SubnetIDはここでは「subnet-xxxbf105」)

root@Linux ~]# aws ec2 run-instances --image-id ami-374db956 --instance-type t2.micro \
> --security-group-ids sg-xxxafdb4 --key-name my-keypair \
> --subnet-id subnet-xxxbf105
{
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

中略

~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ]
}
[root@Linux ~]# 

EIPの取得

インターネットからアクセス可能となるようにEIPを取得する。

[root@Linux ~]# aws ec2 allocate-address
{
    "PublicIp": "52.xxx.xx.247",
    "Domain": "vpc",
    "AllocationId": "eipalloc-xxx496ac"
}
[root@Linux ~]#
[root@Linux ~]#

EIPの割り当て

取得したEIPを起動したEC2インスタンスに割り当てる。

[root@Linux ~]# aws ec2 associate-address --allocation-id eipalloc-xxx496ac \
> --instance-id i-xxxxxxf837cd79xx
{
    "AssociationId": "eipassoc-1a1eed7d"
}
[root@Linux ~]#

セキュリティグループへのインバウンドルールの追加

起動したEC2向けにインバウンドルールを適用する。

ここでは、SSHとHTTPを許可する。

[root@Linux ~]# aws ec2 authorize-security-group-ingress --group-id sg-xxxafdb4 \
> --protocol tcp --port 22 --cidr 0.0.0.0/0
[root@Linux ~]#
[root@Linux ~]# aws ec2 authorize-security-group-ingress --group-id sg-xxxafdb4 \
>  --protocol tcp --port 80 --cidr 0.0.0.0/0
[root@Linux ~]#

teratermから公開用WEBサーバEC2インスタンスへの接続

作成したEIP(ここでは、52.xxx.xx.247)に対して、teratermからSSH接続する。

※ここでは、ユーザー名「ec2-user」で接続し、以降の作業を行う。

mysqlクライアントインストール

接続した公開用WEBサーバEC2インスタンスから、RDSインスタンスに接続するため、
mysqlクライアントインストールを公開用WEBサーバEC2インスタンスにインストールする。

[root@Linux ~]# sudo yum install -y mysql

公開用WEBサーバEC2インスタンスからRDSへの接続

mysqlクライアントを利用して、RDSへ接続をしてみる。
接続するために、RDSへのエンドポイント名を確認する。

RDSの管理コンソールから、起動しているインスタンスを選択し、
下記のエンドポイント名を取得する。

エンドポイント名を取得したら、RDSへ下記のとおり接続できることを確認する。

[ec2-user@ip-10-0-0-158 html]$ mysql -h  aws-mysql-rds.ciszm1fnyhoj.ap-northeast-1.rds.amazonaws.com -u admin -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 68
Server version: 5.6.27-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

【AWS学習記】WordPress 環境構築③~RDS設定

WordPress構築を行うにあたり、VPCの作成まで完了したため、続いてデータベースサーバを RDSを利用し、構築する。ここでも、極力aws-cliを利用する。

目次

構成

(構成図)

DBサブネットグループの作成

RDSインスタンスVPC内で起動する場合、専用のDBのサブネットグループが 必要となるようなので、作成する。

なお、作成するにあたり、以下で、作成した下記のサブネットに該当するsubnetIDを指定する。

* 10.0.0.1/24 RDSを収容する。(SubnetIDはここでは「subnet-xxx9c098」。
* 10.0.0.2/24 今回はさしあたり利用しない(SubnetIDはここでは「subnet-xxxbf1bf」

[root@Linux ~]# aws rds  create-db-subnet-group --db-subnet-group-name mysql-subnet --db-subnet-group-description mysql-subnet --subnet-ids subnet-xxx9c098 subnet-xxxbf1bf
{
    "DBSubnetGroup": {
        "Subnets": [
            {
                "SubnetStatus": "Active",
                "SubnetIdentifier": "subnet-xxxbf1bf",
                "SubnetAvailabilityZone": {
                    "Name": "ap-northeast-1a"
                }
            },
            {
                "SubnetStatus": "Active",
                "SubnetIdentifier": "subnet-xxx9c098",
                "SubnetAvailabilityZone": {
                    "Name": "ap-northeast-1c"
                }
            }
        ],
        "DBSubnetGroupName": "mysql-subnet",
        "VpcId": "vpc-1fe4027b",
        "DBSubnetGroupDescription": "mysql-subnet",
        "SubnetGroupStatus": "Complete"
    }
}
[root@Linux ~]#

* --db-subnet-group-name・・・DBサブネットグループ名
* --db-subnet-group-description・・・DBサブネットグループ名の説明
* --subnet-ids・・・DBサブネットグループに設定するサブネットIDを指定

RDSインスタンスの起動

RDSインスタンスを起動する。ここでは、mysqlを指定する。

[root@Linux ~]# aws rds create-db-instance \
> --db-instance-identifier aws-mysql-rds \
> --allocated-storage 5 \
> --db-instance-class db.t2.micro \
> --engine MySQL \
> --master-username admin \
> --master-user-password password \
> --vpc-security-group-ids sg-xxxafdb4 \
> --db-subnet-group-name mysql-subnet \
> --backup-retention-period 1 \
> --port 3306 \
> --engine-version 5.6.27 \
> --license-model general-public-license \
> --multi-az \
> --no-publicly-accessible
{
    "DBInstance": {
        "PubliclyAccessible": false,
        "MasterUsername": "admin",
        "MonitoringInterval": 0,
        "LicenseModel": "general-public-license",
        "VpcSecurityGroups": [
            {
                "Status": "active",
                "VpcSecurityGroupId": "sg-xxxafdb4"
            }
        ],
        "CopyTagsToSnapshot": false,
        "OptionGroupMemberships": [
            {
                "Status": "in-sync",
                "OptionGroupName": "default:mysql-5-6"
            }
        ],
        "PendingModifiedValues": {
            "MasterUserPassword": "****"
        },
        "Engine": "mysql",
        "MultiAZ": true,
        "DBSecurityGroups": [],
        "DBParameterGroups": [
            {
                "DBParameterGroupName": "default.mysql5.6",
                "ParameterApplyStatus": "in-sync"
            }
        ],
        "AutoMinorVersionUpgrade": true,
        "PreferredBackupWindow": "19:32-20:02",
        "DBSubnetGroup": {
            "Subnets": [
                {
                    "SubnetStatus": "Active",
                    "SubnetIdentifier": "subnet-xxxbf1bf",
                    "SubnetAvailabilityZone": {
                        "Name": "ap-northeast-1a"
                    }
                },
                {
                    "SubnetStatus": "Active",
                    "SubnetIdentifier": "subnet-xxx9c098",
                    "SubnetAvailabilityZone": {
                        "Name": "ap-northeast-1c"
                    }
                }
            ],
            "DBSubnetGroupName": "mysql-subnet",
            "VpcId": "vpc-xxx4027b",
            "DBSubnetGroupDescription": "mysql-subnet",
            "SubnetGroupStatus": "Complete"
        },
        "ReadReplicaDBInstanceIdentifiers": [],
        "AllocatedStorage": 5,
        "BackupRetentionPeriod": 1,
        "PreferredMaintenanceWindow": "sat:16:22-sat:16:52",
        "DBInstanceStatus": "creating",
        "EngineVersion": "5.6.27",
        "DomainMemberships": [],
        "StorageType": "standard",
        "DbiResourceId": "db-2CMKMOIG35NYIDP7W6BAXI54SQ",
        "CACertificateIdentifier": "rds-ca-2015",
        "StorageEncrypted": false,
        "DBInstanceClass": "db.t2.micro",
        "DbInstancePort": 0,
        "DBInstanceIdentifier": "aws-mysql-rds"
    }
}
[root@Linux ~]#

* --db-instance-identifier・・・RDSインスタンス名を指定する
* --allocated-storage・・・RDSインスタンスで使うディスクを指定(GB)
* --db-instance-class ・・・RDSインスタンスタイプを指定
* --engine・・・DBエンジンを指定
* --master-username・・・管理者ユーザーを指定
* --master-user-password ・・・管理者ユーザーパスワードを指定
* --vpc-security-group-ids・・・VPCセキュリティグループを指定(後述)
* --db-subnet-group-name・・・先の手順で作成したDBサブネットグループ名を指定
* --backup-retention-period・・・自動バックアップの保存世代数を指定
* --multi-az・・・マルチAZ配置の有効・無効を設定
* --no-publicly-accessible・・・DBサブネットグループに設定するサブネットIDを指定

RDS起動確認

AWSコンソール側で、RDSインスタンスが起動したことを確認する。

RDS起動時に指定したVPCセキュリティグループについて

RDS起動時に「--vpc-security-group-ids」に指定するIDがよくわからなかったため。備忘録。

今回は、VPCのセキュリティグループのうち、10.0.0.0.0/16に紐づいているセキュリティグループ (ここでは、「 sg-xxxafdb4」)を指定した。

マルチAZ配置を有効にする際の注意点

無料枠にもかかわらず、またも請求。
明細を見ると下記のとおり。課金。

$0.052 per RDS T2 Micro Multi-AZ Instance hour (or partial hour) running MySQL
$0.24 per GB-month of provisioned storage for Multi-AZ deployments

マルチAZ=無料枠対象外ということか・・・
トホホ・・

【AWS学習記】WordPress 環境構築②~VPC作成

WordPress構築を行うにあたり、まずはVPCを作成してサブネットを作成する。 ここでも、極力aws-cliを利用する。

目次

構成

(構成図)

VPCの作成

まずは、今回作成するネットワーク全体を表すCIDRを入力し、VPCを作成する。 今回は、10.0.0.0/16をアドレス範囲とした。

[root@Linux ~]# aws ec2 create-vpc --cidr-block 10.0.0.0/16
{
    "Vpc": {
        "VpcId": "vpc-xxx4027b",
        "InstanceTenancy": "default",
        "State": "pending",
        "DhcpOptionsId": "dopt-027a3367",
        "CidrBlock": "10.0.0.0/16",
        "IsDefault": false
    }
}
[root@Linux ~]#
[root@Linux ~]# aws ec2 describe-vpcs
{
    "Vpcs": [
        {
            "VpcId": "vpc-xxx4027b",
            "InstanceTenancy": "default",
            "State": "available",
            "DhcpOptionsId": "dopt-027a3367",
            "CidrBlock": "10.0.0.0/16",
            "IsDefault": false
        }
    ]
}
[root@Linux ~]#

作成された際のVpcIdを控えておく。(ここでは、vpc-xxx4027b)

サブネットの作成

作成したVPCにサブネットを作成する。

http://dev.classmethod.jp/cloud/aws/minimum-amazon-vpc-server-environment/

上記参照サイトを参考に、下記3つのサブネットを作成する。

  • 10.0.0.0/24 WEBサーバを収容する。AZはap-northeast-1aとした。
  • 10.0.0.1/24 RDSを収容する。AZはap-northeast-1cとした。
  • 10.0.0.2/24 今回はさしあたり利用しない

コマンドを流して、実行する。

まずは、10.0.0.0/24

[root@Linux ~]# aws ec2 create-subnet --vpc-id vpc-xxx4027b --cidr-block 10.0.0.0/24 --availability-zone ap-northeast-1a
{
    "Subnet": {
        "VpcId": "vpc-xxx4027b",
        "CidrBlock": "10.0.0.0/24",
        "State": "pending",
        "AvailabilityZone": "ap-northeast-1a",
        "SubnetId": "subnet-xxxbf105",
        "AvailableIpAddressCount": 251
    }
}
[root@Linux ~]#

次に、10.0.0.1/24

[root@Linux ~]# aws ec2 create-subnet --vpc-id vpc-xxx4027b --cidr-block 10.0.1.0/24 --availability-zone ap-northeast-1c
{
    "Subnet": {
        "VpcId": "vpc-xxx4027b",
        "CidrBlock": "10.0.1.0/24",
        "State": "pending",
        "AvailabilityZone": "ap-northeast-1c",
        "SubnetId": "subnet-xxx9c098",
        "AvailableIpAddressCount": 251
    }
}
[root@Linux ~]#
~]#

最後に、10.0.0.2/24

[root@Linux ~]# aws ec2 create-subnet --vpc-id vpc-xxx4027b --cidr-block 10.0.2.0/24 --availability-zone ap-northeast-1a
{
    "Subnet": {
        "VpcId": "vpc-xxx4027b",
        "CidrBlock": "10.0.2.0/24",
        "State": "pending",
        "AvailabilityZone": "ap-northeast-1a",
        "SubnetId": "subnet-xxxbf1bf",
        "AvailableIpAddressCount": 251
    }
}
[root@Linux ~]#

作成されたサブネットを下記のコマンドで確認しておく。

[root@Linux ~]# aws ec2 describe-subnets

インターネットゲートウェイの作成

VPCはデフォルトで、VPC内部のEC2インスタンスがインターネットと 接続できないとのことで、EC2インスタンスがインターネットに接続するための インターネットゲートウェイを作成する。

[root@Linux ~]# aws ec2 create-internet-gateway
{
    "InternetGateway": {
        "Tags": [],
        "InternetGatewayId": "igw-xxx0463b",
        "Attachments": []
    }
}
[root@Linux ~]#

作成された際のインターネットゲートウェイを控えておく。(ここでは、igw-xxx0463b)

作成されたインターネットゲートウェイを先に作成したvpc(ここでは、vpc-xxx4027b)にアタッチする。

[root@Linux ~]# aws ec2 attach-internet-gateway 
>  --internet-gateway-id igw-xxx0463b \
>  --vpc-id vpc-xxx4027b
[root@Linux ~]#

※実行後の出力はされない。

下記のコマンドで確認しておく。

[root@Linux ~]# aws ec2 describe-internet-gateways
{
    "InternetGateways": [
        {
            "Tags": [],
            "InternetGatewayId": "igw-xxx0463b",
            "Attachments": [
                {
                    "State": "available",
                    "VpcId": "vpc-xxx4027b"
                }
            ]
        }
    ]
}
[root@Linux ~]#

ルートテーブルの作成

VPCからインターネットへの接続するためのルートテーブルを作成する。 今回は、aws-cliでのやり方がよくわからなかっため、AWSコンソールから設定した。

VPCのダッシュボード画面より、[ルートテーブル]を選択する。その後、作成したvpc(ここでは、vpc-xxx4027b)を選択する。

[編集]する。

[別ルールの追加]をする。

下記を入力し、[保存]

* 送信先(0.0.0.0/0)
* ターゲットインターネットゲートウェイ(ここでは、igw-xxx0463b)

ルートテーブルが追加されたことを確認する。

最後に[サブネット]の画面で、下記のサブネットが作成したvpc(ここでは、vpc-xxx4027b)に 紐づいていることを確認する。

  • 10.0.0.0/24
  • 10.0.0.1/24
  • 10.0.0.2/24