Azure Active Directory Domain Services を PowerShell で構築する

Azure Active Directory Domain Services (Azure AD DS または AADDS)

AADDSって構築後にDNSの設定をしないとドメイン参加できないので、構築後のAADDSリソースの概要をAzure Portalから見るとDNSを構成するボタンが表示されています。
今回、それをPowerShellでやる場合のメモです。

そもそもとしてのAzure AD DS の構築方法としては以下があります。

  • Azure Portal で構築する
  • Azure PowerShell で構築する
  • Azure Resource Manager (ARM) で構築する

Azure Portal で構築する

docs.microsoft.com

PowerShell での構築方法

docs.microsoft.com

ARM テンプレートでの構築方法

docs.microsoft.com

今回は2つ目のPowerShellで構築していたのですがAADDS構築後に通常だとAzure Portalから操作する部分があり、そこも自動化したくて考慮点を調べました。

考慮点

  • Custom DNS をVNetへ設定しなければならない
  • Network Security Group をSubnetへ設定しなければならない

AADDS構築後に以下の画像のようにDNS構成をするボタンが概要ページに出てきますが、ここでカスタムDNSNSGの設定をしてくれています。 f:id:tsukatoh:20200427174330p:plain

PowerShell での追加設定の仕方

Custmom DNS をVNetへ設定する

  1. 既存の構築用に使ったNew-AzVirtualNetworkの最後尾にDnsServerを追加して適用する。

【構築時のコマンド】

PS> $VNet = New-AzVirtualNetwork `
      -ResourceGroupName <ResourceGroupName> `
      -Location <AzureLocation> `
      -Name <VNetName> `
      -AddressPrefix 0.0.0.0/0 `
      -Subnet <SubnetName>
PS> $VNet | Set-AzVirtualNetwork

【適用するコマンド】

PS> $VNet = New-AzVirtualNetwork `
      -ResourceGroupName <ResourceGroupName> `
      -Location <AzureLocation> `
      -Name <VNetName> `
      -AddressPrefix 0.0.0.0/0 `
      -Subnet <SubnetName> `
      -DnsServer 0.0.0.4,0.0.0.5
PS> $VNet | Set-AzVirtualNetwork

上記設定まで完了すると以下のように変化します。 NSGを設定しろ的な感じですね。 f:id:tsukatoh:20200427174421p:plain

Network Security Group (NSG) をSubnetへ設定する

  • VNetの情報取得
PS> $VNet = Get-AzVirtualNetwork -Name <VNetName> -ResourceGroupName <ResourceGroupName>
  • サブネットの情報取得
PS> $Subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $VNet -Name <SubnetName>
  • Network Security Group (NSG) の情報取得
PS> $Nsg = Get-Az NetworkSecurityGroup -ResourceGroupName <ResourceGroupName> -Name <NSGName>
  • Subnetへ適用するNSGのコンフィグ設定
PS> $Subnet.NetworkSecurityGroup = $Nsg
  • VNetへのコンフィグ適用
PS> Set-AzVirtualNetwork -VirtualNetwork $VNet

まとめると以下になります。

PS> $VNet = Get-AzVirtualNetwork -Name <VNetName> -ResourceGroupName <ResourceGroupName>
PS> $Subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $VNet -Name <SubnetName>
PS> $Nsg = Get-Az NetworkSecurityGroup -ResourceGroupName <ResourceGroupName> -Name <NSGName>
PS> $Subnet.NetworkSecurityGroup = $Nsg
PS> Set-AzVirtualNetwork -VirtualNetwork $VNet

完了するとPortalのボタンで設定したものと同じようになります。 f:id:tsukatoh:20200427174502p:plain

上記で問題なくドメイン参加まで行けましたので、PowerShellで全部組みたい方(少数派デスヨネ)に参考になれば。

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