KEDA 1.0.0がリリースされました!

最近注目しているKEDA(Kubernetes-based Event Driven Autoscaling)の1.0.0リリースされました!

keda.sh

アップデート内容としては、以下となります。

  • スケーラーの追加 →External(外部スケーラー)、NATS Streamingの2つが追加
  • スケーラーの拡張性
    →別のコンテナでスケーラーを実行し、gRPCを介してKEDAと通信する
  • IDベースの認証用のTriggerAuthenticationとPod Identityがデプロイメント間で共有できるようになった
  • デプロイメントのスケールアウトに加えて、イベントでジョブをスケジュールする
  • GitHubアクションにおける追加のテストと自動化

KEDAについてはServerlessDays Fukuoka 2019でお話させていただく予定です。
注目しているプロダクトが進化していくのは嬉しいですね!
(少しでもコミットできればと思っています。。。

fukuoka.serverlessdays.io

macOS Catalinaで起動できなくなった話

ネットワーク不調でインターネットに繋がらなくなり、再起動をかけたら起動できず、再インストールをしようとしたらエラーとなり、さらにクリーンインストールしようとするとディスクのフォーマットに失敗するという、何か久々に引いてしまった感のある状況になったので備忘録的に記します。

まず、フォーマット失敗した時点であー。。。な感じでしたが、一度電源をオフして再度フォーマットをかけると成功。
再インストールを実行して再起動がかかる。
そうするとセットアップ用のイメージが壊れていたのかQuestion mark付きのフォルダが表示された。

f:id:tsukatoh:20191109200008j:plain

意味としては起動できるディスクがないとのことで、再度電源を停止。
command+Rで起動させるとInternet Recoveryが始まり地球儀のような画面が出た。

f:id:tsukatoh:20191109200021j:plain

で、ここで問題が発生。

apple.com/support  
-1008F  

と表示される。
原因はiCloudmacを探すが有効になっているために起きるエラーらしい。
別の端末からiCloudへログインし、対象のデバイスを削除してから再度トライ。
無事インストールが進み、クリーンインストール完了。

不調が嘘のように動きが良くなった。
やはり定期的にクリーンインストールはしたほうが無難なのかもしれない。

macOS CatalinaでAppに未署名のアプリケーションを開く方法

macOS Catalinaでセキュリティ関係が強化されています。
そのため、開発元がAppに署名をしていないものについてはデフォルトの設定では開くことができません。
設定からセキュリティとプライバシーを開いても以下のようになっており、以前のように「すべてのアプリケーションを許可」の項目すら表示されていません。

f:id:tsukatoh:20191109184743p:plain

で、どうすればいいかというと、「すべてのアプリケーションを許可」に設定変更するコマンドを発行します。
これはCatalinaからのコマンドではなく、Sierra辺りからあったと思います。
以下のようにターミナルで実行します。

sudo spctl --master-disable

これを実行することで「すべてのアプリケーションを許可」が有効になり、未署名のアプリケーションも起動できるようになります。
セキュリティとプライバシーは以下のような状態になっていると思います。

f:id:tsukatoh:20191109185239p:plain

他にはx64以外は動作しないなど色々と制限が入ってきていますので、使うアプリケーションの見直しやアップデートを待つというのも選択肢の一つでしょうね。

Azure BastionがGAされました

Azure BastionがMicrosoft IgniteでGA (General Availability)の発表がありました。
VMを使っている方は嬉しい発表ではないでしょうか?

Azure Bastion

利用している仮想ネットワーク内でプロビジョニングするフルマネージドなbastion serviceで、Azure portal内で直接SSLを経由して仮想マシンへのシームレスな接続を提供されます。
サポートプロトコルはRDP、SSHで、Azure Bastion経由で接続する場合、仮想マシンにパブリックIPアドレスは不要となります。
追加のクライアント、エージェント、ソフトウェアも不要といったサービスです。

ブラウザとAzureアカウントさえあれば使えるので、作業用のPCがないとアクセスできない!とかいうことから開放されますね。

デプロイ方法

AzureのMarketplaceからBastionを検索して追加します。
f:id:tsukatoh:20191105165952p:plain 作成を押します。
f:id:tsukatoh:20191105170006p:plain 必要事項を入力していきます。
f:id:tsukatoh:20191105170022p:plain

名称等を入れるブレードのところで注意が必要です。 まず、専用サブネットが必要になります。
デプロイ先の仮想ネットワークのアドレス空間の空きを確認し、AzureBastionSubnetという名称でサブネットを追加します。
サブネットの範囲は27ビットマスク以上の範囲が必要になります。

出来上がったら仮想マシンの接続からBastionを選択してアクセスします。
f:id:tsukatoh:20191105170903p:plain

2019/11/05現在は以下リージョンのみで使用可能です。

  • Australia East
  • East US
  • Japan East
  • South Central US
  • West Europe
  • West US

難しいことはあまりありませんが、サブネット名等の注意は必要ですね。
良い踏み台ライフを。

IoT Algyan ReButton+IoT Central体験ハンズオンへ参加してきました

10/26(土)午後から熊本は未来会議室にてIoT ALGYAN主催の「ReButton+IoT Central体験ハンズオン」へ参加してきました。

同じ会社の同僚が福岡の主幹をやっているということと、熊本の主幹の方がお知り合いだったということもありの潜入でした。

 

まずオープニングは小暮さんからのご挨拶で始まり、Microsoft社の太田さんからのAzure IoT Centralの紹介、そして(忘れていたような)会場スポンサーの宮本さんからのLTがあり、熊本の主幹である及川さんから軽い説明の後のハンズオン開始となりました。

 

Seeed社製のReButtonを配布され、まずは初期化から。

いただいたのは限定カラーとのことでAzureカラーでした。

(当日写真を失念したので後日撮りました。。。)

f:id:tsukatoh:20191027160240j:plain

 

次にIoT Centralのポータルでアプリケーションを作成。

ReButtonをWifiに接続してIoT Centralへ接続する設定をしていきます。

 

設定が終わったらボタンを押して通知のテストをします。

シングルクリックは問題なくできたので、ダブルクリック、トリプルクリック、ロングプレス、スーパーロングプレス、ウルトラロングプレスの設定をしていきます。

ここでプチ問題が発生。

普通にダブルクリック(トリプルも)しても反応しません。

少し長押ししてからの操作で実行可能になるようで、最初3〜4秒押した上でのダブルクリックで反応してくれました。

 

SMSへのアラート通知も問題なく設定が終わったので、Functionsの作成です。

 

コードを作成し、Function AppをデプロイしてIoT CentralのポータルからFunctionsへWebhookを投げるよう設定します。

ボタンを押すとFunctionsが実行されますね。

自分はやらなかったですが、FunctionsからREST APIを叩いてパトランプを回すというところまでが今回の最終目標でした。

 

自分はFunctionsが終わった後、IoT Centralからデータのエクスポートができると松岡さんから聞いてしまったのでボタンの操作したデータをJSONデータとしてBLOBストレージへ出力し、どのようなデータが出力されているかなどを見ていました。

 

自分自身IoT Centralは初めて触ったので触るいい機会となりました。

途中から脱線してJSONデータのエクスポートとかやってましたが他の参加された方へのサポートもしつつ楽しめました。

 

皆さん気さくで楽しい会でした。

また2月に開催予定とのことで、都合が合えば参加したいと思います!

 

algyan.connpass.com

KEDA+AKSでk8s上にFaaSを構築する

5月に発表されたKEDA(Kubernetes-based Event-driven Autoscaling)ですが、AKS(Azure Kubernetes Service)の上でサーバーレス のイベントドリブンコンテナーをサポートするものとしてオープンソースMicrosoftRedHatが共同で発表しました。

KubernetesのスケーリングはコンテナのCPUとメモリ消費率に関連付けされていますが、KEDAを使う事でAzure FunctionsなどのFaaSと同様にイベントに応じたリソースのプロビジョニングやスケーリングをする事が可能になります。 

現状(2019/9/30現在)サポートされているイベントソースとスケーラーは以下になります。

  • AWS CloudWatch
  • AWS Simple Queue Service
  • Azure Event Hub†
  • Azure Service Bus Queues and Topics
  • Azure Storage Queues
  • GCP PubSub
  • Kafka
  • Liiklus
  • Prometheus
  • RabbitMQ
  • Redis Lists

詳細などはGitHubや発表時のブログを参照してください。

cloudblogs.microsoft.com

github.com

実際に動かしてみる

AKSの構築

いずれかの方法でAKSを構築します。

docs.microsoft.com

docs.microsoft.com

 

KEDAのインストール

Kubernetesクラスターにhelmをインストール

helm init

Helm repoの作成

helm repo add kedacore https://kedacore.azureedge.net/helm

 Helm repoの更新

helm repo update

keda-edge chartのインストール

helm install kedacore/keda-edge --devel --set logLevel=debug --namespace keda --name keda

Azure Functions Core Toolsのインストール

func kubernetes install --namespace keda

 

ストレージの作成

キュートリガーで動くよう作るのでストレージアカウントとキューを作成

docs.microsoft.com

docs.microsoft.com

アプリケーションの作成

作業ディレクトリの作成

mkdir kedaapp & cd kedaapp

ディレクトリの初期化

optionはnode→javascriptを選択

func init . --docker

f:id:tsukatoh:20190930175434p:plain

Queueトリガーの作成

Azure Queue Storage triggerを選択

名称は適宜変更

func new

f:id:tsukatoh:20190930175542p:plain

 function.jsonの「queueName」をStorage Queueのキュー名と合わせる

{
  "bindings": [
    {
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "js-queue-items",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

local.settings.jsonのAzureWebJobsStorageへ作成したStorage accountのAccess keysよりConnection stringをコピーする(key1,key2どちらでもよい)

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=mystorageaccount;AccountKey=keykey==="
  }
}

 

KEDAへアプリケーションのデプロイ

コマンドにてdocker hubへプッシュし、Kubernetesへデプロイする

func kubernetes deploy --name kedaqueue --registry <docker-user-id>

 

 動作確認

リソースが作成されていることを確認する

f:id:tsukatoh:20190930182038p:plain

キューをポータルより作成し、Podが自動的に起動するのを確認する

f:id:tsukatoh:20190930182805p:plain
上記のように処理が完了してしばらくするとTerminatingされます

 

最後に

まだベータ版で開発中です。

今後CosmosDBやAzure Monitor、IoT Hubなどの連携も予定されているので今後がたのしみなプロダクトですね!

docs.microsoft.com

 

macからAzure Cache for Redisへredis-cliにて接続する

やろうとしてちょっと困ったので備忘録的に。
Azure Cache for RedisはデフォルトでNon-SSL portがdisabledになっており、本番運用としてもNon-SSL portをenableにして使うことはないと思います。

でも格納されているデータをAzure PortalのConsoleから利用しようとすると使い勝手が悪い。。。手元のterminalで操作してデータを取りたい。ということでmacから接続する方法です。

Windowsで接続する方法は以下ドキュメントがありますのでそちらを参照してください。

docs.microsoft.com

redis-clissl対応されていないためstunnelでSSLトンネリングして接続します。

homebreのインストール

まずhomebrewをインストールします。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

redisのインストール

次にredisのインストール

$ brew install redis

stunnelのインストールとstunnel.confの編集

stunnelをインストールし、コンフィグを作成する。

$ brew install stunnel
$ vi /usr/local/etc/stunnel/stunnel.conf

stunnel.confの内容は以下のようにする。(example部分は自リソースで置き換える)

[redis-cli]
client = yes
accept = 127.0.0.1:6379
connect = example.redis.cache.windows.net:6380

接続

準備が終わったら接続です。

$ redis-server &
$ stunnel
$ redis-cli -h localhost --raw
127.0.0.1:6379> auth {access key}
OK

rawオプションをつけているのは2バイト文字の文字化け対応です。