全部AWSでRedmineをサクッと構築する

# はじめに

とあるプロジェクトに途中から参画することになりました。
そこではあらゆるタスク・課題・バグがExcelの一覧で管理され、添付メールでやりとりする世界が広がってました。。
当然ながら資料のデグレは不可避。

そこで、みんなで共同利用できるRedmineを立てて少しは効率化しようとしたお話です。

# 本題

以下の内容をハンズオン形式で書いていきます。

- EC2でRedmineを構築
- Route53でドメイン取得
- ACMで証明書発行
- ELBを使ってHTTPS化
- SESでのメール送信
- AWS BackupでのEC2バックアップ自動化

Redmineを立てることを目的にしてますが、Redmineに限らず各AWSのサービスの使い方として参考になる記事になってると思います。

## EC2のマーケットプレイスでBitnami Redmineを作る

EC2のAWSマーケットプレイスから**[BitnamiのRedmineインストール済みのイメージ](https://aws.amazon.com/marketplace/pp/B00NNZUVHQ)**を使うことにします。
インスタンスタイプやEBSサイズを環境に合わせて決めます。

![WS000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/861695b4-380d-e37e-dd3f-d8c4f4624d21.jpeg)


EC2が起動したらブラウザにパブリックIPを入力してアクセスします。
とりあえずRedmineにはアクセスできました。
が、いろいろとなんとかしたい点があるのでこのあと対処していきます。

![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/66104524-42f0-241c-2eb5-a3772a24a39d.jpeg)


#### 管理者のID・パスワードを調べる

[BitnamiのWebサイト](https://docs.bitnami.com/aws/faq/get-started/find-credentials/)に調べ方が載ってました。
マネージメントコンソールから**「システムログの取得」**で確認できるようです。

![WS000002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/2fcecfb4-0c92-7c0c-0ee9-e8a93cba5ce3.jpeg)


ユーザー名は「user」、パスワードは任意の文字列が書いてあるのでそれを入力すると無事ログインできました。
ちなみにSSHでログインして、以下のファイルを確認する方法でもOKです。

```console
$ cat /home/bitnami/bitnami_credentials
```

#### Bitnamiのロゴを消す

これは以前も似たようなことをやって記事にしたことがありました。

- [WordPress (with GCP)から右下の邪魔なBitnamiのロゴを消す](https://qiita.com/hamham/items/333c730baaa614007f2a)

基本的には設定ファイルのディレクトリが違うくらいです。
まずSSHでEC2に接続します。ユーザーは「ubuntu」で、鍵はEC2作成時のpemを指定します。
そして以下のコマンドを打ちます

```terminal
$ sudo /opt/bitnami/apps/redmine/bnconfig --disable_banner 1
```
これで邪魔なロゴが消えました。

#### 通信を保護する（HTTPSにする）

これにはいろいろと手順が必要です。
次のようなステップで進めていきます。

- [Route53](https://aws.amazon.com/jp/route53/)でドメインを取得
- [AWS Certificate Manager](https://aws.amazon.com/jp/certificate-manager/)で証明書を発行
- EC2の手前にELBを置いて、ELBに証明書を導入

## Route53でドメインを取得する

[Route53](https://aws.amazon.com/jp/route53/)はAWSのDNSのサービスなのですが、ドメインを購入することもできます。
ドメインはいろいろ選べますが、.comドメインで年12ドルです。

![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/c2f9ba07-250e-6659-42a5-cebc448a62ff.jpeg)


当たり前ですが、世の中で使われてないドメイン名にする必要があります。
購入手続きをすすめると、連絡先として入力したメールアドレス宛に**「[Action required] Verify your email address to register a domain with Route 53」**というメールが送られてきますので、リンクをクリックして認証を完了させます。
自分の場合は認証してから17分後に、**「＊＊＊＊＊.com was successfully registered with Route 53」**というメールが来て、ホストゾーンにレコード（NSレコードとSOAレコード）が登録されていました。

## ACMで証明書を発行する。

[AWS Certificate Manager（ACM）](https://aws.amazon.com/jp/certificate-manager/)で証明書を発行します。
これはあとで作るELBに導入するためです。
ここでは例として**「redmine.＊＊＊＊＊.com」**で発行することにします。

![WS000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/8ed50cd2-af4e-57cf-6f29-8645338434a6.jpeg)


証明書の検証方法として、「DNSの検証」と「Eメールの検証」が選べます。
今回はRoute53で自分でDNSを管理しているので「DNSの検証」を選びます。
ウィザードを進めていくと、**証明書発行のためのCNAMEレコード**が表示されます。
このCNAMEレコードをRoute53に登録すると、検証が完了して証明書が発行されます。

## ELBの設定をする

次はELBを設定します。
なんでELBが必要かというと、AWSではACMで発行した証明書をEC2に入れることができません。
そのため、手前にELBを置いて、ELBでSSLを終端させる構成にするからです。
以下の図のイメージです。

![WS000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/683fee69-dace-a03a-dda1-bb6d3287826c.jpeg)


EC2の画面からELB（今回はHTTP、HTTPSを使うのでApplication Load Balancer）を設定します。
ELBは**HTTPS(443)をリスナー**として、さきほど発行したACMの証明書を選択します。
Security GroupはHTTPS(443)を通すように設定します。

次にターゲットグループですが、こちらは**HTTP(80)**にします。
最初に作ったRedmineのEC2インスタンスをターゲットとして登録します。
ここでELB→EC2のヘルスチェックがOKになる必要があります。
ヘルスチェック用のコンテンツを置くのが望ましいと思いますが、ここではパスとしてログイン画面を示す**「/login」**、HTTPの応答コードで**「200」**にします。（ヘルスチェックが通るようにSecurity Groupは設定してください）
これでステータスが**「healthy」**になりました。

![WS000006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/893cca4e-6b33-a037-2fb3-313ca2e9cd51.jpeg)


## Route53にAレコードを追加する。

ここまできたら、Route53で**「redmine.＊＊＊＊＊.com」**のAレコードを登録します。
エイリアスを「はい」にして、エイリアス先として、さきほど設定したELBを指定してします。
登録しても反映されるまで30分ほどかかりました。
その後、ブラウザから**「https:// redmine.＊＊＊＊＊.com/login」**にアクセスすると、保護された通信となりHTTPSでRedmineにアクセスできました。

証明書を確認すると、Amazonが発行した証明書であることがわかります。

![WS000007.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/2538c49a-06d5-b55f-4313-42b8e7c50b09.jpeg)


## SESでメールを飛ばせるようにする

Redmineを使い始めたら、チケットの作成・更新があった場合に、メール通知するようにしたくなると思います。
ここではメール送信の仕組みとして、[Simple Email Service(SES)](https://aws.amazon.com/jp/ses/)を使います。
~~2020年2月時点でSESは東京リージョンで提供されていないので、ここでは**オレゴンリージョン**にします。~~
**※【追記】2020年7月に東京リージョンでもSESが使えるようになりました**

#### 送信先メールアドレス制限の解除（サンドボックス環境の外へ）

SESはそのままだとサンドボックス環境となっていて、**認証された宛先メールアドレスにしか送信できません。**
認証されたメールアドレス以外に送信するには、AWSサポートセンターにサービス制限緩和のリクエストを送る必要があります。
参考までに自分が送ったサポートケースのリクエストを載せておきます。日本語でOKです。

![WS000009.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/3f553d22-da92-cc23-655e-6ce5b2d285d7.jpeg)


AWS側で承認されると、認証されたメールアドレス以外にも送信できるようになります。
自分の場合は、リクエストしてからサービス制限緩和がされるまで1日以上かかりました。

#### SMTPクレデンシャルの作成

SESの画面から、SMTPクレデンシャルを作成します。
以下の画面から作成を進めると、**「Smtp Username」**と**「Smtp Password」**が書かれたCSVがダウンロードできます。
これはあとから確認することができないので、忘れないように残してください。

![WS000010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/83655882-b05b-5eed-d90c-d9dd13e275ee.jpeg)


#### Redmineの設定ファイル（configuration.yml）を設定する。

Redmine側にメールサーバの設定をします。
設定ファイルを開きます。

```console
$ vi /opt/bitnami/apps/redmine/htdocs/config/configuration.yml
```

これに以下のように認証情報を記載します。

```yml:configuration.yml
-configuration
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      enable_starttls_auto: true
      address: "email-smtp.us-west-2.amazonaws.com" # SESのメールサーバ名を書く
      port: 587
      domain: "＊＊＊＊＊.com" # 送信するメールアドレスに使うドメインを書く
      authentication: :plain
      user_name: 'xxxxxxxxxxxxxxx' # smtp usernameを書く
      password: 'xxxxxxxxxxxxxxx' # smtp passwordを書く
```

設定を反映させるためnginxを再起動します。

```console
$ sudo /opt/bitnami/ctlscript.sh restart nginx
```

これでメールが飛ぶようになったので、Redmineの管理画面からテストメールを送ってみましょう。

![WS000011.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/a63dab97-e16f-ce00-7d8c-168b9bd614ff.jpeg)


## （おまけ）AWS BackupでEC2丸ごとバックアップ

[AWS Backup](https://aws.amazon.com/jp/backup/)でのEC2丸ごとバックアップは2020年1月にローンチされました。
これで簡単にバックアップをスケジュールすることが可能です。

まずバックアッププランを作成していきます。
既存のプランで日次バックアップ、35日後に破棄というルールがあるのでこれを選びます。

![WS000012.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/a449cc5d-3fdb-c979-5d5f-2dd9e3628c68.jpeg)


次にバックアップルールを見ます。
DailyBackupsで「バックアップルールのデフォルトを使用 - おすすめ」と書いてありますが、**自分はおすすめしません。**
なぜならデフォルトだとUTC時間のAM5:00頃にバックアップが取得されます。
これは日本時間だと14:00なので真っ昼間です。
日本時間のAM5:00（UTC時間にすると20:00）くらいにしたほうが無難でしょう。
バックアップ開始時間の幅もデフォルトだと8時間なので、ここは短く1時間にするほうがよいと思います。
バックアップの有効期限も35日（＝5週）も要件によって変更してよいと思います。

![WS000013.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272753/fb6b7b41-0a72-ea26-7a6e-2eae64cde4e0.jpeg)


リソースの割り当てでは、作成したEC2を指定します。
これで指定した時間になればバックアップが始まり、AMIが作成されていると思います。

# さいごに

以上、オールAWSでRedmineを構築した話でした。
誰かの役に立てば幸いです。

※過去記事をReviseして、[KDDI Engineer&Designer Advent Calendar 2021](https://qiita.com/advent-calendar/2021/engineer-designer)の23日目の記事としました。