寝ても覚めてもこんぴうた

プログラム書いたり、ネットワーク設計したり、サーバ構築したり、車いじったり、ゲームしたり。そんなひとにわたしはなりたい。 投げ銭は kyash_id : chidakiyo マデ

自分がよく利用するDockerのコンテナ(メモ)

CI/CDをする際によく利用する、GCPを利用するなら特に知っていたほうが良さそうなコンテナたちをメモ。

GoogleCloudPlatform/cloud-builders

GitHub - GoogleCloudPlatform/cloud-builders: Supported builder images for Google Cloud Build

この辺りが含まれています。

f:id:chidakiyo:20190311094126p:plain

GoogleCloudPlatform/cloud-builders-community

GitHub - GoogleCloudPlatform/cloud-builders-community: Community-contributed images for Google Cloud Build

だいぶいろいろあります。

gcpug/docker-appengine-go

GitHub - gcpug/docker-appengine-go: https://gcr.io/gcpug-container/appengine-go

gitlab-ciでデプロイする際に私は利用しています。

enjoy!

GCP Update 2019/03/06

直近のGCPのアップデートはこんな感じ

- BigQuery sandbox: beta
- Kubernetes Engine – node auto-repair: GA
- Kubernetes Engine – node auto-upgrades: GA
- Compute Engine – guest attributes: beta
- Kubernetes Engine – Application-layer Secrets Encryption: beta
- Compute Engine – health checking and autohealing for managed instance groups: GA
- Cloud Composer – support for multiple Apache Airflow versions: GA
- BigQuery available in São Paulo: GA
- Cloud TPU on Cloud Machine Learning Engine: GA
- Compute Engine machine types: beta
- Cloud ML Engine – training with custom containers: beta
- Cloud Storage – Bucket Policy Only: beta
- Transfer Appliance model TA480 available in Europe: beta

Key announcementsは BigQuery sandbox で アナリティクスに対して無料でクエリできるよ、みたいな感じだろうか。

GCP 2019/02/19 の UPDATE

UPDATEがあった項目は以下

Cloud Firestore: GA
App Engine flexible environment – WebSockets support: beta
Internal load balancer – service discovery: GA
Private Google Access for on-premises hosts: GA
Apigee Developer Portal – SmartDocs, account management, and new theming tools: GA
SSH access to Cloud Source Repositories: beta
BigQuery INFORMATION_SCHEMA: beta
BigQuery – Cloud Audit Logs v2: beta
BigQuery available in two new locations: GA
Cloud Machine Learning Engine – quad-core instances for online prediction: beta
Compute Engine – Cloud TPU v3: GA

Firestore の GA が Key Announcement となっているように、
お待ちかねの Firestore の GA で GAE から利用する Datastore も便利になってテンション上がる!

CloudSQL へローカルから接続できない(という人のために)

GCPMySQLPostgreSQL のような RDB をマネージドで利用したい場合に CloudSQL を選択することが多いと思います。

ポチポチっと押せばすぐにインスタンスが出来上がるし、gcloud コマンドや、Cloud Shell を利用することで用意に接続ができるので、ふとローカルの msql コマンドだったり、 MySQL Workbench のようなツールからつなごうとすると「接続ができない」という状況になることがあると思います。 というかデフォルトの状態では接続ができません。

CloudSQL はデフォルトでは外部からの接続をすべて拒否している

見出しのとおりなのですが、CloudSQL の Connection のタブを見てもらうとわかりますが、

Authorize a network or use a Proxy to connect to your instance. Networks will only be authorized via these addresses

とあるので、プロキシを利用するかネットワークを承認する(IPアドレスを Whitelist に追加する)必要があるようです。

ネットワークを承認する方法

単に接続元の IP アドレスを Whitelist に追加すれば良いので Add Network ボタンを押し以下の画面から自分のローカルPCが外部に接続する際のゲートウェイの IP アドレスを登録すればよいです。 注意点は外部に接続する IP アドレスなので、作業している端末の(ローカルの)IP アドレスではないという点です。

f:id:chidakiyo:20190224045922p:plain

調べる方法としては 確認くん などのサイトが利用できます。

IPアドレスを入力したら、 save ボタンを必ず押しましょう。 (ただ自分が試した際には、うまくsaveされませんでした。その場合には画面をリロードすることでうまくいくことがあるようです)

まとめ

上記に書いたIPアドレスを登録する方法の他にProxyを利用する方法というのもあります。 先程の、外部似でていくためのIPアドレスが固定されておらず、変わる可能性がある場合にそちらを利用する必要があります。 一般的なプロバイダの場合、固定IP契約ではない場合にはIPアドレスが動的に変わることがありますが、比較的リース期間が長いことが多いので検証用等の場合にはIPが変わる可能性はあるが、IPアドレスのWhitelist追加で利用してもしばらく大丈夫な場合があります。

ではでは。

GAE(Appengine)のハンドラの例にある `_ah` ってなに?

くも

こんにちは。chidakiyo です。
皆さんappengine使ってますか?

_ahはどういうサンプルに出てくる?

appengineのサンプルで、 ハンドラのパスに _ah というパスが含まれていることがあると思います。

例えば、warmupするための こちら の例を見てみましょう。

inbound_services:
- warmup

handlers:
- url: /_ah/warmup
  script: _go_app
  login: admin

ありましたね、 _ah
url: /_ah/warmup のような形で利用していることがわかります。

で一体何なのこれ?

stackoverflow にこのような投稿がありました。

Q: What does _ah mean in Google App Engine? / Google App Engine_ah の意味はなに?

A: It comes from apphosting, the underscore is to make it more difficult to collide with some user provided URL. / それは apphosting からきている、アンダースコアはユーザが定義したものと衝突をしないようにしているよ。

I worked at Google, apphosting was the first name they selected for AppEngine, and this name still remains in some parts of the internal configuration. / apphosting は AppEngineのために選ばれた最初の名前であり、その名前は未だいくつかの箇所に残っています。

まとめ

ということで 「歴史的な経緯で _ah」 が利用されているということがわかります。

めでたしめでたし。

GCP 2018/12/17 の UPDATE

minikubeでspinnakerを動かすまで(Macのローカルでspinnakerを動かす)

とりあえずサクッと動かせる環境が欲しかったので、ローカルのminikubeでも一応spinnakerを動かすことはできそうだったので試す。

事前準備

  • helmがインストールが完了していること (brew install kubernetes-helm)
  • kubectlのインストールが完了していること
  • minikubeのインストールが済んでいること

注 : Spinnakerをminikubeで動かす場合にはかなりタフなマシンスペックが必要になります。メモリが16GB程度は搭載されているMacでもだいぶ厳しいです。

minikubeを起動する

minikubeを新たなまっさらな状態で起動します。
Spinnakerがリソースを大量に必要とするためです。

minikubeを起動する前にminikubeのupdateをしておくことをおすすめします。
brew caskでインストールしている場合には brew cask reinstall minikube でupdateされると思います。
すでにminikubeの環境を作成したことがある場合には、 minikube delete を実行し、minikubeのVMを削除しておくと良いと思います。

以下のコマンドでminikubeを起動します。

minikube start

minikubeのVMのパラメータを変更する

minikubeのデフォルトだとメモリもCPUも足りないため、spinnakerが起動することすらできないので、VirtualBoxのパラメータを変更する必要がある。

minikubeを止める

以下のコマンドで起動したばかりのVMを停止しましょう

minikube stop

VirtualBoxの設定からcpu/memoryの設定を更新する

メモリは8192MB、CPUは4コアを設定した。

f:id:chidakiyo:20181001191348p:plain

f:id:chidakiyo:20181001191431p:plain

minikubeを改めて起動する

minikube start

kubectlが期待するクラスタ(minikube)に向いているかチェック

minikube startを実行した時点で設定が変更されているはずだが一応確認する

kubectl get node

以下のような感じでminikubeと出れば大丈夫

NAME       STATUS    ROLES     AGE       VERSION
minikube   Ready     master    5m        v1.10.0

helmをクラスタに対して設定する

以下のコマンドでクラスタに対してhelmを有効化する

helm init

Spinnakerをインストールする

helmコマンドを利用し、Spinnakerをインストールする

helm install stable/spinnaker --namespace spinnaker --timeout 6000

少しタイムアウトを伸ばしたほうが良いです。

インストールが完了すると以下のような表示が出ます。

NOTES:
1. You will need to create 2 port forwarding tunnels in order to access the Spinnaker UI:
  export DECK_POD=$(kubectl get pods --namespace spinnaker -l "cluster=spin-deck" -o jsonpath="{.items[0].metadata.name}")
  kubectl port-forward --namespace spinnaker $DECK_POD 9000

2. Visit the Spinnaker UI by opening your browser to: http://127.0.0.1:9000

To customize your Spinnaker installation. Create a shell in your Halyard pod:

  kubectl exec --namespace spinnaker -it jazzy-shrimp-spinnaker-halyard-0 bash

For more info on using Halyard to customize your installation, visit:
  https://www.spinnaker.io/reference/halyard/

For more info on the Kubernetes integration for Spinnaker, visit:
  https://www.spinnaker.io/reference/providers/kubernetes-v2/

表示がされてもすぐにPodが完全に起動しておらず、ポートフォワードの設定が失敗するので、以下のコマンドでPodのデプロイ状況を確認します。

watch -d -n 2 kubectl get pods --namespace spinnaker

STATUS がすべてRunningになるまでじっと待ちましょう・・・

Spinnakerに接続するためのポートフォワード設定をする

export DECK_POD=$(kubectl get pods --namespace spinnaker -l "cluster=spin-deck" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward --namespace spinnaker $DECK_POD 9000

ブラウザでアクセスする

ポートフォワードの設定がエラーなく実施できたらブラウザからいかのURLへアクセスします。

http://localhost:9000

f:id:chidakiyo:20181001191529p:plain

このような画面が表示され

f:id:chidakiyo:20181001191555p:plain

こちらのコンソールに遷移すればSpinnakerの準備が整いました!
あとは設定をしていろいろ使ってみることができます。ですが結構重いです。

ではでは。