書籍「AWSではじめるインフラ構築入門」で金がかかるのでドメイン名を取得しない場合に読み進める方法メモ

# はじめに
[「AWSではじめるインフラ構築入門 第2版」(翔泳社)](https://www.amazon.co.jp/AWS%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E5%AE%89%E5%85%A8%E3%81%A7%E5%A0%85%E7%89%A2%E3%81%AA%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9-%E4%B8%AD%E5%9E%A3-%E5%81%A5%E5%BF%97/dp/4798178004)でAWSのインフラ構築の学習をしました。

第10章「独自ドメイン名とDNSを用意しよう」でドメイン名を取得する箇所がありますが、ドメイン名は一度取得すると1年単位での更新で金がかかりそうなので取得しませんでした。

その場合、書籍ではドメイン名がある前提で進む箇所が複数あるので、その場合にどう対応したのかをメモします。

# 第1~9章
ここでは特にドメインの話が無いので、書籍の通り進められます。

以降も、特に言及が無い場合は書籍の通り進められると認識してください。注意ポイントのみ言及します。

# 第10章「独自ドメイン名とDNSを用意しよう」
### 10.4「ドメイン名を取得する」
ここでドメイン名取得のリクエストは送りません。

### 10.5「パブリックDNSにリソース情報を追加する」
ドメイン名が無く、パブリックDNSを作る意味が無いのでスキップします。

### 10.6「プライベートDNSを用意する」
プライベートDNSはドメイン名関係無いので、書籍通り進めて問題ありません

### 10.7「SSLサーバー証明書を発行する」
ドメイン名取得していないので、証明書発行もスキップします。

HTTP接続のまま進めます。

# 第11章「メールサーバーを用意しよう」
### 11.3「メール送受信機能を作成する」
ドメイン名取得していないので、ドメイン名の設定をスキップして、検証済みメールアドレスの追加から行います。

設定＞IDから、自分のメールアドレスを追加しましょう。

![スクリーンショット 2025-05-01 13.48.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/728813/52b58335-d06c-4922-8598-059949498eee.png)

`11.3.6「メール受信」`と`11.3.7「サンドボックス外に移動する」`はドメイン名が無いと出来ないのでスキップします。

# 第13章「サンプルアプリを動かしてみよう」
ここが一番の詰まりポイントです。

### 13.3.2「Ruby on Rails環境の構築」
書籍の内容通りに進めると、RubyとRailsのバージョンが古いために起こる問題や、S3にアクセス出来ない問題が発生します。これはドメイン名とは関係ないです。

先人の記事の内容で解消できたので参考にしてください

https://qiita.com/sylphy/items/0c0176cbd2ce104e7e9c

### 13.3.3「サンプルアプリの導入」13.3.4「動作確認」
ドメイン名を取得した前提のコードになっているので、修正する必要があります。

`vim /var/www/aws-intro-sample/config/environments/production.rb`などを実行して修正してください。

①`config/environments/production.rb`を修正

使わないdomainをコメントアウトします。
```config/environments/production.rb
  ActionMailer::Base.smtp_settings = {
    # :domain         => ENV['AWS_INTRO_SAMPLE_SMTP_DOMAIN'], # コメントアウト
    :address        => ENV['AWS_INTRO_SAMPLE_SMTP_ADDRESS'],
    :port           => '465',
    :authentication => :plain,
    :ssl            => true,
    :user_name      => ENV['AWS_INTRO_SAMPLE_SMTP_USERNAME'],
    :password       => ENV['AWS_INTRO_SAMPLE_SMTP_PASSWORD'],
  }
```
②`app/mailers/application_mailer.rb `の修正

送信元のメールを11章で追加した、自分の認証済みメールアドレスにします。

```app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
  # default from: "noreply@example.com"     # コメントアウト
  default from: "your_own_mail@example.com" # 追加
  layout 'mailer'
end

```

③`app/mailers/user_mailer.rb `の修正

②と同じく、送信元のメールを11章で追加した、自分の認証済みメールアドレスにします。

```app/mailers/user_mailer.rb 
class UserMailer < ApplicationMailer
  # default from: "no-reply@#{ENV['AWS_INTRO_SAMPLE_SMTP_DOMAIN']}" # コメントアウト
  default from: "your_own_mail@example.com"                         # 追加

  def account_activation(user)
    @user = user
    mail to: user.email, subject: "Account activation"
  end

  def password_reset(user)
    @user = user
    mail to: user.email, subject: "Password reset"
  end
end
```

これで正常にメールが送信できるh

#### 「Email has already been taken」と出て登録出来なくなってしまった場合
ガチャガチャ操作していると、アカウントを作っていないつもりなのに、メールが重複していると言われてアカウント登録出来なくなることがありました。

![スクリーンショット 2025-05-01 13.55.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/728813/99c9c59e-5cd1-4ed1-bef4-db2c9ddf2272.png)

この場合は、「メール送信が失敗してアカウント認証できないが、DBにレコード自体は追加されている」という事象が起こっていると思われます。

そのため、以下のようなコマンドで存在するアカウントのデータを消してあげると再度登録出来ます。

```
$ mysql -u sample_app -p -h db.home 

--- MySQLに接続

MySQL [(none)]> show databases;
MySQL [(none)]> use sample_app;
MySQL [(none)]> select * from users;
MySQL [(none)]> delete from users where id in (XXX, YYY);
MySQL [(none)]> commit;
```

# 参考
先人のQiita記事

https://qiita.com/sylphy/items/0c0176cbd2ce104e7e9c

著者サポートページ

https://sites.google.com/view/aws-intro-2nd/