Toku's Blog
とあるエンジニアの備忘録

GCPのバックエンドバケットを使用してブログの環境を構築してみた

はじめに ここ最近、GCPを集中的に学んでいて、バックエンドバケットという機能があるのを知り、 どうにかして活用してみたいな〜。 ということで、このブログをバックエンドバケットを使ってサイトを公開する環境を作ってみました。 構成 ブログの環境を構築するにあたって GCP Cloud Storage Cloud Load Balancing Cloud CDN Cloud DNS GitHub CircleCI のサービスを使用しています。以下、構成図です。 まぁ、パッと見はよくある構成ですね。 各サービスについて詳しく見ていきます。 Google Cloud Storage 今回の肝その1です。とはいっても バケットの作成 デフォルト権限でallUsersにRead権限の付与 ファイルのアップロード をするだけです。 コマンドではこんな感じでやってます。 gsutil mb gs://bucket-name/ gsutil defacl ch -u AllUsers:R gs://bucket-name gsutil -m rsync -d -r public/ gs://bucket-name/ Google Cloud Load Balancing 今回の肝その2です。 HTTP(S)負荷分散の設定を行い、バックエンドバケットで先ほど作成したバケットを指定します。 詳細設定で行くと グローバル転送ルール ターゲットプロキシ バックエンドバケット の設定をしています。 普段ではバックエンドサービスを指定してインスタンスグループにバランシングを行うと思いますが、 今回はバックエンドバケットを選択して静的なコンテンツをGCSから配信するように設定しています。

VMからDockerに乗り換えてみたらどうでしょう?

この記事はDocker Advent Calandar 2016の22日目の記事です。(大遅刻) 前置き的な Dockerも結構安定してきた(気がする)ので、そろそろVMで頑張っている人もDockerに乗り換えてみたらどうでしょう? という提案みたいなものです。 その際に対応するコマンドなどのまとめなどを書いていこうと思います。 VMの代わりにDockerをつけてみる(コンテナの作成) ManagerでVMを作成したり、vagrant upなどやっていると思いますが、Dockerではdocker runコマンドを使用します。 docker run -d --privileged --name my-vm ubuntu /sbin/init 軽くオプションの説明をしておくと、 -d: バックグラウンドで動作 --privileged: 特権モードで起動(今回掘り下げません) --name: 名前を設定 てな感じです。 ubuntuの位置を別のOS名にすることができます。 また、ubuntu:14.4やcentos:6のようにコロンの後にバージョンの指定をすることができます。 /sbin/initの部分については今回掘り下げません。詳しく知りたい場合は、initプロセスなどでググってみるといいと思います。 ポートマッピング 一つ注意しなければならないのが、コンテナ上のサーバーなどにアクセスしたい場合、ポートをdocker runコマンドの -pオプションを用いて指定しておく必要があります。 docker run -d --privileged -p 8080:80 --name my-vm ubuntu /sbin/init -pオプションのコロンの前がホストマシンのポート、コロンの後がコンテナのポートになります。 公開するポートは複数指定することも可能です。 docker run -d --privileged -p 16379:6379 -p 16380:6380 -p 10080:80 --name my-vm ubuntu /sbin/init SSH的なことをしてみる(コンテナ上にプロセスを起動) VMにSSHしてゴニョゴニョ、はよくやりますよね。DockerでSSHをすることはできないことはないですが、大体の場合SSHする目的は 対象のマシン上でbashなりのシェルを起動してコマンドを実行する、ということだと思います。

Python3.5のType Hintについて

この記事はPython Advent Calendar 2015の23日目の記事です。 ちゃんとした記事をこのブログに書くのは今回が初です(笑) 早速、やってきまそ。 Type Hintsについて書こうと思ったわけ 最近HaskellやScalaなどの関数型のパラダイムを持つ静的型付け言語を学ぶようになって型推論など面白いなーなど思っていたところに動的型付けのPythonで型についての提案が導入されたので気になった次第です。 動的型付け言語ですからてきと〜にプログラム書いてても通ってしまいます。まぁそこがいいとこでもあるのかもしれませんが、少し大きなライブラリや業務で使うとなるとバグ見つけたりするのに苦労しそうです。 そこでType Hintsがあれば!!!というわけで勉強がてら紹介です。 それと、記事投稿遅れてスイマセンm(_ _)m Type Hintsとは! Type HintsとはPEP0484で提案された静的型解析などを行うための仕様を提案したものです。 ぶっちゃければ、関数の引数・戻り値などに型を指定して型チェックを行うための仕様を提案したもの。 目的は・・・ この提案の目的としては型アノテーションの標準化された構文の提供です。これにより、静的型解析やリファクタリングや実行時の型チェックなどなど、行えるようになります。 まぁ、主には静的型解析がやりたいそうです。 目的じゃないもの この提案が取り込まれた暁にはPythonは静的型付け言語に・・・・!! とはならないわけで。 依然として動的型付け言語ですし、Type Hintsを必須にすることは望んでないようです。 まぁ、自分は取っ付き易いとこがPythonの取り柄の一つだと思っているので、良い考えだと思います。 それでは本題に。 型定義の構文 def func(name: str) -> str: return 'Hello ' + name とまぁ、関数アノテーションを利用して型を指定してあげるだけです。簡単ですね。 型を参照したい場合は__annotations__属性として参照できます。 >>> func.__annotations__ {'name': <class 'str'>, 'return': <class 'str'>} 型の別名 変数に突っ込みましょう。注意するのが、変数名の先頭を大文字にしておくことです。 (ユーザー定義型として扱うので) Name = str def func(name: Name) -> str: return 'Hello ' + name ジェネリクス typingモジュールのTypeVarを使います。