fluid_27’s blog

勉強した内容をアウトプットするためのブログ

AWS勉強していてAD Connectorってなに?ってなったので調べてみた

AWSのSAAに向けて勉強している初学者です。

AD Connectorってなに?ってなったので、あくまでザックリまとめてみたいと思います。

 

 

そもそも、ADとは

Active Directory (アクティブディレクトリ) とはマイクロソフトによって開発されたオンプレミスにおけるディレクトリ・サービス・システムであり、Windows 2000 Serverから導入された、ユーザとコンピュータリソースを管理するコンポーネント群の総称である。なお、クラウドコンピューティングにおけるディレクトリ・サービス・システムであるAzure Active Directoryと区別する場合、オンプレミス Active Directoryと表記することもある。

https://ja.wikipedia.org/wiki/Active_Directory

 

要は、「Windowsにおける、ネットワーク上にあるパソコンとかを統括的に管理するための仕組みの総称」ということみたいです。

 

AD Connectorとは

AD Connector は、クラウドの情報をキャッシュせずにディレクトリリクエストをオンプレミスの Microsoft Active Directory へリダイレクトするのに使用するディレクトゲートウェイです。

https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/directory_ad_connector.html

 

と、まぁ読んでもいまいちピンときません。

他サイトの記事によると、特徴として以下があるようです。

  • AWS環境からオンプレ環境にあるドメインコントローラーに対する通信を中継するためのプロキシサービスである
  • 汎用プロキシではなく例えばWorkSpaces、WorkDocs、WorkMailといったAWSのサービス向けの専用プロキシである

https://dev.classmethod.jp/articles/try-active-directory-connector/

 

なので、AD Connectorを使えばIAMとオンプレミス環境のADとを連携することもできるそうです。

 

また、上記の説明で出てき言葉の意味を整理しておくと

 

ドメインコントローラとは

ドメインコントローラとは、Windowsネットワークにおいて、あるネットワーク上の範囲(ドメイン)における利用者アカウントやコンピュータなどへのアクセス権限などを一元的に管理し、利用者の認証を行うサーバコンピュータのこと。

https://e-words.jp/w/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9.html

 

プロキシとは

プロキシ(Proxy)は英語で「代理」の意味。 インターネットに直接接続できないコンピューターに代わり、インターネットに接続し、Webサイトへのアクセスなどを行うサーバーのことを指す。

https://www.otsuka-shokai.co.jp/words/proxy-server.html

 

ザックリまとめ

まとめると、AD ConnectorとはAWS環境とオンプレミス環境のADとの関係を築くためのプロキシサービス。ということみたいです。

 

ものすごいザックリまとめているので、また色々分かったら更新していこうと思います。

間違い等ありましたらご指摘ください。

 

参考にしたサイト

https://wa3.i-3-i.info/word12420.html

https://blog.serverworks.co.jp/tech/2019/02/27/authentication-relation-around-workspaces/

AWS勉強中に出てきたROAとかBGPって?

SAAに向けてAWSを勉強していて、ROAとかBGPとか聞き覚えのない単語が出てきて、気になったので、ザックリ調べてみました。

 

 

ROA (Route Origin Authorization)

BGPで使われるAS番号と、 IPアドレスの組み合わせに対して、 それが正しい組み合わせであることを示す電子署名が施されたデータですROAは、数多くのBGPルータ同士でインターネットの経路情報を交換する際に、 経路情報の正当性を確認できるようにすることを目的としています。

とあります。

要は、AS番号とIPアドレスの組み合わせが正しいことを示すデータということ。

 

また、「ROAはRIRを介して作成され、アドレス範囲、そのアドレス範囲を公開することを許可されたASN、及び有効期限なども含まれる」とのこと。

 

この時点で初学者の私には聞き覚えのない言葉がいくつかあるので、それに関しても整理しておきます。

 

RIRとは(Regional Internet Registry)

地域インターネットレジストリ 地域インターネットレジストリは管轄地域において、インターネットリソースの配分と登録を管理する組織。 現在5つのRIRが組織されている: American Registry for Internet Numbers は北アメリカを担当。

  

ASとは

「Autonomous System」の略で、「自律システム」とも呼ばれる。 AS、 統一された運用ポリシーによって管理されたネットワークの集まりを意味し、 BGPというプロトコルにより接続される単位。 AS間で経路情報の交換を行うことにより、 インターネット上での効率的な経路制御を実現する。

つまり、ネットワークの集まり。

 

ちなみに、ASNとは

ASNとは、ASに一意に振られる番号。 

 

BGP とは

「Border Gateway Protocol」の略。現在のインターネットにおいて、ISPなどの相互接続時にお互いの経路情報をやり取りするために使われる経路制御プロトコル。EGPの一種。

 

EGPの一種。と聞いてもピンとこないので、引き続き調べてみると、 

そもそも「ルーティングプロトコルとして大きく、IGPEGPの2種に分類できる」みたいです。

 

 IGPとEGP

・IGP(Interior Gateway Protocol)・・・IPネットワークにおいて AS内部での経路情報の交換に利用されるルーティングプロトコル総称。

・EGP(Exterior Gateway Protocol)・・・EGPとは、複数の独立したネットワークを接続したTCP/IPネットワークにおいて、ネットワーク間の経路情報を通信機器間で交換する手順を定めたプロトコル(通信規約)

 

で、話を戻して、BGPとは「独立したネットワーク間で情報交換する手順を定めたEGPの一種」ということみたいです。

 

 

参考サイト

https://wa3.i-3-i.info/word12234.html

https://www.nic.ad.jp/ja/basics/terms/bgp.html

https://ja.wikipedia.org/wiki/Interior_Gateway_Protocol

 

あまり深追いせず、あくまでザックリ整理してみました。

間違え等ありましたら、ご指摘頂けると幸いです。

ELBを使ってアプリにhttpsで接続できるようになりました

AWSでデプロイしたアプリにhttpsで接続できるようにする為、ELBを使いSSL認証しました。

今回は設定の際の大まか流れと、細かい用語などを整理してみます。

実際の手順などは参考サイトに詳しく載っているので、ここでは割愛します。

 

 

目的

アプリのhttps接続を可能にしたい。

構成はELB + ACM + Route53 でhttps化

 

 

まず、SSL通信が成立するまでの流れを整理

  1. ブラウザ:SSL通信をリクエストする
  2. サーバー:SSL証明書を送付する
  3. ブラウザ:電子署名の検証により「SSL証明書に記載されたドメイン」と「通信先のドメイン」が同じであることを確認する
  4. ブラウザ/サーバー:SSL通信を行うために共通鍵を交換する
  1. ブラウザ/サーバー:共通鍵を使って送受信するデータを暗号化・復号してSSL通信を成立させる

 

 

用語の整理

 

共通鍵

個々の公開鍵や秘密鍵は必要なく、サーバーとブラウザで同じ鍵(共通鍵)を使ってデータを暗号化、復号してやり取りを行います。SSLでは、この共通鍵で安全にやり取りするために、電子署名の検証によるドメイン認証と鍵交換が行われます。

 

httpsとは
「HyperText Transfer Protocol Secure」の略称で、インターネット上のHTTP (HyperText Transfer Protocol)通信が、SSLによって暗号化されたプロトコルのことです。SSLによって通信データは保護され、第三者が盗み見しようとしてもデータの内容を解読することができません。

 

SSLとは
SSL(Secure Sockets Layer)とは、インターネット上におけるウェブブラウザとウェブサーバ間でのデータの通信を暗号化し、送受信させる仕組みのことです。SSLは悪意ある第三者による盗聴を防いだり、送信される重要な情報の改ざんを防ぐ役割を持っています。https://jp.globalsign.com/ssl-pki-info/ssl_beginner/aboutssl.html

 

 

SSL(https)を導入するには

ウェブサイトでSSL(https)を利用する場合、通信の暗号化に必要な鍵とウェブサイトの運営者の情報が含まれた「SSLサーバ証明書」を、サーバにインストールする必要があります。SSLサーバ証明書は、信頼のおける第三者機関(GMOグローバルサインのような認証局)にて、ウェブサイトの運営者が正しい運営者であるかどうかの審査を行い発行されます。SSLサーバ証明書を導入することにより、ユーザは証明書を通じてウェブサイトの運営者情報や通信の暗号化によって保護されていることを確認することが可能です。

 

 

SSLサーバー証明書(以下、SSL証明書)を利用するには

  1. 秘密鍵を生成する
  2. 秘密鍵を用いてCSRを生成する
  3. CSRを用いて証明書を生成する
  4. 秘密鍵と証明書をセットにしてWebサイトの通信を暗号化する

 

参考サイト 

https://ssl.sakura.ad.jp/column/ssl/

 

なんかいっぺんに理解しようと思うと、こんがらがりそうですが、、、

 

 

実際の大まかな流れ 

  1. ドメインの取得
  2. ACMで証明書取得
  3. ロードバランサの作成
  4. ロードバランサのDNS名をDNSに追加
  5. httpをhttpsにリダイレクトさせる設定

 

1のドメインの取得に関しては「お名前.com」を使いました。(1年間で1円のドメインを取得)

お名前.comでのドメイン取得後のNSの変更に関しては下記のqiita記事を参考にするといいと思います。

https://qiita.com/ysKey2/items/0545e13ec05def42ad55

 

2~4の流れに関しては下記サイトを参考にしました。

https://dev.classmethod.jp/articles/aws-web-server-https-for-beginner/#toc-6

https://recipe.kc-cloud.jp/archives/11084

 

5. ロードバランサーのリスナーに80ポートを追加し、httpsにリダイレクトさせるよう設定。

AWSの公式ドキュメントだと説明文が途中、理解できず(泣)、結局個人のブログを拝見して、設定しました。

にしてもAWSの公式ドキュメントの日本語難しくありません、、?

https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/configuring-https-httpredirect.html

https://zenn.dev/shota_imazeki/books/7a0f8e2f4cccd846fb16/viewer/4797fc

 

以上。

 

感想

実際、やってみて一番詰まったのはドメインのNSサーバの変更の部分でした。大体ドメイン取得サイトとして「freenom」を紹介している記事が多かったのですが、自分はfreenomでのログインが何故かうまくいかず(泣)、「お名前.com」に切り替え、ドメイン取得からNSサーバを変更するまでの流れが一番時間がかかりました。。

その後は特に詰まる部分はなかったので、AWSのそれぞれの機能が理解できていれば、そこまで難しい作業ではないと思います。

httpのリダイレクト設定は、当初予定してなかったものの、設定ができているか確認しようとした際、「ページが表示されない」という事態になり、nslookupなど使って疎通できているか調べたりしていたのですが、結論httpでアクセスしてしまっていた事が原因でした。

ので、httpをリダレクトさせる設定を行うことにしました。

MySQLが落ちるの時の対処

AWSでデプロイしたアプリがMySQLが落ちた事が原因でエラーになっていた。

 

 

エラーログ

MySQLのログを見てみると

2021-06-27T22:58:07.430585Z 0 [ERROR] [MY-012681] [InnoDB] mmap(137035776 bytes) failed; errno 12

2021-06-27T22:58:07.430701Z 1 [ERROR] [MY-012956] [InnoDB] Cannot allocate memory for the buffer pool

2021-06-27T22:58:07.430767Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.

2021-06-27T22:58:07.430856Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine

2021-06-27T22:58:07.431029Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.

2021-06-27T22:58:07.431169Z 0 [ERROR] [MY-010119] [Server] Aborting

2021-06-27T22:58:07.436718Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.25)  MySQL Community Server - GPL.

 というログが。

 2段目に Cannot allocate memory for the buffer poolとある。

 バッファプールへの割り当てが足りない。という事。

という事でググってみると、主に2つの解決策があるみたい。

 

 

対処法

  1. swap領域を作成する
  2. innodb_buffer_pool_sizeの割り当てを増やす

というのが、主な解決策らしい。

参考サイト: https://kenzo0107.hatenablog.com/entry/2016/05/20/105756

 

 

基本的な用語の理解

初学者なので、ここでいったん整理しておく。

「そんなん知ってるわ」っていう方は見なくていいと思います。

 

まず、対処法1の「swap領域を作成する」ということについて。 

そもそも、

 

swapとは

使ってないメモリの内容を一時的にしまっておくための場所。

 

swap領域とは

メモリの内容を一時的にしまっておく場所のこと。

 

ちなみに、

メモリの内容を一時的にしまっておくファイルを「スワップファイル」。

メモリの内容を一時的にしまっておくパーテーションを「スワップパーテーション」。

というらしいです。

swapに関しては下記サイトが図も交えつつ、ある程度ザックリまとまっていて分かりやすかったです。

https://wa3.i-3-i.info/word1721.html

 

 

 で、対処法2のinnodb_buffer_pool_sizeの割り当てを増やすということについて。

 

innodb_buffer_pool_sizeとは

MySQLinnodb_buffer_pool_sizeは、ディスクイメージをメモリ上にバッファさせる値をきめる設定値で、この設定が、いかにディスクIOを押さえるかに繋がったりするので、コストパフォーマンス向上を考えるうえで重要な設定のひとつだったりします。

https://corporate.inter-edu.com

 

innodbとは

MySQLmariaDBにおけるデータベースエンジン。とのこと。

 

バッファとは

バッファ(Buffer)とは、一時的にデータを蓄えておく記憶装置や記憶領域のことです。 バッファは、緩衝物や緩衝装置と訳されますが、コンピュータの業界では、主にデータを一時的に蓄えておく記憶装置や記憶領域のことを指します。

https://www.secomtrust.net/secword/buffer.html

 

 

原因と対処法の整理

つまり、先ほどのエラーログで出ていた「 バッファープールへの割り当てが足りない」とログに出ていたということは、エラーは

原因: 「割り当てられているメモリの量がたりない」

対処法:  使わないメモリを一時的に退避させる場所を作るか(swap領域の作成)、メモリの割り当てを増やす(innodb_buffer_pool_sizeの割り当てを増やす)

ということになる。

 

 

対処法の具体的な手順

これはググると、たくさん出てくると思うが、一応自分が実際行った手順を備忘録がてら残しておく。

 

swap領域を作成する 

まず、ディスクの利用状況を確認

[ec2-user@ip-10-0-0-191 ~]$ df -h

ファイルシス   サイズ  使用  残り 使用% マウント位置

devtmpfs         482M     0  482M    0% /dev

tmpfs            492M     0  492M    0% /dev/shm

tmpfs            492M  512K  492M    1% /run

tmpfs            492M     0  492M    0% /sys/fs/cgroup

/dev/xvda1       8.0G  6.1G  2.0G   76% /

tmpfs             99M  4.0K   99M    1% /run/user/1000

 

空ファイル作成

[ec2-user@ip-10-0-0-191 ~]$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024

1024+0 レコード出力

1073741824 バイト (1.1 GB) コピーされました、 15.7396 秒、 68.2 MB/

 

作成したファイルをswap領域に設定

[ec2-user@ip-10-0-0-191 ~]$ sudo mkswap /swapfile

mkswap: /swapfile: パーミッション 0644 は安全な値ではありません。 0600 をお勧めします。

スワップ空間バージョン 1 を設定します。サイズ = 1024 MiB (1073737728 バイト)

ラベルはありません, UUID=9940e6a8-3ed3-4175-8f33-8efe191aa13d

 

パーミションを変更

[ec2-user@ip-10-0-0-191 ~]$ sudo chmod 600 /swapfile

 

swap領域を有効にする

[ec2-user@ip-10-0-0-191 ~]$ sudo swapon /swapfile

 

メモリの利用状況を確認

[ec2-user@ip-10-0-0-191 ~]$ free

total        used        free      shared  buff/cache   available

Mem:        1006896      725588       62752         524      218556      141904

Swap:       1048572           0     1048572

 

MySQLを再起動

 

[ec2-user@ip-10-0-0-191 ~]$ sudo service mysqld restart

Redirecting to /bin/systemctl restart mysqld.service

 

 

上記コマンドだけだと、再起動した際にマウントされないらしいので、 /etc/fstab に

/swapfile swap swap defaults 0 0

を追加。

 

 

innodb_buffer_pool_sizeの割り当てを増やす 

MySQLに入る

[ec2-user@ip-10-0-0-191 etc]$ mysql -u root -p

(パスワードの入力)

 

innodb_buffer_pool_sizeを調べる

mysql> SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

+-------------------------+-----------+

| Variable_name           | Value     |

+-------------------------+-----------+

| innodb_buffer_pool_size | 134217728 |

+-------------------------+-----------+

1 row in set (0.00 sec)

 

my.cnfの場所を探す

[ec2-user@ip-10-0-0-191 etc]$ mysql --help | grep my.cnf

                      order of preference, my.cnf, $MYSQL_TCP_PORT,

/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 

 

左から順に探していき、該当するファイルがあればそれに設定を書き込む

[ec2-user@ip-10-0-0-191 etc]$ sudo vi my.cnf

 

以下を追記

innodb_buffer_pool_size = 256M

 

MySQLを再起動

[ec2-user@ip-10-0-0-191 ~]$ sudo service mysqld restart

Redirecting to /bin/systemctl restart mysqld.service 

 

innodb_buffer_pool_sizeを調べる

mysql> SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

+-------------------------+-----------+

| Variable_name           | Value     |

+-------------------------+-----------+

| innodb_buffer_pool_size | 268435456 |

+-------------------------+-----------+

1 row in set (0.00 sec)

 

以上。

 

余談ですが、過去の自分のような初学者の方は

手順が書いてある個人のブログを鵜呑みにして、それ通り行いがちですが、ブログの記事を鵜呑みにせず(この記事含め)構造的に原因と対処を捉えた方が結果的に解決が早いと思うので、

・なるべく公式サイトなどで解決できそうな文献が見つけらたら、それを参考にする。

・文献が見つけられず、個人のブログなどを参考にする場合は構造的に理解できる記事を集めて、原因を自分で理解した上で対処する

というのを意識するといいと思います。余談でした。

 

その他参考にしたサイト

https://yusuke.blog/2017/12/17/2029

https://qiita.com/madaran0805/items/ae0532a7436e1c684e72

https://dacelo.space/mysql/entry-1116.html

https://soudan.hatenablog.jp/entry/mysql-bufferpoolsize

 

 

bundle execって、結局なに?

よく、ブログやqiitaなど参考サイトを見ていて、出てくる「bundle exec」

あんまり、意味も正確に把握せずに使ってたけど、結局なに?

 

rails db:migrate と bundle exec rails db:migrate などのbundle execアリナシの違いをザックリ整理します。

 

 

bundle execをつけると

今いるプロジェクト内で、Gemfile.lockに書かれているバージョンのgemが動き、コマンドを実行される。

 

bundle execをつけないと

Gemfile.lockに基づかずに、システム側のgemを指定し、コマンドが実行される。

なのでgemのバージョンはシステム中のバージョンで実行される。

 

 

bundlerとは

  • プロジェクト内で使うGemのパッケージ管理ツール。Gemをプロジェクト単位で管理することができるもの (rbenvのGem版のようなもの)

以上、ザックリ。

 

参考サイト

https://www.eiji56.com/2018/08/bundle-exec/

https://qiita.com/dawn_628/items/1821d4eef22b9f45eea8

 

AWS EC2でmariaDBを削除してMySQLをインストールする。

https://hackmd.io/4_1NYUTBSaSsOC8cur7WhA?view

を参考に今回はNginx + unicorn + MySQLの構成でデプロイしようとした際にハマったmariaDBを削除してMySQLをインストールする。という流れを備忘録として残す。

 

 

参考サイトの手順を見ながら、EC2上で一括でインストールする。

$ sudo yum -y install git make gcc-c++ patch openssl-devel libyaml-devel libffi-devel libicu-devel libxml2 libxslt libxml2-devel libxslt-devel zlib-devel readline-devel mysql mysql-server mysql-devel ImageMagick ImageMagick-devel epel-release sqlite sqlite-devel

 

mysqlをスタート

$ sudo service mysqld start

Redirecting to /bin/systemctl start mysqld.service

Failed to start mysqld.service: Unit not found.

 

ん?

mysqldが入ってない?

ググると、どうやら AWSLinuxだと mariaDBが代わりに入っているから、というのが原因みたい。

 

mariaDBを削除

下記サイトを参考にmariaDBを削除し、mysqlをインストールしました。

https://qiita.com/miriwo/items/e7afd5e1ae0de94f27c2

https://qiita.com/shun0211/items/21871c82d385648b4bae

https://qiita.com/miriwo/items/eb09c065ee9bb7e8fe06

 

まず、mariaDBが入ってることを確認。

$ yum list installed | grep mariadb

mariadb.x86_64                      1:5.5.68-1.amzn2                 @amzn2-core

mariadb-devel.x86_64                1:5.5.68-1.amzn2                 @amzn2-core

mariadb-libs.x86_64                 1:5.5.68-1.amzn2                 installed 

確かに入ってる。

 

削除する。

$ sudo yum remove mariadb-libs

読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd

依存性の解決をしています

--> トランザクションの確認を実行しています。

・・・(略)

削除しました:

  mariadb-libs.x86_64 1:5.5.68-1.amzn2                                           

 

依存性の削除をしました:

  mariadb.x86_64 1:5.5.68-1.amzn2        mariadb-devel.x86_64 1:5.5.68-1.amzn2   

  postfix.x86_64 2:2.10.1-6.amzn2.0.3   

 

完了しました!

 

削除完了。

一応確認する。

$ yum list installed | grep mariadb

何も出てこない。ということは削除できてる。

 

MySQLをインストール

改めてインストールする

$ sudo yum localinstall

$ sudo yum install --enablerepo=mysql80-community mysql-community-server

$ sudo yum install --enablerepo=mysql80-community mysql-community-devel 

の3つのコマンドでインストール。

 

確認する。

$ yum list installed | grep mysql

mysql-community-client.x86_64         8.0.25-1.el7                   @mysql80-community

mysql-community-client-plugins.x86_64 8.0.25-1.el7                   @mysql80-community

mysql-community-common.x86_64         8.0.25-1.el7                   @mysql80-community

mysql-community-devel.x86_64          8.0.25-1.el7                   @mysql80-community

mysql-community-libs.x86_64           8.0.25-1.el7                   @mysql80-community

mysql-community-server.x86_64         8.0.25-1.el7                   @mysql80-community

mysql80-community-release.noarch      el7-3                          installed 

できてる。

 

ログファイルを作成

$ sudo touch /var/log/mysqld.log

 

パスワードを設定

mysqlを起動

$ sudo service mysqld start

Redirecting to /bin/systemctl start mysqld.service

 

下記のコマンドは初めて見たのだが、参考サイトでそのように書いてあったので、とりあえずそのまま打ってみる。

$ sudo /usr/libexec/mysql55/mysqladmin -u root password 'xxxxxxxx'

sudo: /usr/libexec/mysql55/mysqladmin: コマンドが見つかりません 

できない。

ので、違う方法でパスワードを設定する。

 

mysqlのパスワード設定でググってみると、様々なコマンドが紹介されているが、自分の場合は結局下記サイトのでうまくいった。

https://rougeref.hatenablog.com/entry/2019/03/26/100754

 

1. 権限スキップを設定。

$ sudo vi etc/my.cnf

して、中に

skip-grant-tables 

を追記する。

 

2. mysqlを再起動

$ sudo service mysqld restart

 

3. mysqlにrootで入って、rootのパスワードをnullに設定する。
$ mysql -u root
mysql > update mysql.user set authentication_string=null where user='root';

 

4. 権限スキップ設定を削除する

$ sudo vi etc/my.cnf 

skip-grant-tables 

を削除。

 

5. mysqlを再起動

$ sudo service mysqld restart

 

6. alterでパスワードの再設定
mysql -u root

で、mysqlに入る。

 

ここで、参考にしていた上記サイトのコマンド

mysql> alter mysql.user 'root'@'localhost' identified by 'xxxxxxx' ;

だと、syntax errorで入らなかったので、再びググってみる。

結果、下記コマンドで設定できた。

mysql> ALTER USER 'root'@'localhost' identified BY 'xxxxxxxxx';

 

Query OK, 0 rows affected (0.00 sec)

mysql> exit

 

試しに入ってみる。

$ mysql -u root -p

Enter password:

$ 設定したパスーワードの入力

Welcome to the MySQL monitor.  Commands end with ; or \g. 

無事入れる。

 

$ bundle exec rails db:migrate RAILS_ENV=production

bundler: failed to load command: rails (/home/ec2-user/.rbenv/versions/2.6.2/bin/rails)

・・・(略)

/home/ec2-user/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bundler-2.2.16/lib/bundler/rubygems_integration.rb:362:in `block in replace_bin_path': can't find executable rails for gem railties. railties is not currently included in the bundle, perhaps you meant to add it to your Gemfile? (Gem::Exception) 

 

というエラーが。。

 

ググってみると、どうやら手動でインストールしたmysqlRubyのgemとして入れているmysql2の依存関係?が合わないことがエラーの原因みたい。

対処方法としては、いったんmysql2をgemfileから削除して、再び入れ直せば自動でバージョンの合うものを入れてくれるみたい。

$ gem uninstall mysql2

Successfully uninstalled mysql2-0.5.3

$ gem install mysql2

Fetching mysql2-0.5.3.gem

・・・(略)

1 gem installed 

で無事に解決しました。

 

その他参考サイト

https://tackeyy.com/blog/posts/fix-libmysqlclient-r-so-16-cannot-open

AWS EC2 でNginxが入らなかったので、nginx1を入れた

AWSにデプロイする過程でNginxが入らない?

と思ったら、どうやらAWS Linux(AL2) だと nginx1というのを代わりに入れるらしい。

 

似たような記事はすぐに出てくると思うので、あくまで今後の自分の為の備忘録として残します。

 

まず、EC2上で最初にNginxを入れようとしたら、

$ sudo yum -y install nginx

読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd

amzn2-core                                                                            | 3.7 kB  00:00:00     

mysql-connectors-community                                                            | 2.6 kB  00:00:00     

mysql-tools-community                                                                 | 2.6 kB  00:00:00     

mysql80-community                                                                    | 2.6 kB  00:00:00     

43 packages excluded due to repository priority protections

パッケージ nginx は利用できません。

エラー: 何もしません

 

nginx is available in Amazon Linux Extra topic "nginx1"

 

To use, run

# sudo amazon-linux-extras install nginx1

 

Learn more at

https://aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras

 

と、出る。

ググってみると、ログでも言われている通りに

sudo amazon-linux-extras install nginx1

を実行すればいいとのこと。

 

$ sudo amazon-linux-extras install nginx1

Installing nginx

読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd

・・・(略)

 

これで、うまくいきました。

簡単でよかった。

 

参考サイト

https://qiita.com/kazehiki03/items/7712660dd0401186ac4d