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 で構築する
PowerShell での構築方法
ARM テンプレートでの構築方法
今回は2つ目のPowerShellで構築していたのですがAADDS構築後に通常だとAzure Portalから操作する部分があり、そこも自動化したくて考慮点を調べました。
考慮点
- Custom DNS をVNetへ設定しなければならない
- Network Security Group をSubnetへ設定しなければならない
AADDS構築後に以下の画像のようにDNS構成をするボタンが概要ページに出てきますが、ここでカスタムDNSやNSGの設定をしてくれています。
PowerShell での追加設定の仕方
Custmom DNS をVNetへ設定する
- 既存の構築用に使った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を設定しろ的な感じですね。
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のボタンで設定したものと同じようになります。
上記で問題なくドメイン参加まで行けましたので、PowerShellで全部組みたい方(少数派デスヨネ)に参考になれば。
KEDA 1.0.0がリリースされました!
最近注目しているKEDA(Kubernetes-based Event Driven Autoscaling)の1.0.0リリースされました!
アップデート内容としては、以下となります。
- スケーラーの追加 →External(外部スケーラー)、NATS Streamingの2つが追加
- スケーラーの拡張性
→別のコンテナでスケーラーを実行し、gRPCを介してKEDAと通信する - IDベースの認証用のTriggerAuthenticationとPod Identityがデプロイメント間で共有できるようになった
- デプロイメントのスケールアウトに加えて、イベントでジョブをスケジュールする
- GitHubアクションにおける追加のテストと自動化
KEDAについてはServerlessDays Fukuoka 2019でお話させていただく予定です。
注目しているプロダクトが進化していくのは嬉しいですね!
(少しでもコミットできればと思っています。。。
macOS Catalinaで起動できなくなった話
ネットワーク不調でインターネットに繋がらなくなり、再起動をかけたら起動できず、再インストールをしようとしたらエラーとなり、さらにクリーンインストールしようとするとディスクのフォーマットに失敗するという、何か久々に引いてしまった感のある状況になったので備忘録的に記します。
まず、フォーマット失敗した時点であー。。。な感じでしたが、一度電源をオフして再度フォーマットをかけると成功。
再インストールを実行して再起動がかかる。
そうするとセットアップ用のイメージが壊れていたのかQuestion mark付きのフォルダが表示された。
意味としては起動できるディスクがないとのことで、再度電源を停止。
command+Rで起動させるとInternet Recoveryが始まり地球儀のような画面が出た。
で、ここで問題が発生。
apple.com/support -1008F
と表示される。
原因はiCloudでmacを探すが有効になっているために起きるエラーらしい。
別の端末からiCloudへログインし、対象のデバイスを削除してから再度トライ。
無事インストールが進み、クリーンインストール完了。
不調が嘘のように動きが良くなった。
やはり定期的にクリーンインストールはしたほうが無難なのかもしれない。
macOS CatalinaでAppに未署名のアプリケーションを開く方法
macOS Catalinaでセキュリティ関係が強化されています。
そのため、開発元がAppに署名をしていないものについてはデフォルトの設定では開くことができません。
設定からセキュリティとプライバシーを開いても以下のようになっており、以前のように「すべてのアプリケーションを許可」の項目すら表示されていません。
で、どうすればいいかというと、「すべてのアプリケーションを許可」に設定変更するコマンドを発行します。
これはCatalinaからのコマンドではなく、Sierra辺りからあったと思います。
以下のようにターミナルで実行します。
sudo spctl --master-disable
これを実行することで「すべてのアプリケーションを許可」が有効になり、未署名のアプリケーションも起動できるようになります。
セキュリティとプライバシーは以下のような状態になっていると思います。
他には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を検索して追加します。
作成を押します。
必要事項を入力していきます。
名称等を入れるブレードのところで注意が必要です。
まず、専用サブネットが必要になります。
デプロイ先の仮想ネットワークのアドレス空間の空きを確認し、AzureBastionSubnetという名称でサブネットを追加します。
サブネットの範囲は27ビットマスク以上の範囲が必要になります。
出来上がったら仮想マシンの接続からBastionを選択してアクセスします。
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カラーでした。
(当日写真を失念したので後日撮りました。。。)
次に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月に開催予定とのことで、都合が合えば参加したいと思います!
KEDA+AKSでk8s上にFaaSを構築する
5月に発表されたKEDA(Kubernetes-based Event-driven Autoscaling)ですが、AKS(Azure Kubernetes Service)の上でサーバーレス のイベントドリブンコンテナーをサポートするものとしてオープンソースでMicrosoftとRedHatが共同で発表しました。
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や発表時のブログを参照してください。
実際に動かしてみる
AKSの構築
いずれかの方法でAKSを構築します。
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
ストレージの作成
キュートリガーで動くよう作るのでストレージアカウントとキューを作成
アプリケーションの作成
作業ディレクトリの作成
mkdir kedaapp & cd kedaapp
ディレクトリの初期化
optionはnode→javascriptを選択
func init . --docker
Queueトリガーの作成
Azure Queue Storage triggerを選択
名称は適宜変更
func new
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>
動作確認
リソースが作成されていることを確認する
キューをポータルより作成し、Podが自動的に起動するのを確認する
上記のように処理が完了してしばらくするとTerminatingされます
最後に
まだベータ版で開発中です。
今後CosmosDBやAzure Monitor、IoT Hubなどの連携も予定されているので今後がたのしみなプロダクトですね!