エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【GCP】CloudSQLで作ったインスタンスに、ローカルからアクセスしたい【412日目】

こんなとき

Cloud SQLを使ってMySQLを作りました。

その上で、開発中等にMySQLWorkbenchなどのアプリケーションでアクセスしたい。

ドキュメント

基本的にはここを参照。

ローカルテストにプロキシを使用する場合のクイックスタート  |  Cloud SQL for MySQL  |  Google Cloud

こちらの記事は、備忘録+アプリケーション側での使い方も説明。

1. Cloud SQL API を有効にする

ヘルプページにある、ENABLE THE APIをクリックすると、以下のようなページに飛ぶ。

そして、MySQLインスタンスを作ったプロジェクトを選択。

f:id:willow710kut:20181128164308p:plain

次へを押していけば設定できます。
途中、認証がどうたらでエラーが出るかもですが、無視しても大丈夫です!

2. 必要なものをインストール

ここはヘルプページに説明をお願いしようと思います。

基本的には、gcloud、cloud_sql_proxyのインストールをしましょう。

プロキシを開始する

どのインスタンスに接続するか、インスタンスの接続名を取得しておいてください!

で、先程インストールしたcloud_sql_proxyを 実行します。

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306

ここで、注意。

Listening on ~って書かれたら、今実行中ってことです。そのままにしておいてください。

ドキュメントをちゃんと読めばわかりますが、このcloud_sql_proxyがやっていることは、
127.0.0.1にアクセスしたときに、さっき設定したSQLインスタンスに接続を切り替えてくれるような仕組みです。

アプリケーションで接続

ここからは、ドキュメントにないやつですね。

さて、アプリケーションでの接続ですが。必要な情報は、

ホスト名・ユーザー名・パスワード

ですね。このホスト名ですが、先程書いたように、127.0.0.1を選択してください。

そして、ユーザーとパスワード。人によっては、ユーザーはrootかもしれないですね。

cloud_sql_proxyが動いている状態で、127.0.0.1にアクセスするとなんと!該当のSQLインスタンスに接続ができます。
満足したら、cloud_sql_proxyは、ctrl+Cとかで終わらせてあげてくださいね。

コマンド打つのが面倒

そんなあなたに。

.bash_profileにこんな感じのこと書けばいいんじゃないかな

alias gmysql='~/y/cloud_sql_proxy -instances=xxxxxx=tcp:3306'

cloud_mysql_proxyのパスや、インスタンスの接続先は自分の環境に合わせてくださいね。

これでターミナル再起動なりすれば、gmysqlのコマンド一発でプロキシ起動できますね。

お疲れ様でした!

【GCP】CloudSQLでMySQLインスタンスを立てる【411日目】

GCPMySQLを用意したい

ということで、GCP上でMySQLを使えるようにしましょう。

やり方

  1. メニューから、SQLの項目をクリック
  2. インスタンスの作成を選択
  3. データベースエンジンの選択 (今回はMySQLを選択)
  4. インスタンスタイプの選択 (MySQL第2世代を選択。料金形態や性能が違います)
  5. 基本設定。詳細は次で。

f:id:willow710kut:20181128160218p:plain

f:id:willow710kut:20181128160258p:plain

MySQLインスタンスの基本設定

  1. インスタンスID
  2. 初期にあるrootユーザーのパスワード設定。困ったら右に生成ボタンが。
  3. ロケーションの設定。極力、使うインスタンスに近いようにしましょう。私はasia-northeast1(日本はここに所属)を選択。
  4. 設定オプションを表示で、詳細な設定。スペックを下げたりもできます。私は今回はそのまま

f:id:willow710kut:20181128161451p:plain

作成で完成!

しばらくするとインスタンスの生成が行われます。

設定を変えていなければ、パブリックipが割り振られていますが、 許可するipの指定等しなければ、アクセスができないようになっています。
Cloud SQL Proxy等のプロキシ経由や、同ネットワーク内で接続しましょう。

また、rootユーザーの設定はあるので、必要に合わせてユーザーの作成をしておきましょう。

もし、MySQLWorkbench等外部アプリケーションを使ってアクセスしたいときは、次の記事を見てみてください。

お疲れ様でした。

【jQuery】表示する内容を切り替える、1行プログラム【410日目】

こんなとき使う

ボタンをクリックしたら、表示する文字を切り替えたい。

表示する内容を切り替えたいとかは良くあります。

show()hide()を使うのもありですが、たくさん切り替えるとかも面倒なので、
1行ですっきり書いてみましょう

toggle

<button id="btn_before_after">Toggle</button>
<p class="before_after">before</p>
<p class="before_after" style="display: none">after</p>

beforeのpタグと、afterのpタグがあります。afterの文字は、display:noneで非表示です。

$("#btn_before_after").click(function () {
  $(".before_after").toggle();
});

ボタンをクリックしたら、toggle関数が動きます。
toggleは、非表示を表示に。表示を非表示に入れ替えます。

いつもだと、表示するものと非表示のものをクラスで分けたり、今の状態がどちらを表示しているかをチェックするコードを書いたりする必要があるので、簡単ですね!

公式ドキュメント

英語です。

.toggle() | jQuery API Documentation

情報古いですが、日本語

toggle() - jQuery 日本語リファレンス

【Laravel】Modelクラスでクエリビルダが動く理由【409日目】

モデルでクエリビルダ?

モデルのクラスって、テーブルのレコードをオブジェクトにしたようなイメージでした。

でも、以下のようなコードを見ることがあると思います。

User::select('id')->first();

あれ?selectってクエリビルダだよな・・・

このUserってなんだ?クエリビルダ?モデルのクラス???

元コードを読んで見る

Modelクラス

    /**
     * Handle dynamic method calls into the model.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        if (in_array($method, ['increment', 'decrement'])) {
            return call_user_func_array([$this, $method], $parameters);
        }

        $query = $this->newQuery();

        return call_user_func_array([$query, $method], $parameters);
    }

    /**
     * Handle dynamic static method calls into the method.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public static function __callStatic($method, $parameters)
    {
        $instance = new static;

        return call_user_func_array([$instance, $method], $parameters);
    }

なにしてるの?

__callStatic

__callStaticはマジックメソッド。

静的呼び出しをされたときに使われます。

User::select('id')

このとき、 new staticでモデルのインスタンスを作成。そして call_user_func_arrayで モデルクラスのインスタンスが、 selectの関数を 'id'のパラメーターを引き継いで実行。

__call

__callStatic()によって、静的呼び出しだったものが、モデルクラスのインスタンスから呼び出されることになります。

次は、 __callです。静的呼び出しじゃなくなったので。

そこでは、メソッド名が ['increment', 'decrement']のどちらかか確認して、合っていれば、そのモデルクラスのメソッドを呼び出します。

なければここ! newQueryでクエリビルダ用にインスタンスを作って、そのインスタンスselectの関数を呼び出します!

Laravelの元コードを読むのは面白いよ!

ってことで、案外簡単に追うことができました。

Laravelの元コードは、こんな書き方あるのか!と勉強になることがたくさんあるので、是非読んでみてください!

このデザインパターン使ってるのか・・・!ってなることたくさんあります。おすすめです。

参考

PHP: in_array - Manual

PHP: call_user_func_array - Manual

【一週間振り返り】先週の目標を消化できた一週間【408日目】

1.今週一週間の感想(ざっくり)

ちゃんと目標たてて、それは実行できたよ!

2.良かったこと

1.GCPの勉強少しやれた

2.チームに対して、私は話をしてみたいと思える人物でありたい。先輩のような人でありたい

3.もっとこうしたかったこと

GCPもう少し勉強したかったけど、最低ラインはおっけ。次にやることも見つかったのでよし。

4.新しく気づいたこと

とりあえず、勉強楽しい。

あと、トラウマとかまだ残ってるっぽい。

やっぱり私は自分が楽しい、相手も楽しいが重要なようだ

5.来週したいこと

GCPでDBも。

あと、できれば文字認識OCRの勉強もしたい。

6.その他

やりたいことが増えてきた、やれることが増えてきたから

いい感じに前に進めてるいいこと。

【思考メモ】自分のトラウマと行動原理【407日目】

自分を見直し

自分を見直してみて、思ったことメモ

前提?

私は、すべての行動は『やりたいと思ったからやる』と思っています。
『選択』と言い換えることもできるかもしれないです。

なので、『逃げ』も選択、『苦しいけど耐える』も選択。

どちらも、『私がしたいと思ったからした行動』だと思います。

私は、仕事も学習も遊ぶのと同じように思っています。だから、勉強はそこそこ好きでした。
『真剣にやれよ!仕事じゃねぇんだぞ!』に近いようで、違う考え方と思っています。

トラウマ?

自分のどうしても『嫌なことをすること』は耐えられない。
あるいは、『嫌なことをやることに、目的のためだと理由をつけてやること』が嫌なのかもしれない。

では、私は辛いことはやらないのか?
『辛いことを、面白い、ワクワクする状態に変える』とかはしたい。

嫌なことが半年前に起こったときは、それを『ワクワク』に変えるために、
色んな人に想いを聞いて、ワクワクに変えれました。

逃れられないことは?

きっと逃れられないこともあるとは思います。
その時にどんな選択をするかは、考えないといけない。

今まではとにかく耐えてました。無心でやってました。
結果、去年からちょっとしたトラウマというか、近い出来事を見たら涙が出てくるようです。

では、それに対してどう行動するか・・・ワクワクに変えれないときはどうするのか。
悪意によって、ボッコボコにされるのは、学生時代散々やられたけど、社会人になってから同じことが起きたときに、
どうなるのか、正直自分はまだわからないです。

これから私がやること

  • どんな自分になりたいかを考える
  • なにをしたいかを考える
  • はっと気がついたとき、ちゃんと気がついたのを正直に表す
  • 私が想像できないものを生み出す社会にするには、どうすればいいかを行動レベルで考える
  • ほしいコミュニケーション力とは何かを、具体的レベルでブレイクダウンしていく
  • 私の理想の人を探し、その人に会いに行く。会うのが困難な人でも○

【GCP】サーバーのテンプレ。インスタンステンプレートを作る【406日目】

インスタンステンプレート?

このテンプレートは、サーバーのインフラ情報まで含めたテンプレート。

テンプレートだけあって、これがあれば、同じインスタンスを作れるって状態ですね。

何が嬉しいかって、インスタンスグループのように、サーバー落ちたときの対策のために、
全く同じサーバーを作るとき、このテンプレートがあれば、
いくらでも同じサーバーが準備できちゃうわけですね!

作成

基本的には、既存のインスタンスを作成する作業と同じ。

私が作った例はこちら。

1.テンプレートの名前 2.マシンタイプ(サーバースペック) 3.ブートディスク(次の項目で説明するよ!) 4.ファイアウォール(私はWeb用のインスタンスなので、両方許可) 5.詳細設定を開く 6.管理の自動再起動をオンに 7.ホストメンテナンスのインスタンス移行をオンに

f:id:willow710kut:20181123010501p:plain

f:id:willow710kut:20181123010526p:plain

作成!

ブートディスク

OSとかのイメージを選択。

そういえば、この前すでに動かしてたVMインスタンスのイメージがありますね!

カスタムイメージの項目から、自分のプロジェクトを選択。

そしたら、バックアップしてたイメージが見つかりますね!

f:id:willow710kut:20181123005732p:plain

これでよし。

作成したよ!

これでテンプレート作成完了!

これでいつでも同じコピーが作れるね!

ということは、インスタンスグループ作成も・・・?

【GCP】GCEをまるごとバックアップ。イメージを作成【405日目】

スナップショットはこちら

www.nyamucoro.com

イメージって?

インスタンスの構成とか、ぜーんぶまるっとコピー。バックアップ。

スナップショットとの違いは、あっちはハードディスクとかのデータで、ネットワークの構成とかは保存されてないよ。

設定

  1. 保存するイメージの名前をつける
  2. ソースを選ぶ(スナップショットを選択もできるけど、今回は今動いてるインスタンスを選ぶよ)
  3. ソースディスクを選ぶ(対象の今動いてるインスタンスを選ぶよ)

このとき、動いてるインスタンスだと、危ないからインスタンス止めてね!って言われる。

動いたままバックアップも取れるけど、私は怖いのでインスタンスを止めてから作成しました。

f:id:willow710kut:20181123004233p:plain

お金は?

こっちは、スナップショットと違ってお金かかるよ!

でも、めっちゃ高いとかじゃないので、一応確認して使ってね。

これなにに使うん?

サーバーを同じのを作りたいときに使ったりとか。

あと、インスタンスグループのために、インスタンステンプレートにしちゃうとか。

ってことで、この次はインスタンステンプレートを作るよ!