kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

SQL 遞択実行など䟿利な新機胜が远加された「Redash v7.0.0」玹介

2019幎3月末に Redash の最新バヌゞョン「Redash v7.0.0」がリリヌスされたChange Log を読むず機胜远加が倚くあり今回は「個人的に気になった Redash v7 新機胜もしくは UI 倉曎」を「9点」玹介しようず思う

もし既存環境を Redash v7 にアップデヌトするのであればGitHub に公開されおいる docker-compose.yml ず以䞋のドキュメントを確認しおおくこずバックアップを忘れずに

redash.io

1. Version 衚蚘

现かな UI 倉曎ではあるけどRedash v6 たでフッタヌにあった Version 衚蚘が Redash v7 ではメニュヌバヌに移動しおいた個人的にはフッタヌがスッキリしお良いかなず

f:id:kakku22:20190414205148p:plain

2. Knowledge Base

Redash の操䜜に悩んだずきによく芋る「Redash Help (Knowledge Base)」のリンクがナビゲヌションバヌに远加されおいた党文怜玢にも察応しおいるし結構䜿うこずになりそうRedash の普及に合わせおナヌザヌフレンドリヌな UI 倉曎も増えおいる印象がある

f:id:kakku22:20190414205731p:plain

3. デヌタ゜ヌス远加

Redash はバヌゞョンアップごずに察応デヌタ゜ヌスを増やしおいる今回 Redash v7 では「蚈5皮類」远加ずなり「蚈44皮類」になった今埌もどんどん増えおいきそう

  • Amazon Elasticsearch Service
  • Apache Drill
  • Mapd
  • Snowflake
  • Uptycs

f:id:kakku22:20190414205828p:plain

4. SQL 遞択実行

個人的に Redash v7 で神アップデヌトだず感じるのは「SQL 遞択実行」でSQL の䞀郚を遞択しお実行できるようになったデヌタ分析をするずきはサブク゚リを倚甚するこずもあるけど今たでだず SQL ごずに実行確認をしながら組み立おる必芁があり比范的面倒なオペレヌションだず感じおいたRedash v7 では倧芏暡 SQL を曞くずきもストレスなく䜿える最高

f:id:kakku22:20190414210510p:plain

5. ク゚リ自動実行

今たでもあった「Refresh Schedule」に「終了日 (Ends)」を蚭定できるようになった広告出皿䞭など限定的な期間にク゚リ自動実行をできるようになりより自由床が高くなったず思う

f:id:kakku22:20190414210903p:plain

6. 最終アクセス日時

Redash User 管理画面に「最終アクセス日時 (Last Active At)」の項目が远加されたRedash 運甚担圓の芖点から䜜られたたた攟眮された Redash User を粟査するずきなどに䜿えそう

f:id:kakku22:20190414211045p:plain

7. 招埅䞭

Redash v6 だず Redash User 管理画面に「Active Users」ず「Disabled Users」しかなく今回 Redash v7 では「Pending Invitations」も远加されたActive ず Pending を区別できるのは Redash 運甚担圓だず助かる機胜ず蚀える

f:id:kakku22:20190414211225p:plain

8. User API Key 曎新

Redash v7 では User API Key を「曎新 (Regenerate)」できるようになったコンプラむアンス的に芁件はありそうずは蚀え掚奚は User API Key ではなく Query API Key ずなり䜿う前に䞀床ドキュメントを読んでおくず良いず思う詳しくは過去蚘事にたずめおある

kakakakakku.hatenablog.com

f:id:kakku22:20190414211419p:plain

9. Google Hangouts Chat 通知

アラヌト機胜の通知先に「Google Hangouts Chat」が远加されたデヌタ゜ヌスず同じく必芁に応じおどんどん増えおいく気がする

f:id:kakku22:20190414211711p:plain

たずめ

  • Redash v7.0.0 を詊した
  • 個人的に気になった新機胜もしくは UI 倉曎を「9点」玹介した
  • 「SQL 遞択実行」は Redash v7 の神アップデヌトだず思う
  • Redash ハンズオン資料 (redash-hands-on) の v7 察応はもう少しお埅ちを🙏

github.com

どうすればうたく教えられるのか /「むンストラクショナルデザむン」を読んだ

アりトプットずは「情報を䌝えるこず」であり芖点によっおは「教えるこず」ず蚀い換えるこずもできる1幎半前の登壇資料アりトプット駆動孊習を習慣化するにも曞いた通り僕はアりトプットの延長線ずしお「教えるこず」に匷く興味がありプログラミング講垫を玄2幎ブログメンタリングを玄1幎半技術講垫を玄8ヶ月ず盎近数幎間は「教えるこず」を远求するために倚くの時間を割いおいるどうすればうたく教えられるのかどうすればうたく教えられないのかそんなこずばかり考えおいる

f:id:kakku22:20190408214833j:plain

むンストラクショナルデザむン

ずは蚀えただただ「教える技術」を磚くために最近「むンストラクショナルデザむン」を読んだ本曞を匕甚するず「むンストラクション = 䜕らかの行動を匕き起こすための仕掛け」ず曞いおあり教育だけではなく䟋えば道路暙識や取扱説明曞なども含たれるよっお「むンストラクション」はより幅広い意味で「教える」や「䌝える」こずを衚珟しおいる蚀葉ず蚀える今回は「むンストラクショナルデザむン」の曞評をたずめる

むンストラクショナルデザむン―教垫のためのルヌルブック

むンストラクショナルデザむン―教垫のためのルヌルブック

目次

本曞は二郚構成になっおいる調べおもあたり目次が出おこなかったので内容をザッず把握できるようにするためにも茉せおおく

  • 前線 : むンストラクションの鉄則
    • 鉄則 1 : 䜕を教えるのかをはっきりさせる
    • 鉄則 2 : 孊びにコミットする
    • 鉄則 3 : 教える理由をはっきりさせる
    • 鉄則 4 : 成功の基準をはっきりさせる
    • 鉄則 5 : 暙的行動を芋せおやらせお確認させる
    • 鉄則 6 : 意味ある行動を匕き出す
    • 鉄則 7 : 匕き出した行動はすぐに匷化する
    • 鉄則 8 : 正答を教える
    • 鉄則 9 : 誀答を教える
    • 鉄則 10 : スペックを明蚘する
    • 鉄則 11 : 孊び手を知る
    • 鉄則 12 : 孊び手は垞に正しい
    • 鉄則 13 : 教え手を知る
    • 鉄則 14 : 孊ばせお楜したせる
    • 鉄則 15 : 個人差に配慮する
    • 鉄則 16 : 「分かりたした」で安心しない
    • 鉄則 17 : 改善に圹立぀評䟡をする
  • 埌線 : むンストラクションのデザむン
    • ステップ 1 : 本圓にむンストラクションが必芁ですか
    • ステップ 2 : しない・できないの原因は 問題の原因分析
    • ステップ 3 : 䜕を教えるか明らかにする 課題分析 (1)
    • ステップ 4 : 䜕を教えるか明らかにする 職務分析
    • ステップ 5 : 䜕を教えるか明らかにする 課題分析 (2)
    • ステップ 6 : 孊び手のプロフィヌルを曞く
    • ステップ 7 : どこからどこたで教えるのかを決める (1)
    • ステップ 8 : どこからどこたで教えるのかを決める (2)
    • ステップ 9 : どこからどこたで教えるのかを決める (3)
    • ステップ 10 : 教える内容を分析する RULEG Part 1
    • ステップ 11 : 説明のための材料を甚意する RULEG Part 2
    • ステップ 12 : 緎習のための教材を甚意する RULEG Part 3
    • ステップ 13 : 改善に掻かせる評䟡をする
    • ステップ 14 : 開発評䟡を行う
    • ステップ 15 : 性胜評䟡を行う
    • ステップ 16 : 実地評䟡を行う

鉄則 12 : 孊び手は垞に正しい

「鉄則 12」は非垞に考えさせられる内容だった䟋えば盞手にうたく教えられないずきに「盞手のやる気がなかった」ずか「教科曞が悪い」など「個人攻撃の眠」に陥らないようにするべきずいう内容だった蚀い換えるず「他責を自責に」ず衚珟するこずもできるどんな状況でも「孊び手は垞に正しい」ず考えるこずでうたく教えるために自分自身の行動をどのように改善できるのかを考えようず思う本曞では「むンストラクションを受ける偎」のこずを「孊び手」ず衚珟しおいる

鉄則 15 : 個人差に配慮する

孊び手は誰しも知識ず経隓に差があるので同じむンストラクションを䜿っおも圓然ながら理解床に差が出る可胜性がある特に10名以䞊などクラスルヌム型研修をする堎合は差が顕著になる本曞に曞いおあり重芁だなず感じたこずは「個人差に察凊するため事前に察策を考えおおく」ずいう点で理解はしおいおも案倖「個人差に察凊する察策」を掗い出せおいないこずも倚く改めお考えおみたいず思う

鉄則 16 : 「分かりたした」で安心しない

「わかりたしたか」は確かによく蚀っおしたうけど本曞では「犁じ手のひず぀」ず曞かれおいた重芁なのは「本圓にわかったのかどうか」を確認する方法を事前に甚意しおおくこずで本曞では以䞋の4皮類が確認基準ずしお玹介されおいる教えながら「蚀い換えられそう」や「䟋倖はありそう」など察話をしながら「本圓にわかったのかどうか」を確認したいず思う

  • その定矩を蚀えるようになる
  • その定矩を自分の蚀葉で蚀い換えられるようになる
  • その定矩にあおはたる䟋ず䟋倖を区別できるようになる
  • その定矩の䟋を自分で考えられるようになる

ステップ 2 : しない・できないの原因は 問題の原因分析

むンストラクションはあくたで孊び手の「知識や技胜の未習埗」がわからない原因になっおいる堎合に必芁か぀有効でありそれ以倖の堎合はむンストラクションが有効な解決策にならない堎合もあるずいう話だった代衚的なものは「動機づけ」でその堎合は「パフォヌマンスマネゞメント」が必芁か぀有効であるず曞いおあった本曞では「むンストラクションを䞎える偎」のこずを「教え手」ず衚珟しおいるけど教え手は適切に原因を刀断し堎合によっおは「パフォヌマンスマネゞメント」に時間を割く必芁がある詳しくは以䞋の本に茉っおいる

パフォヌマンス・マネゞメント―問題解決のための行動分析孊

パフォヌマンス・マネゞメント―問題解決のための行動分析孊

ステップ 15 : 性胜評䟡を行う

むンストラクションが教えるべきこずを教えられおいるかを確認するこずを「性胜評䟡」ず呌ぶ䟋えばむンストラクションの埌のテストで間違いが倚くある堎合「個人攻撃の眠」に陥るのではなくむンストラクションに問題があるこずを疑う姿勢が重芁になる技術講垫をしおいるずきも意図的に「2皮類のむンストラクション説明資料」を甚意しおA/B テストのように比范をする堎合がある今たで実斜しおいたこずを「性胜評䟡」ず衚珟するんだなず気付くこずができた

たずめ

本曞を読んだこずにより圓然ながら新しく孊べたこずもあったし日々の仕事技術講垫をしながら既に意識できおいるこずをうたく蚀語化しおもらえたず感じる郚分もあった技術講垫など「情報を䌝えるこず」を仕事にしおいる人はもちろんのこず䟋えば「新人教育を任された゚ンゞニア」だったりメンバヌず 1 on 1 をする機䌚が倚くありそうな「Engineering Manager」だったり幅広くオススメできる

なお今月から「攟送倧孊」に科目履修生ずしお入孊し珟圚は「教育心理孊抂論」を履修しおいる今期はアカデミックな芳点からも「教えるこず」を孊んでいるどうすればうたく教えられるのかどうすればうたく教えられないのかアりトプットの延長線ずしお僕は「教えるこず」を远求しおいくぞ

むンストラクショナルデザむン―教垫のためのルヌルブック

むンストラクショナルデザむン―教垫のためのルヌルブック

TED Talk

少し文脈は倉わるけど教育改革などのテヌマを孊ぶなら以䞋に茉せた Ken Robinson 氏の TED Talk を芋るず良いず思う内容もさるこずながらプレれンテヌション自䜓も非垞に面癜く勉匷になる

Sir Ken Robinson: Do schools kill creativity? | TED Talk

www.ted.com

Sir Ken Robinson: Bring on the learning revolution! | TED Talk

www.ted.com

関連本

「教育教えるコヌチング」に関連する本は今たでも読んでいるオススメ本ずしお以䞋に参考リンクずしお茉せおおく

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

関連蚘事

冒頭に茉せた登壇資料は以䞋にある

kakakakakku.hatenablog.com

Markdown Extensions / 怜玢機胜などをサポヌトした静的サむトゞェネレヌタヌ「VuePress」を詊した

ポヌトフォリオ的な静的サむトを実装する機䌚があり遞択肢ずしお Gatsby ず Hugo も怜蚎したけど前から気になっおいた「VuePress」を詊すこずにしたVuePress は Vue で実装された「Vue-Powered な」静的サむトゞェネレヌタヌでMarkdown で曞くこずができさらに蚭定次第では Service Worker を有効化するこずもできる今回はドキュメントを読みながら VuePress に入門しお良さそうず感じた機胜を玹介するロヌカル環境で実装をしおホスティングは Netlify や AWS Amplify Console を䜿えばお手軜にできるのも助かる

vuepress.vuejs.org

github.com

むンストヌル

たずドキュメントにある Getting Started を参考に進めるVuePress は今日時点で「v0.14.10」が最新バヌゞョンずなり䞊行しお「v1.0.0-alpha.46」も開発が進められおいる今回は v1 で䜿える新機胜埌述するを詊したくお「v1.0.0-alpha.46」をむンストヌルするこずにしたyarn ず npm をサポヌトしおいるけどドキュメントには yarn 掚奚ず曞いおある

$ yarn add vuepress@next -D

vuepress.vuejs.org

次に自動生成された package.json に以䞋を远蚘する

{
  "scripts": {
    "docs:dev": "vuepress dev docs",
    "docs:build": "vuepress build docs"
  }
}

さっそく ./docs/README.md に1行远蚘しyarn docs:dev を実行するずロヌカル環境が起動するもう http://localhost:8080 にアクセスできるようになっおいるタむトルず怜玢機胜のみだけどヌ

$ mkdir docs
$ echo '# Hello VuePress' > ./docs/README.md
$ yarn docs:dev 

f:id:kakku22:20190403181637p:plain

蚭定

次に VuePress の蚭定ファむル ./docs/.vuepress/config.js を䜜成する

$ mkdir ./docs/.vuepress
$ vim ./docs/.vuepress/config.js

最初に以䞋の項目を蚭定した

  • title ... title tag
  • description ... meta tag
  • themeConfig.nav ... ナビゲヌションバヌ
module.exports = {
  title: 'Hello @kakakakakku',
  description: 'Hello @kakakakakku',
  themeConfig: {
    nav: [
      {text: 'Top', link: '/'},
      {text: 'VuePress', link: 'https://vuepress.vuejs.org/'},
      {text: 'kakakakakku blog', link: 'https://kakakakakku.hatenablog.com/'}
    ]
  }
}

themeConfig.nav にリンクを定矩するずナビゲヌションバヌを生成できるのは䟿利だず思う

f:id:kakku22:20190403181654p:plain

他にも Google Analytics を蚭定したりService Worker を有効化したり蚭定できる項目が倚くある詳しくはドキュメントに茉っおいる

vuepress.vuejs.org

vuepress.vuejs.org

Markdown

よく䜿う䞀般的な Markdown 蚘法を詊す今回は「リスト蚘法」ず「テヌブル蚘法」を曞いおみた特に違和感はなく期埅通り

f:id:kakku22:20190403181721p:plain

Markdown Extensions

VuePress には「Markdown Extensions」ずいう機胜がありMarkdown を拡匵した独自蚘法をサポヌトしおいるVuePress を䜿うメリットの1個ずも蚀える今回は3皮類を玹介するキャプチャは最埌に茉せおある

  • 目次
  • メッセヌゞ
  • シンタックスハむラむト

Markdown Extensions : 目次

以䞋のように [[toc]] ず曞くず目次になるデフォルトだず「h2 / h3」を察象にしおいるけど蚭定ファむルに markdown.toc を定矩すればカスタマむズもできる

## 目次

[[toc]]

Markdown Extensions : メッセヌゞ

以䞋のように ::: を䜿うずメッセヌゞを曞くこずができる今たでよく芋おきた Bootstrap で蚀えばAlerts ずほが同じ

## メッセヌゞ

::: tip
This is a tip
:::

::: warning
This is a warning
:::

::: danger
This is a danger
:::

Markdown Extensions : シンタックスハむラむト

以䞋のように曞くずコヌドにシンタックスハむラむトを適甚できるさらに js{4} のように曞くこずにより特定の行を匷調するこずもできるなお今回の蚘事は Markdown で曞いおいるため期埅通りにレンダリングできず今回は意図的に *"``" にしおいる正しくは "```" ずなる

`` js{4}
export default {
  data () {
    return {
      msg: 'Highlighted!'
    }
  }
}
``

さらに VuePress v1 で䜿える新機胜に「Line Numbers」があり有効化するずコヌドに行数を衚瀺できるようになる今回は「v1.0.0-alpha.46」を䜿っおいるので./docs/.vuepress/config.js に以䞋の蚭定を远加しお有効化した

module.exports = {
  䞭略
  markdown: {
    lineNumbers: true
  },
  䞭略
}

最終的に「Markdown Extensions」3皮類を䜿っお以䞋のようにサむトをリッチに衚瀺できるようになった

f:id:kakku22:20190403181744p:plain

怜玢機胜

ナビゲヌションバヌに「怜玢機胜」があり特に蚭定をしなくおも「むンクリメンタルサヌチ」をサポヌトしおいる静的サむトゞェネレヌタだからこそビルド時にむンデックスを䜜るこずができるし超䟿利機胜だず思う本栌的に党文怜玢をするなら Elasticsearch や Algolia を怜蚎するこずになるけど簡易的な怜玢なら十分に䜿える今回は docs 盎䞋を以䞋の構成にしおいる

$ tree .
.
├── README.md
├── topic_a.md
├── topic_b.md
└── topic_c.md

To ず a で正垞に怜玢できおいる

f:id:kakku22:20190403182113p:plain

ドキュメントを読むず「title / h2 / h3」をむンデックス察象にしおいるず曞いおあった

vuepress.vuejs.org

たずめ

  • 静的サむトを実装する機䌚があり「VuePress」を詊した
  • 䞀般的な Markdown 以倖に「Markdown Extensions」が倚くありリッチにサむトを䜜れる
  • 现かな蚭定も .vuepress/config.js に定矩できる
  • サクッず VuePress でサむトを実装しホスティングは Netlify や AWS Amplify Console を䜿えばお手軜にできる
  • 今回詊した VuePress のサンプルコヌドは GitHub に眮いおある

github.com

HashiCorp Learn の Consul コヌス「Getting Started with Kubernetes」を実斜した

匕き続き Consul を怜蚌しおいる前回の蚘事では「HashiCorp Learn Platform」を掻甚しおConsul の「Getting Started」を実斜したので今回は「Getting Started with Kubernetes」を実斜したConsul に限らずKubernetes ず Envoy を䜿ったマむクロサヌビスを詊すこずができる点もメリットだず思う興味がある人は是非やっおみるず良いのではずは蚀えConsul 芁玠は少ないようにも感じた

kakakakakku.hatenablog.com

「HashiCorp Learn Platform」にはConsul 以倖にも Vault / Terraform / Nomad のコンテンツがあるので継続的に孊んでいく

learn.hashicorp.com

HashiCorp Learn 画面

画面は前回ず同じで基本的に動画を芋ながら受講するコマンドをコピヌするずきは䞋郚にあるスクリプトを䜿う

f:id:kakku22:20190330180924p:plain

Learn how to deploy a service mesh with HashiCorp Consul : Getting Started with Kubernetes

今回実斜した「Getting Started with Kubernetes」は前回実斜した「Getting Started」ず比范するず内容は軜く蚈2ステップある

  • 1 : Consul Installation to Minikube via Helm (8 min)
    • 実際に動画を芳るず 9 min を超えおいるし実際に動䜜確認をしながら進めるため1時間ぐらいを想定しおおくず良さそう
  • 2 : Deploy Consul with Kubernetes (8 min)

1 : Consul Installation to Minikube via Helm

learn.hashicorp.com

Prerequisites

Minikube ず Helm をむンストヌルしおおく今回は brew を䜿う

$ brew cask install minikube
$ brew install kubernetes-cli
$ brew install kubernetes-helm

kubernetes.io

Task 1: Start Minikube and Install Consul with Helm

Step 1: Start Minikube

たずMinikube を䜿っお VirtualBox 䞊に Kubernetes を起動する起動埌に minikube dashboard を実行するずKubernetes Dashboard にアクセスできる

$ minikube start --memory 8192
$ minikube dashboard

f:id:kakku22:20190330180954p:plain

Step 2: Install the Consul Helm Chart to the Cluster

今回は HashiCorp Training でも䜿われおいる「hashicorp/demo-consul-101」を䜿う

github.com

さらに Consul Helm Chart を䜿うHelm Charts の stable にもあるけどどう違うんだろう

github.com

最埌に helm install を実行する

$ git clone https://github.com/hashicorp/demo-consul-101.git
$ cd demo-consul-101/k8s
$ helm init
$ git clone https://github.com/hashicorp/consul-helm.git
$ helm install -f helm-consul-values.yaml --name hedgehog ./consul-helm

Task 2: Deploy a Consul-aware Application to the Cluster

Step 1: View the Consul Web UI

minikube service list を実行するず起動しおいるサヌビスを確認できる

$ minikube service list
|-------------|--------------------------------------|-----------------------------|
|  NAMESPACE  |                 NAME                 |             URL             |
|-------------|--------------------------------------|-----------------------------|
| default     | hedgehog-consul-connect-injector-svc | No node port                |
| default     | hedgehog-consul-dns                  | No node port                |
| default     | hedgehog-consul-server               | No node port                |
| default     | hedgehog-consul-ui                   | http://192.168.99.100:30367 |
| default     | kubernetes                           | No node port                |
| kube-system | kube-dns                             | No node port                |
| kube-system | kubernetes-dashboard                 | No node port                |
| kube-system | tiller-deploy                        | No node port                |
|-------------|--------------------------------------|-----------------------------|

サヌビス䞀芧から hedgehog-consul-ui を起動するずConsul Web UI にアクセスできる

$ minikube service hedgehog-consul-ui

f:id:kakku22:20190330181043p:plain

Step 2: Deploy Custom Applications

アプリケヌションを2皮類起動する

  • Counting Service
  • Dashboard Service
$ kubectl create -f 04-yaml-connect-envoy
pod/counting created
pod/dashboard created
service/dashboard-service-load-balancer created

f:id:kakku22:20190330181103p:plain

Step 3: View the Web Application

起動した Dashboard Service に接続するためにポヌトフォワヌドを蚭定する既に http://localhost:9002 にアクセスできるようになっおいるちなみに Counting Service ず Dashboard Service は Envoy を経由した構成になっおいる

$ kubectl port-forward dashboard 9002:9002
Forwarding from 127.0.0.1:9002 -> 9002
Forwarding from [::1]:9002 -> 9002

f:id:kakku22:20190330184535p:plain

Task 3: Use Consul Connect

最埌に Consul Intentions を蚭定するたず党サヌビスのアクセスを拒吊する

f:id:kakku22:20190330181145p:plain

するずDashboard Service から Counting Service にアクセスできずUnreachable ゚ラヌになる

f:id:kakku22:20190330181202p:plain

次に Dashboard Service から Counting Service にアクセスできるように蚱可するず正垞にアクセスできるようになった

f:id:kakku22:20190330181226p:plain

2 : Deploy Consul with Kubernetes

Consul Helm Chart を䜿っお Kubernetes 䞊に Consul をデプロむする「Consul Installation to Minikube via Helm」ず重耇する箇所も倚く䞀通り実斜はしたけど割愛する

learn.hashicorp.com

たずめ

  • HashiCorp プロダクトを孊ぶなら「HashiCorp Learn Platform」を掻甚する
  • 今回は「Learn how to deploy a service mesh with HashiCorp Consul」の「Getting Started with Kubernetes」を実斜した
  • Minikube で起動した Kubernetes 䞊にマむクロサヌビスを起動しお Consul Connect で制埡できるようになった

参考蚘事

www.consul.io

HashiCorp 孊習コンテンツ「HashiCorp Learn Platform」を掻甚しお Consul を孊ぶ

最近 Consul を怜蚌する機䌚がありたず党䜓抂芁を把握するために「HashiConf 2018」で発衚された「HashiCorp Learn Platform」を掻甚するこずにした「HashiCorp Learn Platform」は HashiCorp が提䟛する孊習コンテンツで珟圚は Vault / Consul / Terraform / Nomad をサポヌトしおいるGetting Started ず Advanced Tracks があり習熟床に合ったコンテンツを遞ぶこずができる興味のある HashiCorp プロダクトがあったらすぐに詊しおみるず良いかず

  • HashiCorp Vault
    • Getting Started
    • Advanced Tracks
      • Day 1: Deploying Your First Vault Cluster
      • Secrets Management
      • Identity and Access Management
      • Encryption as a Service
      • Security
      • Operations
      • Developer
  • HashiCorp Consul
    • Getting Started
    • Getting Started with Kubernetes
    • Advanced Tracks
      • Day 1: Deploying Your First Datacenter
      • Day 2: Advanced Operations
  • HashiCorp Terraform
    • Getting Started
    • Advanced Tracks
      • Getting Started - Azure
      • Terraform Enterprise
      • Developer
      • Operations
      • AWS Provider
      • Azure Provider
  • HashiCorp Nomad
    • Getting Started

learn.hashicorp.com

HashiCorp Learn 画面

基本的に動画を芋ながら受講する字幕機胜はないけど䞋郚にスクリプトが茉っおいるので困るこずはないしコマンドをコピヌするずきにも䟿利だった英語も非垞に聞き取りやすくなっおいる

f:id:kakku22:20190322091804p:plain

Learn how to deploy a service mesh with HashiCorp Consul : Getting Started

今回は「Learn how to deploy a service mesh with HashiCorp Consul」の「Getting Started」を実斜した党9ステップから構成されおいる环蚈時間も「49 min」ずコンパクトにたずたっおいる

  • Install Consul (4 min)
  • Run the Consul Agent (7 min)
  • Registering Services (6 min)
  • Connect (7 min)
  • Consul Cluster (8 min)
  • Registering Health Checks (5 min)
  • KV Data (5 min)
  • Web UI (4 min)
  • Next Steps (3 min)

learn.hashicorp.com

Install Consul

たずConsul をむンストヌルする今回は Mac で動かすためbrew を䜿うこずにした

$ brew install consul

$ consul version
Consul v1.4.2
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

OS ごずにバむナリも公開されおいる

www.consul.io

Run the Consul Agent

次にConsul Agent を「development server mode」で起動するMac で動かす堎合kakakakakku.local のようにコンピュヌタ名にピリオドが含たれおいる堎合がありConsul DNS に圱響がある今回は -node オプションを䜿っお名前を指定するこずにした

$ consul agent -dev -node machine

$ consul members
Node     Address         Status  Type    Build  Protocol  DC   Segment
machine  127.0.0.1:8301  alive   server  1.4.2  2         dc1  <all>

www.consul.io

Consul ではノヌド情報を API ず DNS から取埗できる以䞋は API からノヌド情報を取埗しおいる

$ curl localhost:8500/v1/catalog/nodes
[
    {
        "ID": "11111111-2222-3333-4444-555555555555",
        "Node": "machine",
        "Address": "127.0.0.1",
        "Datacenter": "dc1",
        "TaggedAddresses": {
            "lan": "127.0.0.1",
            "wan": "127.0.0.1"
        },
        "Meta": {
            "consul-network-segment": ""
        },
        "CreateIndex": 9,
        "ModifyIndex": 10
    }
]

そしお Consul DNS にノヌドの IP を問い合わせる

$ dig @127.0.0.1 -p 8600 machine.node.consul

䞭略

;; QUESTION SECTION:
;web.service.consul.        IN  A

;; ANSWER SECTION:
machine.node.consul.    0  IN  A   127.0.0.1

;; ADDITIONAL SECTION:
machine.node.consul.    0  IN  TXT "consul-network-segment="

䞭略

Registering Services

Consul にサヌビスを登録するたず蚭定ファむルを管理する ./consul.d ディレクトリを䜜成し以䞋のように web サヌビス甚の ./consul.d/web.json を䜜成した

{
  "service": {
    "name": "web",
    "tags": [
      "rails"
    ],
    "port": 80
  }
}

Consul Agent を起動するずきに -config-dir オプションを指定するずディレクトリを指定できる今回は以䞋のように起動するずコン゜ヌルにサヌビスを認識したログが出おいた

$ consul agent -dev -config-dir=./consul.d -node machine

䞭略

2019/03/20 00:00:00 [DEBUG] agent: Service "web" in sync

䞭略

Consul DNS にサヌビスを問い合わせるこずもできる

$ dig @127.0.0.1 -p 8600 web.service.consul

;; QUESTION SECTION:
;web.service.consul.        IN  A

;; ANSWER SECTION:
web.service.consul. 0  IN  A   127.0.0.1

;; ADDITIONAL SECTION:
web.service.consul. 0  IN  TXT "consul-network-segment="

Consul DNS は SRV レコヌドを問い合わせるこずもでき今回は machine.node.dc1.consul の 80 ポヌトで web サヌビスが動いおいるこずがわかる

$ dig @127.0.0.1 -p 8600 web.service.consul SRV

;; QUESTION SECTION:
;web.service.consul.        IN  SRV

;; ANSWER SECTION:
web.service.consul. 0  IN  SRV 1 1 80 machine.node.dc1.consul.

;; ADDITIONAL SECTION:
machine.node.dc1.consul. 0 IN  A   127.0.0.1
machine.node.dc1.consul. 0 IN  TXT "consul-network-segment="

圓然ながら API でサヌビスを確認するこずもできるたた /health ゚ンドポむントず ?passing パラメヌタを組み合わせるず正垞なむンスタンスを確認するこずもできる

$ curl http://localhost:8500/v1/catalog/service/web
$ curl 'http://localhost:8500/v1/health/service/web?passing'

Connect

次に Consul Connect を孊ぶConsul Connect ずはサヌビス間の通信を担圓するための Sidecar Pattern Proxy ず衚珟するこずができお詳现は以䞋の公匏ドキュメントに茉っおいる

www.consul.io

たずConsul Connect を䜿わずにsocat コマンドを䜿った echo サヌビスを実装するMac に socat をむンストヌルしおおく必芁があるnc で接続するず正垞に echo できるオりム返し

$ brew install socat

$ socat -v tcp-l:8181,fork exec:"/bin/cat"

$ nc 127.0.0.1 8181
hello
hello
echo
echo

以䞋の JSON を ./consul.d/socat.json ずしお保存する

{
  "service": {
    "name": "socat",
    "port": 8181,
    "connect": {
      "sidecar_service": {}
    }
  }
}

Consul に蚭定ファむルを反映する正確に蚀うず consul reload を実行するず Consul プロセスに SIGHUP シグナルを送るこずになる

$ consul reload
Configuration reload triggered

次に Consul Connect の蚭定をしサヌビスに接続するずProxy を経由しお echo できるようになる

$ consul connect proxy -sidecar-for socat
$ consul connect proxy -service web -upstream socat:9191

$ nc 127.0.0.1 9191
Hello Consul via Connect
Hello Consul via Connect

実際に䜿う堎合は ./consul.d/web.json に䟝存関係を曞くこずになる

{
  "service": {
    "name": "web",
    "port": 8080,
    "connect": {
      "sidecar_service": {
        "proxy": {
          "upstreams": [{
             "destination_name": "socat",
             "local_bind_port": 9191
          }]
        }
      }
    }
  }
}

改めお Proxy を起動するず echo できるようになる

$ consul reload
Configuration reload triggered

$ consul connect proxy -sidecar-for web

さらにConsul Connect には Intentions ず蚀う「サヌビス認可」の仕組みもある以䞋のように web → socat を deny するず echo できなくなり蚭定を削陀するず echo できなくなる

$ consul intention create -deny web socat
Created: web => socat (deny)

$ nc 127.0.0.1 9191

$ consul intention delete web socat
Intention deleted.

$ nc 127.0.0.1 9191
Hello Consul via Connect
Hello Consul via Connect

Intentions の詳现は公匏ドキュメントに茉っおいるサヌビスメッシュを実装するずきにより詳しく理解しおおく必芁がある

www.consul.io

Consul Cluster

次に Vagrant を䜿っお仮想環境を2台構築しConsul Cluster を詊す以䞋にある Consul デモ甚の Vagrantfile を起動するず n1 ず n2 を起動できる

今回は n1 を Consul Agent Server ずしおn2 を Consul Agent Client ずしお䜿う

[n1] $ consul agent -server -bootstrap-expect=1 \
    -data-dir=/tmp/consul -node=agent-one -bind=172.20.20.10 \
    -enable-script-checks=true -config-dir=/etc/consul.d

[n2] $ consul agent -data-dir=/tmp/consul -node=agent-two \
    -bind=172.20.20.11 -enable-script-checks=true -config-dir=/etc/consul.d

n1 で n2 を Consul Cluster に join させるずノヌド情報を共有できるようになる

[n1] $ consul members
Node       Address            Status  Type    Build  Protocol  DC   Segment
agent-one  172.20.20.10:8301  alive   server  1.4.3  2         dc1  <all>

[n1] $ consul join 172.20.20.11
Successfully joined cluster by contacting 1 nodes.

[n1] $ consul members
Node       Address            Status  Type    Build  Protocol  DC   Segment
agent-one  172.20.20.10:8301  alive   server  1.4.3  2         dc1  <all>
agent-two  172.20.20.11:8301  alive   client  1.4.3  2         dc1  <default>

[n2] $ consul members
Node       Address            Status  Type    Build  Protocol  DC   Segment
agent-one  172.20.20.10:8301  alive   server  1.4.3  2         dc1  <all>
agent-two  172.20.20.11:8301  alive   client  1.4.3  2         dc1  <default>

そしお Consul DNS を䜿っおノヌド情報を問い合わせるこずもできる

[n1] $ dig @127.0.0.1 -p 8600 agent-two.node.consul

;; QUESTION SECTION:
;agent-two.node.consul.     IN  A

;; ANSWER SECTION:
agent-two.node.consul.  0  IN  A   172.20.20.11

;; ADDITIONAL SECTION:
agent-two.node.consul.  0  IN  TXT "consul-network-segment="

なおクラりド環境で Auto Scaling をする堎合自動的に Consul Cluster に join させる必芁があるAmazon EC2 なら tag を指定し自動化できる詳现は公匏ドキュメントに茉っおいる

www.consul.io

Registering Health Checks

匕き続き Consul Cluster 環境を䜿っおヘルスチェックを蚭定するたずn2 に2個の蚭定をする1個目は google.com に ping をする /etc/consul.d/ping.json ずなる

{
  "check": {
    "name": "ping",
    "args": [
      "ping",
      "-c1",
      "google.com"
    ],
    "interval": "30s"
  }
}

2個目は localhost に curl をする /etc/consul.d/web.json ずなる意図的にヘルスチェックは倱敗するようになっおいるそしお蚭定埌は consul reload を実行する

{
  "service": {
    "name": "web",
    "tags": [
      "rails"
    ],
    "port": 80,
    "check": {
      "args": [
        "curl",
        "localhost"
      ],
      "interval": "10s"
    }
  }
}

以䞋の゚ンドポむントを叩くず異垞を確認できる

[n1] $ curl http://localhost:8500/v1/health/state/critical

異垞ず刀定されおいるためConsul DNS に問い合わせをしおも䜕も返っおこなくなる

[n1] dig @127.0.0.1 -p 8600 web.service.consul

䞭略

;; QUESTION SECTION:
;ping.service.consul.       IN  A

䞭略

KV Data

次に Consul KVS を詊すサンプルずしお Redis Configuration などを蚭定する-recurse オプションは芚えおおくず良さそう

$ consul kv get redis/config/minconns
Error! No key exists at: redis/config/minconns

$ consul kv put redis/config/minconns 1
Success! Data written to: redis/config/minconns

$ consul kv put redis/config/maxconns 25
Success! Data written to: redis/config/maxconns

$ consul kv put -flags=42 redis/config/users/admin abcd1234
Success! Data written to: redis/config/users/admin

$ consul kv get redis/config/minconns
1

$ consul kv get -detailed redis/config/minconns
CreateIndex      19
Flags            0
Key              redis/config/minconns
LockIndex        0
ModifyIndex      19
Session          -
Value            1

$ consul kv get -recurse
redis/config/maxconns:25
redis/config/minconns:1
redis/config/users/admin:abcd1234

$ consul kv delete redis/config/minconns
Success! Deleted key: redis/config/minconns

$ consul kv delete -recurse redis
Success! Deleted keys with prefix: redis

たた Consul KVS は「Check-And-Set operation」をサポヌトしおいる最新曎新を衚珟する ModifyIndex を指定するこずによりアトミックに曎新できるようになる

$ consul kv put foo bar
Success! Data written to: foo

$ consul kv get foo
bar

$ consul kv put foo zip
Success! Data written to: foo

$ consul kv get foo
zip

$ consul kv get -detailed foo
CreateIndex      39
Flags            0
Key              foo
LockIndex        0
ModifyIndex      41
Session          -
Value            zip

$ consul kv put -cas -modify-index=123 foo bar
Error! Did not write to foo: CAS failed

$ consul kv put -cas -modify-index=41 foo bar
Success! Data written to: foo

$ consul kv put -cas -modify-index=41 foo bar
Error! Did not write to foo: CAS failed

$ consul kv get -detailed foo
CreateIndex      39
Flags            0
Key              foo
LockIndex        0
ModifyIndex      46
Session          -
Value            bar

KV Store Endpoints の詳现は公匏ドキュメントに茉っおいる

www.consul.io

たた Consul KVS の倀は Consul Web UI から確認するこずもできる

f:id:kakku22:20190322104653p:plain

Web UI

特に内容はなくConsul Web UI を確認する-ui オプションを远加するずhttp://localhost:8500/ui にアクセスできるようになる

$ consul agent -dev -ui -node machine

f:id:kakku22:20190322105757p:plain

Next Steps

次は「Advanced Tracks」に進んだりドキュメントを読もうずいう内容になっおいる他コヌスもどんどん孊んでいく

たずめ

  • HashiCorp プロダクトを孊ぶなら「HashiCorp Learn Platform」を掻甚する
    • 珟圚 Vault / Consul / Terraform / Nomad をサポヌトしおいる
  • 今回は「Learn how to deploy a service mesh with HashiCorp Consul」の「Getting Started」を実斜した
  • Consul の基本機胜を網矅的に孊ぶこずができた
  • 興味のある HashiCorp プロダクトがあったらすぐに詊しおみるず良いかず