Amazon Linux2でLet's Encrypt(SSLのサーバー証明書)を取得する方法

# 環境
OS Amazon Linux2 
Webサーバー　Nginx

上記の環境でLet's EncryptにてSSLサーバー証明書を作成できたのでその手順を備忘録として記載します。

下記サイトを参照して導入しました。
https://certbot.eff.org/lets-encrypt/othersnap-nginx
https://donbulinux.hatenablog.jp/entry/2021/02/25/005721

# SSLとは。
SSLとはSecure Sockets Layerの略でインターネット上でデータを暗号化して送る仕組みのことです。
SSLを使用することによってデータの改ざん、盗聴等を防ぐことができます。
SSL通信を使用することによって通信プロトコルが[https]に変更されます。

# snapをインストール。
snapとはUbuntu Linuxを開発したCanonicalが開発したパッケージ管理ツールです。
snapをインストールするためにリポジトリを用意します。

```
$cd /etc/yum.repos.d/
$sudo wget https://people.canonical.com/~mvo/snapd/amazon-linux2/snapd-amzn2.repo
```
その後yumを使用してsnapをインストールします。

```
$ sudo yum install snapd
```
snapが自動起動する設定を行います。

```
$ sudo systemctl enable --now snapd.socket
```
systemctl enableはシステムを自動起動することを有効化するコマンドです。
enableとは有効化するという意味です。

次にsnapのシンボルリンクを作成します。
シンボルリンクとはWindowsではショートカットと呼ばれファイルの代理人という役割を持ちます。

```
$ sudo ln -s /var/lib/snapd/snap /snap
```

次にsnapのcoreというパッケージをインストールします。

```
$ sudo snap install core
```

その後、coreをアップデートします。

```
$ sudo snap refresh core
```

# Certbotのインストール。
Certbotとは今回発行するLet's Encryptを利用するためのオープンソフトウェアです。

```
$ sudo snap install --classic certbot
```
snapのインストール先にパスを通すため、/usr/bin/へシンボリックリンクを作成します。

```
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
```

証明書を発行していない状態でCertbotの動作確認を行います。

```
$ sudo certbot renew --dry-run
```
下記コードをたたいて証明書を発行します。

```
$ sudo certbot --nginx
```

# Nginxのサーバー名を間違ってエラーが起きた。

```
[root@xxxxxxx nginx]# sudo certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)  (Enter 'c' to cancel): 登録したいドメイン a certificate for 登録したいドメイン
Could not automatically find a matching server block for 登録したいドメイン Set the `server_name` directive to use the Nginx installer.

IMPORTANT NOTES:
 - Unable to install the certificate
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/登録したいドメイン/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/登録したいドメイン/privkey.pem
   Your certificate will expire on 2021-06-22. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again with the "certonly" option. To non-interactively
   renew *all* of your certificates, run "certbot renew"
```

証明書を発行しようとしたら「構成ファイルに名前が見つかりませんでした。ドメインに入力してください」というエラーが起きてしまいました。
これは、Nginxのポート番号80のサーバー名が登録したいドメインと異なるためです。

###befere

``` ruby:/etc/nginx/nginx.conf

 server {
        server_name  登録したいドメイン名と異なる記述;
        root         /usr/share/nginx/html;
```

###after
``` ruby:/etc/nginx/nginx.conf

 server {
        server_name  登録したいドメイン;
        root         /usr/share/nginx/html;
```

上記の修正を行い、メールアドレスを登録すると完了します。
完了した場合は、Nginxのサーバー名を記述したファイルに以下のコードが記載されます。


``` ruby:/etc/nginx/nginx.conf
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/登録したドメイン/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/登録したドメイン/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    server {
    if ($host = 登録したドメイン) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        server_name  登録したドメイン;
    listen 80;
    return 404; # managed by Certbot

```

以上になります。
間違えている箇所がありましたコメントいただけますと幸いです。