MetabaseをAzure Web App for Containersで動かしてみた

f:id:hawa9:20180126001854p:plain

Kibanaやre:dashなどデータを良い感じに可視化してくれるツールのなかで、Metabaseもいいぞという記事に目がとまりました。

OSSのデータ可視化ツール「Metabase」が超使いやすい - Qiita

MetabaseがRedashの苦労を吹き飛ばすくらい熱い - Qiita

ということで、早速試してみたいと思います。

インストール

インストールにはいくつか方法があるようで、

https://www.metabase.com/docs/latest/operations-guide/start.html#installing-and-running-metabase

今回はDockerで試してみます。Dockerはいいぞ。

Docker

Dockerインストール済みの環境なら一撃起動です。

$ docker run -d -p 3000:3000 -v ~/metabase-data:/metabase-data -e "MB_DB_FILE=/metabase-data/metabase.db" --name metabase metabase/metabase

コンテナーが起動したら http://localhost:3000 へのアクセスします。Metabaseに必要なDBもよしなに準備してくれます。安心してください、DBデータ永続化できますよ。

AzureにMetabaseをデプロイする

ローカル環境でMetabaseが動くことが確認できました。次はサーバーにデプロイします。AzureでDockerのWebアプリを動かすといえばこれ、Web App for ContainersをMetabaseのデプロイ先にします。

Web App for Containers

Cloud Shell便利ですね。

  1. リソースグループ作成
  2. Linux App Seriveプラン作成
  3. Web App for Container作成
$ az group create --name <resource-group> --location japaneast
$ az appservice plan create --name <plan-name> --resource-group <resource-group> --sku B1 --is-linux
$ az webapp create --resource-group <resource-group> --plan <plan-name> --name <webapp-name> --deployment-container-image-name metabase/metabase

次にWeb Appsへアプリケーション設定を行います。

  • DBデータを永続化したいので、Web Appsへ永続化を指定します。WEBSITES_ENABLE_APP_SERVICE_STORAGE=trueにして、/home配下をマウントします。
  • Metabaseイメージはポート3000を使用するので、WEBSITES_PORTでWeb Appsへ使用するポートを指定します。
$ az webapp config appsettings set --resource-group <resource-group> --name <webapp-name> --setting WEBSITES_ENABLE_APP_SERVICE_STORAGE=true MB_DB_FILE=/home/metabase-data/metabase.db WEBSITES_PORT=3000 

https://<webapp-name>.azurewebsites.net へのアクセスします。




アクセスできない(泣)

f:id:hawa9:20180126000508p:plain

App ServiceプランをB1とケチったせいですね。とりあえず札束で殴ってみます。

$ az appservice plan update --resource-group <resource-group> --name <plan-name> --sku S3

再度 https://<webapp-name>.azurewebsites.net へのアクセスを試みます。

f:id:hawa9:20180126000454p:plain

起動しました。

DBを外部参照へ変更

札束効果(スケールアップ)によりアクセスできるようになりましたが、お試しにしては懐に優しくない・・・。パフォーマンス改善のためMetabaseがローカルに持つDBを外部委託してみます。MetadabaはPostgresSQLが利用できるようなので、Azure Database for PostgresSQLに外部委託します。

Azure Database for PostgresSQL

Azure Database for PostgresSQLを作成します。

$ az postgres server create --resource-group <resource-group> --name <postgres-name> --admin-user <user> --admin-password <password> --performance-tier Basic --compute-units 50 --storage-size 51200 --version 9.6

次にAzure Database for PostgresSQLのファイアウォールを設定します。ファイアウォールにはWeb AppsのIPアドレスを指定したいのですが、Web AppsからOut方向のIPアドレスは固定できない?ようなので、今回は全解放で設定します(ご利用は計画的に)。

$ az postgres server firewall-rule create --resource-group <resource-group> --server <postgres-name> --name AllowAllIps --start-ip-address 0.0.0.0 --end-ip-address 255.255.255.255

構築したDBへpsqlやpgAdmin等で接続して、Metabase用のロールmetabaseとデータベースmetabaseを追加します。

key value
DBホスト <postgres-name>.postgres.database.azure.com
DBユーザー名 <user>@<postgres-name>
DBパスワード <password>

〜PostgresSQLへの追加手順省略〜

DB周りの作業が終わったのでMetabaseのDBをAzure Database for PostgresSQLへ変更します。

  1. マウント設定MB_DB_FILEを削除
  2. 接続文字列MB_DB_CONNECTION_URIを設定

PostgresSQLへSSL接続をするには、MB_DB_CONNECTION_URIで指定する必要があるようです。

Connecting to postgres metabase db over ssl · Issue #3296 · metabase/metabase · GitHub

$ az webapp config appsettings delete --resource-group <resource-group> --name <webapp-name> --setting-names MB_DB_FILE
$ az webapp config appsettings set --resource-group <resource-group> --name <webapp-name> --settings "MB_DB_CONNECTION_URI=postgresql://<postgres-name>.postgres.database.azure.com:5432/metabase?user=<user>@<postgres-name>&password=<password>&ssl=true"

https://<webapp-name>.azurewebsites.net へのアクセスできれば完了。

App Serviceプランを元に戻してみます。

$ az appservice plan update --resource-group <resource-group> --name <plan-name> --sku B1

f:id:hawa9:20180126000440p:plain

メモリ不足感はありますが、動いてくれてるのでOKとしましょう。

いくら?

実際Metabaseを構築するとしてもステージング環境などの空いてる所にMetabaseを同居させたりして、Metabase専用を作る機会は少なそう。

  • Web Apps S3サイズで約¥38,696/月
  • Web Apps B1サイズ + Azure Database for PostgresSQL Basicサイズで約¥9,821/月

Azure Database for PostgresSQLと組み合わせた方が安く上げられました。構築や運用の手間(コスト)、その辺を全部丸投げできるPaaSは楽ちんですね( ˘ω˘)

それではよい、Metabaseライフを。

Azureテクノロジ入門 2018

Azureテクノロジ入門 2018

Tech Summit 2017に参加 #mstsjp17

ハンズオンスピーカーとして参加した去年に続き2回目のTech Summitに参加。今回はイチ参加者として。

f:id:hawa9:20171112233455j:plain

Microsoft Tech Summit 2017 | インフラエンジニア、アーキテクト、IT 戦略立案に関わる皆様の為の技術カンファレンス - Microsoft Events & Seminars

場所はクリスマスイルミネーションの綺麗な恵比寿。

f:id:hawa9:20171112233518j:plain

Day1

KEY001 変化のとき、進化のとき ITイノベーションがもたらす価値

エクストリーム参加で途中から。マクロな観点ではDrewさんのTシャツがすてきだった。量子コンピュータの壮大さはなるほどわからん(誰か)。

SPL003 Women in Business & Technology Networking Lunch Session

話もスイーツも美味しかった。

SEL002 セキュリティ マニアックスでおます~コネクテッド カー時代に活かす IT サイバー セキュリティ~

ITでは過去にたくさんのハッキングに対応してきた知識は車業界でも必要でその逆もあるよ、とのこと。

twitter.com

SEL005 ネットワーク エンジニア必見!VPN/DMZ は要らなくなる!? Azure AD Application Proxy で実現するセキュアなアクセス

本当にこうなってた。WinServerがあれば可能。セッションでは社内ネットワークとの接続についてだったけど、AzureのVNET内でもできるのかな?出来るのであればVNETの一機能となってサーバーいらずになると、もっと便利になりそう。

twitter.com

CLD008 もう迷わない! Azure Virtual Network の使い方。

新しい機能のAZとかASGの知見を得た。VNETにRFC1918以外も使えるのは知らなかった(使い道わかんない)。

twitter.com

Day2

CLD014 Azure Big Compute (HPC) で実現する爆速分析環境を実業務で利用するために

HPC環境が10分ぐらいで手に入るのは凄い。欲しい環境を好きなサブスクリプションで使えるようなSaaSを提供するってのはいろいろと理にかなってるなぁ。

twitter.com

SEC008 クラウド利用時のセキュリティ環境構築術!!~IaaS メインにそっと PaaS を添えて~

エクセルの埋め方、同じようにやっていたので「アリなんだ」と思えて一安心。環境構築術の部分ももっと聞きたかった。

twitter.com

APP002 コンテナーなに使ってますか? Linux ですか? Windows も使ってもらっていいですか?

普段はLinuxコンテナなので使ったことのないWindowsコンテナの話はとても貴重だった。

twitter.com

DEP007 新しく生まれ変わった Azure Log Analytics と Azure Security Center によるITインフラの分析と保護

この話もレア。いつかのアンケートでこの辺について聞きたいと書いたのでそれを汲み取ってくれたのか定かではないが嬉しい。もっと使いこなしたい。

twitter.com

APP003 Azure Functions と Serverless - 概要と企業向け Tips

これ以外にないんだけど、そう思ってない多い問題。

twitter.com

DEP006 Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~

PowerShellほとんど触ったことなかったけど、触ってみようかな。出来る幅が増えそう。

twitter.com

DEP005 インフラ野郎 Azure チーム コンテナー祭 ~Inside Container Infrastructure on Azure~

濃い情報祭りすぎて頭から煙でた。さすがのレベル400だった。読む試す書くをもっと磨いていきたい。

twitter.com

その他

内容的にも気になるし、そのうえ勉強できて寄付できるんだからすごい。

Hit Refresh(ヒット リフレッシュ) マイクロソフト再興とテクノロジーの未来

Hit Refresh(ヒット リフレッシュ) マイクロソフト再興とテクノロジーの未来

JAZUG福岡(ふくあず) de:code 2017 振り返り会に登壇 #jazug #fukuazu

f:id:hawa9:20170626173953j:plain

fukuazu.connpass.com

de:code 2017 受講セッション

まずは、自分の振り返り。今年はセキュリティ、DevOps、インフラ系のセッションに潜入していた。自分はインフラ屋なのでインフラ系が多めと思いきや、セキュリティセッションも多く取っていた。

セッション
SC12 あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法
SC04 あなたのサービスを “ID” で守る! Azure Active Directory の条件付きアクセスの基礎と実装
DO04 アジャイル開発サバイバルガイド 〜キミが必ず直面する課題と乗り越え方を伝えよう!〜
SC01 DevSecOps on Azure : セキュリティ問題に迅速に対応するためのパイプライン設計
DI13 ダウンタイムを最小に! ~ Azure における障害/災害に耐えうるアーキテクチャ設計のポイント ~
TL09 突撃! 隣の Visual Studio Team Services / Team Foundation Server ~利用者からのベストプラクティス
TL05 本場エバンジェリストのデモを堪能!コマンドラインだけで Azure アプリケーションをビルド・デプロイ・管理する
DO05 システムの信頼性を上げるための新しい考え方 SRE ( Site Reliability Engineering ) in Azure, on Azure
TL10 Azure IaaS 構築・運用・管理の専門家が語る DevTest Labs ~高速・費用無駄ナシ・簡単管理を実現する開発・テスト環境の構築~
DI01 窓は開かれた! SQL Server on Linux で拡がる可能性

ふくあず登壇

speakerdeck.com

資料の内容はゼロです。セッション時間全てデモさせてもらいました。

  • Azure CLI 2.0について
    • インストー
    • Dockerで使う。Aliasを設定してカジュアルに使う。
    • az login / az configure
  • jsonで便利なやつ
    • jq
    • jpterm(JMESPath)
  • Azure Cloud Shellでデモ
  • iPhoneのAzureアプリでAzure Cloud Shell

なお、このセッションはde:code 2017でのDrewさんの影響を強く強く(大切なことなので2回)受けております。

channel9.msdn.com

Global Azure Bootcamp 2017@TokyoとJAWS-UG福岡のダブルヘッダー #jawsug #jazug

f:id:hawa9:20170423092330j:plain

鉄は熱いうちに打て。ブログ書くまでが勉強会ということでさっそく。

Global Azure Bootcamp 2017@Tokyo #jazug

今まで福岡JAZUG(ふくあず)のイベントに参加したことはありましたが、JAZUGイベントで登壇したことがありません。ですので今回が記念すべき初JAZUG登壇となりました。 オープニングトークを聞くまでGlobal Azure Bootcampがどういイベントなのかもあまり知らなかったという・・・

jazug.connpass.com

togetter.com

今回はAzure事例セッションということで.Net Core+Dockerの事例MySauceFactory(マイソースファクトリー)についてMLBお兄さん (@tsubakimoto_s) | Twitterとペアセッションとなりました。ペアで話すのも初めての経験。

この3つについてインフラを中心にお話させていただきました。今回はAzureのイベントでしたので.Net Coreについては別の機会でDev Teamがやってくれると思います。

まだまだDockerを本番運用されているのは少数派。Docker運用事例としてお役立てできれば幸いです。なお、コーポレートサイト株式会社オルターブース(Alterbooth) | Microsoft AzureやAWSを中心としたクラウドの導入・開発・システム運用の方もDockerで運用中です。

QA

いくつかご質問いただいたので覚えている限り補足しつつご紹介致します。

  • コンテナの.Net Coreのログをどのように収集しているか?

    • .Net Coreはログを標準出力しています。あとはDockerのFluend Logging Driversで集めています。
  • ACSVM側のパッケージアップデートはどうしているか?

    • 必要ならACSを作り直して対応します。Dockerは新しい技術ですぐに陳腐化してしまう(放っておくと技術的負債になる)。作り直しが簡単なのもクラウドのメリット。現在はSwarmですがDC/OS、Kubernetesも含めて検討しています。
  • Dockerは落ちると聞くが遭遇したことは?

    • 私も聞いたことあります。(運がいいのか)いままで遭遇したことがありません。OMSで監視しているので落ちても検知できる仕組みにはしています。コンテナも冗長構成にしているので同時に落ちることは考え難く、落ちてもサービスを継続できる仕組み(予防)にしています。この辺、Apacheとかも落ちる時は落ちるのでDockerに限った話でもないのかなーと思っています。

de:code 2017

去年に続き、今年も参加予定です。会場で目に入ったら気軽にお声がけしていただけるとうれしいです。

最後に

タイトルを改めたいです。本当にありがとうございました。

JAWS-UG福岡 #jawsug

さて、同時刻に地元福岡でJAWS-UGが開催されていました。

JAWS-UG福岡:Reboot#4、荒木さんとAWSの話をしてみたりJAWS DAYS参加者から話をきいてみたりしよう - JAWS-UG九州 | Doorkeeper

Global Azure Bootcamp参加中の身でしたがセッション休憩時間に品川と福岡を結んでのオンライン登壇(余興)を実行。オンラインミーティングツールとして最近発表された新サービスのAmazon Chimeを使ってみました。

Amazon Chime – 統合されたコミュニケーションサービス | Amazon Web Services ブログ

画面共有もしっかりと見え、音声、ビデオもクリアにお届け出来たようです。

なお、なぜお酒を呑んでいると思われたのか謎です。戻ったら真相を伺いにチャイムを鳴らしに行きます。

Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス

Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス

Ansible徹底入門 クラウド時代の新しい構成管理の実現

Ansible徹底入門 クラウド時代の新しい構成管理の実現

Azure ARMでTerraformを使うときの認証情報をGUIで取得する #azurejp #jazug

Azure ARMをTerraformで操作したいけど、Terraformで使うAzure認証に挫折した勢です。

TerraformでAzureを操作するにはAzure Providerの設定が必要になります。

# Configure the Microsoft Azure Provider
provider "azurerm" {
  subscription_id = "..."
  client_id       = "..."
  client_secret   = "..."
  tenant_id       = "..."
}

何を設定すればいいのかわかんない。。。(´д`)

状態だった私はこの記事に救われ、無事Azure認証難民から解放されました。謝謝。

TerraformをAzure ARMで使う時の認証 · re-imagine

Azure CLIでゴニョゴニョすればAzure Provider設定に必要な値は取得できます。 でも、認証情報ぐらいならGUIで・・・、これからTerraformをつかってコードでインフラ管理するのにGUIとか甘え( 

という声も聞こえそうですが、ゆるーくインフラ管理したいのでAzure Providerに必要な値をAzureポータル(GUI)から取得してみます。

Azureポータル

まずはAzureポータルにログインします。

Microsoft Azure

ログイン後、「Azure AD」を開きます。 f:id:hawa9:20170319141452p:plain

「アプリの登録」を開きます。 f:id:hawa9:20170319142524p:plain

「追加」を開き、必要な項目を設定して「OK」。 f:id:hawa9:20170319141950p:plain

項目
名前 登録するアプリの名前
アプリケーションの種類 Webアプリ/API
サインオンURL ユニークなURL(存在の有無は問いません)

追加できました。このアプリケーションIDが client_id になります。 f:id:hawa9:20170319143004p:plain

追加したアプリにアクセス許可の設定をします。 f:id:hawa9:20170320172319p:plain

許可するAPIWindows Azure Service Managerment API」を選択します。 f:id:hawa9:20170319144026p:plain

アクセス許可「Access Azure Service Management as organization users (preview)」を選択します。 f:id:hawa9:20170319144308p:plain

次にキーを取得します。名前と有効期間を入力します。 f:id:hawa9:20170320165938p:plain

保存するとキーを取得できます。この値が client_secret になります。 f:id:hawa9:20170320170046p:plain

次にAzure ADの「プロパティ」を開きます。このディレクトリIDが tenant_id になります。 f:id:hawa9:20170320171347p:plain

最後にサブスクリプションを開きます。このサブスクリプションIDが subscription_id になります。 f:id:hawa9:20170320171935p:plain

以上でAzure Providerの設定に必要な情報は揃いました。完了までもうひと踏ん張りです。

サブスクリプションの「アクセス制御(IAM)」を開きます。 f:id:hawa9:20170320172809p:plain

「追加」からサブスクリプションにユーザーを追加します。今回の役割は共同作成者を付与します。(権限設定は慎重に) f:id:hawa9:20170320173126p:plain

ユーザーには先ほどのアプリ登録で追加したアプリを選択します。 f:id:hawa9:20170320173651p:plain

追加できました。 f:id:hawa9:20170320173914p:plain

AzureポータルからAzure ARMでTerraformを使うときの設定が完了しました。やはりAzure CLIで取得する方法が楽ですね。

こちらからは以上です。

大宰府天満宮に梅を見に行ってきた

先週末に太宰府天満宮に梅を見に行ってきました。梅シーズンも終わりかけでしたが咲いてる梅もあり楽しめました。

DSC00054.jpg

太宰府天満宮

福岡の人気観光スポットだけあって人の多さはトップクラス。さらに梅酒祭りと重なっていて多かったのかも。

参道 DSC00005.jpg

参拝行列 DSC00007.jpg

境内の梅

DSC00019.jpg

DSC00017.jpg

DSC08629.jpg

カレーは飲み物

グリーンカレーおいしかった。また食べたい。

DSC00045.jpg

DSC08646.jpg

観世音寺

DSC08653.jpg

日本最古の梵鐘 DSC00059.jpg

戒壇

出家者が戒律を授けるために設置された施設。天下三戒壇の一つ。

DSC00072.jpg

DSC00073.jpg

日吉神社

DSC00076.jpg

DSC00087.jpg

Fukuoka.NET #5 LT資料 #fukuten

2017年最初のふくてんこと、Fukuoka.Net勉強会に参加してLTしてきました。 さっそく、本編については弊社同僚のまとめをご覧ください(丸投げ

空前絶後のォォ!超絶怒濤のAnsible

speakerdeck.com

タイトルは言ってみたかっただけです。。。しかも噛むという失態\(^o^)/オワタ このLTで少しでもAnsibleに興味を持って頂けたら幸いです。

Ansible徹底入門 クラウド時代の新しい構成管理の実現

Ansible徹底入門 クラウド時代の新しい構成管理の実現