- 投稿日:2020-08-08T17:06:36+09:00
【HOMEBREW】 Mac OSのパッケージマネージャーについて node.jsやってたら学んだ事
【この記事で身に付くこと】
■HOMEBREWとは基礎
■mysqlを自身のMacへ【背景】
■node.jsでの開発途中で、mysqlが無く、先に進めなかった為
【開発環境】
■ Mac OS catalina
■ Homebrew 2.4.9
■ mysql Ver 8.0.21【実装】
HOMEBREW入れます。
*Xcodeも自動的にインストールされます。便利
mac.terminal$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" . . . // 5分くらい待ちます。下記の文は自動で出てきます。 $ Downloaded Command Line Tools for Xcodemysql入れます。
mac.terminal$ brew install mysql確認
mac.ternminal$ brew -v Homebrew 2.4.9 Homebrew/homebrew-core (git revision b32b4; last commit 2020-08-08) $ mysql --version mysql Ver 8.0.21 for osx10.15 on x86_64 (Homebrew)以上。
【まとめ】
■HOMEBREWとはMACのOSを動かす、パッケージマネージャー
■mysqlはDBの種類
例
パッケージマネージャー = app store
パッケージ = app
みたいな感じでしょうか。。
appstoreがあるからappがダウンロードできる。【合わせて読みたい】
■ 【node.js】 node.jsインストール 芋っていたけど、簡単だった件...
https://qiita.com/tanaka-yu3/items/739db5ffed24a8d9ae4b■ 【comandLine】 一言で コマンドライン 各種コマンド ターミナル
https://qiita.com/tanaka-yu3/items/b32e353bd6d7c9ebd4fb■作業環境を整えるMacOSXのパッケージマネージャ「Homebrew」のインストール方法と使い方
https://liginc.co.jp/web/tool/mac-iphone/151069
- 投稿日:2020-08-08T01:53:50+09:00
Cloud SQLへのprivate ip 接続でハマった話
概要
Cloud SQL(MySQL)に対してprivate ipを使ってアクセスしたときに、何をチェックしたかをメモする
ハマったからにはきちんとログを残す現象
GCE から Cloud SQLに対してprivate ipでアクセスができない
$ mysql -u root -p --host [private ip] ERROR 1045 (28000): Access denied for user 'root'@'[GCEのprivate ip]' (using password: YES)(Access deniedと言われている時点でVPCの構成は問題ないのだが、本稿は調べたこと自体を書くので一旦無視する)
観点
- VPCの接続構成が正しいか
- アクセスログがあるかどうか
- Cloud Proxyで接続できるのか(MySQLのusername/passwordが合っているか、private ipでいけるのかなど
- MySQLのUserテーブルのHostで許可設定がされているか
- SSL/TSLの設定が間違っていないのか
1. VPCの接続構成が正しいか
GCPのdefaultのvpcネットワークに接続しているものとして仮定する。
対象のインスタンスの設定画面からネットワークインタフェースを参照し、「ネットワーク インターフェースの詳細」に移動する
赤丸のボタンを押しネットワークの接続テストを作成する(最初はAPIを許可するというボタンになっているのでonにしてテストを実施できるようにする)接続テストにて、今回のアクセスについて記載する。
到達可能になっている場合は、「理論的」に接続が可能である(パケットは転送されている可能性がありますってのは、理論的には送ってないけど、構成としては届きますっていうこと)
もしここで到達可能にならない場合は、VPCネットワークピアリングのlist( https://console.cloud.google.com/networking/peering/list
)から対象を参照し、
対象のピアリングが、GCEの使っているネットワークインタフェースのVPCネットワークと同じであることを確認する。(今回defaultを想定するので対象のピアリングがdefaultのVPCネットワークに所属していることを確認する)同じVPCネットワークではあるが、到達可能にならない場合、サブネット ピアリング ルートにCloud SQLのprivate ipが所属していない可能性がある(Cloud SQLでprivate ip作成をした場合はここは問題ないはずだが。。。 こちらの方の現象と同じになっている可能性もあるので注意する)
全部チェックできたら2に進む
1.の補足
ネットワーク詳しくない場合、この接続テスト機能で確認していくのが良いと思われる。
https://cloud.google.com/network-intelligence-center/docs/connectivity-tests/how-to/running-connectivity-tests?hl=ja2. アクセスログがあるかどうか
構成が正しいことが確認できたら、対象のCloud SQLインスタンスに対してそもそもアクセスが本当に届いているのかをログで見てみる
対象の時間辺りに以下のクエリで検索してログが出ていることを出ていることを確認するresource.type="cloudsql_database" severity=INFO textPayload:"Access denied for user"ない場合は1. で、VPCの設定がきちんとできているかをもう一度確認する。またはインスタンスが動いているかを確認する。
ある場合は3に進む2.の補足
Cloud Loggingのクエリの書き方は覚えたほうがいい
https://cloud.google.com/logging/docs/view/advanced-queries?hl=ja3. Cloud Proxyで接続できるのか(MySQLのusername/passwordが合っているか、private ipでいけるのかなど
Cloud Proxyを使って接続してみる
インストールはドキュメントの通り対応するとしてprivate ipを使ってアクセスする
https://cloud.google.com/sql/docs/mysql/sql-proxy?hl=ja$ ./cloud_sql_proxy -ip_address_types=PRIVATE -instances=[対象のcloud sqlのinstance id] $ mysql -u root -p -S /cloudsql/[対象のcloud sqlのinstance id]接続できたなら、username/passwordは合っている。private ipも動いている。4へ進む。
できない場合username/passwordが間違っている可能性が高い。Cloud SQLのコンソール画面からrootのパスワードを変更してみる。
それでもできない場合、public ipが空いているのであれば(許可ipはなくても良い)、-ip_address_typesのflagを消してpublic ipでのアクセスを試してみる。それでもできない場合はインスタンスが停止している、または、4のユーザのHOSTの設定が限りなく狭いと思われる。(rootなのであんま考えにくいけど。。。)
CloudSQLのコンソール画面から許可ホストを%となるようにユーザを作成してアクセスできるか確認する
それでも、できなかったら、GCEのインスタンスについているサービスアカウントのiamの設定、またはインスタンスのアクセスscopeにて、cloud sqlへの接続許可がついていないと思われる。(この場合アクセスログには残らない気がするが。。。)3.の補足
cloud sql proxyでprivate ipだけでの接続やtcpでの接続ができるので、色々チェックできるのがすごい
TCPの場合$ ./cloud_sql_proxy -ip_address_types=PRIVATE -instances=[対象のcloud sqlのinstance id]=tcp:3306 $ mysql -u root -p --host 127.0.0.1 --port 33064. MySQLのUserテーブルのHostで許可設定がされているか
Cloud SQLのコンソール画面からユーザ一覧をみて、許可されているホストを確認する
(rootなのに)制限されているのであれば、制限内のipからprivate ipでアクセスしてみる。
ホストの値が%
になっている、または制限内のipなのにアクセスできない場合、5に進む4.の補足
Cloud SQLのコンソール上で見れるのは
mysql
データベースのuser
テーブルである。
ユーザのgrantについてはMySQLにloginしないと見れない(今回はloginできるかの問題なので、grantはあまり関係ない5. SSL/TSLの設定が間違っていないのか
- SSL/TSLの設定をしている場合、その期限が切れているか
- またその証明書が正しいかどうか
- MySQLへのアクセス時に証明書を使っているか
- SSL/TSLの設定をOFFにしてprivate ipでアクセスできるか(public ip直でアクセスしている場合は、OFFにしてはいけない)
以上をチェックする。
Cloud Proxyを使ってのアクセスの場合、SSL/TSLの証明書などがなくてもいけるので、いつもCloud Proxyを使ってたから特に気にしてない人はここでハマるかも知れない(まぁ、ハマりましたけど
ここまでくればほぼ接続できるはず。。。5.の補足
SSL/TSLをONにして、SSL/TSLの証明書がないって場合、パスワード間違いと同じエラーがでてくる
設定はきちんと見直そうまとめ
よくわからないで設定を変更するのはやめておこう。。。(今回のSSL/TSLの設定もいつしたのか覚えてない
- 投稿日:2020-08-08T01:41:17+09:00
node.js x express.js x mysql x TablePlusでCRUD処理
node.jsで基本のCURDをしてみた
参考にしたサイト
https://reffect.co.jp/node-js/express-js-connect-mysql#MySQL-3
こちらのサイトがとても解説が丁寧でわかりやすかった。作成結果
実装方法は上記記事を参照
やってみて分かったことは感想に記述【感想】
・node.jsのCRUDはphpと動きが似ている
・mysqlのDBとtableはjsファイル内で記述してサーバーが更新されると自動で作成される。
その後も更新のたびに新しく同じDBとtableを作成しようとしてエラーになるので、一度作ったDBとtableのjsファイル内の記述はコメントオフか削除が必要でした。
・table plusはやはり便利TablePlus使い方
参考
https://reffect.co.jp/windows/tableplus-connect-mysql-sqlite初期設定のパスワードやuserはmysqlのことなので、自分のユーザー名やパスワードではなく、
user:root(mysqlの場合)
パスワード:なし(mysqlの場合)
記述の保存は基本comand + s
基本クリックして登録、更新、削除をする
Data:データの登録、更新、削除
Structure: VARCHARやIDなどの編集