TerraformでWindowsVMを作成する

今日はTerraformでWindows VMを作りました。 LinuxVMの作成サンプルとほぼ変わりませんが、一部展開後にAnsibleで管理される準備を自動実行させるぶぶんだけ工夫してみました。Terrafromでブートストラップしてから、ConfigurationはAnsibleで管理…、に自然に移行できるようにしているつもりです。 Ansibleでの構成はこれから試すので、できる想定…なのですが。 Terraformの作成サンプルはLinuxVMばかりでWindowsVMの例があまりないので少しは参考になる部分があるかもしれません。 - [https://github.com/ebibibi/AzureManagement/tree/master/Terraform/CreateWindowsVM](https://github.com/ebibibi/AzureManagement/tree/master/Terraform/CreateWindowsVM)

July 17, 2018 · 1 min · 胡田昌彦

TerraformでAzureをいじってみました。

TerraformでAzureをいじってみたい、ということで超簡単なところから触ってみています。 - [Download Terraform - Terraform by HashiCorp](https://www.terraform.io/downloads.html) よりバイナリダウンロード。とりあえずWindows版の64bitのバイナリをダウンロードしました。 - パスの設定。exeファイル1つだけなので、どこからでも使えるようにDropbox上に格納してそこにPATHを通しました。 - 環境を整える際のサンプルスクリプトがAzure CLIなのでAzure CLIの環境を整えます。 - Install the Azure CLI for Windows | Microsoft Docs よりMSIでAzure CLIをインストール - Visual Studio Code上で色々やろうと思うので、Azure CLI系やTerraform系の拡張を言われるがままに入れる。 Azure CLI Tools - Azure Resource Manager Tools - Azure Terraform - Terraform - 単純にリソースグループを作成するだけのtest.tfで試してみる provider “azurerm” { } resource “azurerm_resource_group” “rg” { name = “testResourceGroup” location = “westus” } テキストファイルを用意しておいて terraform init, plan, applyコマンドをそれぞれ投入するだけできちんと意図した状態になることを確認できました。素敵ですね。コンフィグファイルが読みやすくわかりやすいのが素敵です。そして、Visual Studio Codeがずいぶん素敵ですね、言われるがままに操作するだけで勝手に環境が整ってしまいました。 mebisuda@Azure:/clouddrive/AzureManagement/Terraform/Demos$ az group list [] mebisuda@Azure:/clouddrive/AzureManagement/Terraform/Demos$ terraform init ...

May 22, 2018 · 3 min · 胡田昌彦

(主にインフラ系エンジニアから見た)コーディングやスクリプティングに関しての流れ

主にインフラエンジニアからみて、過去から現在までの流れ…のようなものを私が見えている範囲で記載してみました。昨今はクラウド化の流れと相まって非常に高度な自動化やインフラのコード化まで実現可能となっており例えば「スクリプトも書いたことありません」という人に対してどの領域から飛び込んでもらうのが効率的か…をちょっと悩んでいます。 もうコーディングレスでLogic Appとかそういうところに飛び込んでもらった方がはやいのかもしれないし、仮想基盤のことやWindows, Linuxの中の事はすっ飛ばしてTerraformとかコンテナとかそこに注力するところから入って必要が出たところで仮想マシン内部の処理に入ったほうがいいのかもしれません。でも、現実的にはシェルスクリプトとかPowerShellスクリプトの基礎とかは抑えておかないとだめかもしれないし・・・。結構悩ましい所です。 - 昔はバッチファイルやシェルスクリプトで繰り返し実施する作業の効率化がありました。 - その後Windows的にはWSHの時代があり、vbscriptでスクリプトを書いたひとも多かったと思います。 - その後Microsoft的にはコマンド毎にオプションが違ったりコマンドがなかったりすることを解決し、全て統一するものとしてPowerShellを生み出しました。(私の大好きな[Jeffery Snover](https://twitter.com/jsnover)さんの仕事です。) - これでMicrosoft系はPowerShellで全てオブジェクト指向の管理となりました。(バックグラウンドにあるのは.net framework) - 一方UNIX系は当初からなんでもかんでもテキストであるという思想でした。 - MicrosoftはPowerShellを標準として様々な製品を開発しました。GUIではできないことでもPowerShellでなら操作できる。GUIで操作しても裏ではPowerShellコマンドが自動生成されてそれが実行されている…というものも多くありました。(結果、仕方がなくPowerShellを使うようになった方も多いと思います。) - Microsoftはクラウドサービスにもその流れを取り入れました。PowerShellにてクラウドサービスの管理も行うことになりました。 - Chef, Puppetなどに代表されるような冪等性を備えた仕組みが登場してきました。(Infrastructure as code, Configuration as code) 何度実行しても「記載した望むべき状態になる」ことを特徴とします。 - これ以前は「これを実行したらこうなる、やって見る前に状態を確認して、やってみて、やった結果を確認する」というような作業の流れを記述するようなイメージでした。 - MicrosoftもPowerShell DSCにて冪等性を持つフレームワークを提供しました。 - Microsoftのオープンソース指向が進む中でよりマルチプラットフォーム化を意識した取り組みがなされるようになっていきます。 - PowerShellの継続開発が打ち切られ、PowerShellCoreに舵がきられます。PowerShellCoreはWindowsだけではなく、Linux, Mac等でも動作するマルチプラットフォームなPowerShellです。(バックグラウンドにあるのは.net core) - AzureにもCloudShellの機能がつき、ポータル上でもコードで制御できるようになります。これまでのAzure PowerShellよりも先にAzure CLI(UNIX系の文化)の方が先に搭載されました。Azure管理はPowerShellよりもCLIの方が優先されるようになってきています。 - クラウドサービスも普及する中で、大規模な環境ではもう個別に1台づつターミナルで作業するなり、RDPではいってGUIで操作するなりすることが現実的に不可能な規模になりました。このような環境ではコードで全てを制御可能な環境にすることは必須条件となりました。 - WindowsもWindows Server Coreが出てGUIがなくなり、さらにNano Serverにてどんどん軽量化していきます。 - Windows Server 2016, 2019となると継続的に進化するモデルはGUIが利用できなくなりました。 - 更に軽量化を推し進める中で仮想マシンではなく、コンテナに大きくトレンドが傾きます。 - コンテナの標準であるDockerはDockerfileというコンテナをコードで定義できる機構を備えています。 - クラウドサービスも冪等性をもったテンプレートにて展開可能な構造となります。AzureであればARMテンプレート、AWSであればCloud formationなど。 - ARMテンプレート、Cloud formationによるInfrastructre as Codeと仮想マシンの内部を構成するChef, Puppet, AnsibleのようなConfiguration as Codeによって仮想マシンベースの環境構築の完全自動化が可能となりました。 - ARMテンプレート、Cloud formationによるInfrastructre as CodeとDockerによるコンテナコントロールで完全自動化が可能となりました。 - 複数のコンテナプラットフォーム自体のコントロールという観点ではKubernetesが標準化してきています。 - AWSLambda, Azure Fuctionsのようなインフラ自体を意識せずアプリケーションロジックのみを記載すればそれでおしまいとなるようなサービスも出てきました。ここではInfrastructure as CodeやConfiguration as Codeすら必要ない世界があります。(これですべてまかなえるわけでもないですが) - DevOpsという流れもありますが、NoOpsに向かう流れの方が強そうに感じています。(私の感想) ※NoOpsはインフラ管理者がいらないという意味ではなく、極力インフラの面倒を見なくていいアーキテクチャを採用する、くらいの意味で捉えています。 ...

May 16, 2018 · 1 min · 胡田昌彦

Azure Resource Managerを使ってAzureに全自動でWindows Serverを展開する

Azure Resource ManagerをいまからやっておけばAzure Stack対応もバッチリ!…ということでAzure Resource Mangerのお勉強を始めています。さらにはInfrastructure as Codeの実現に向けてDesire State Configurationのお勉強も。外側はARMで、VMの中はDCSで…という感じですね。 まず手始めに何から手をつけると良いかな…と探した所、以下のブログが非常にいい感じだったのでここから手をつけてみました。 - [18 Steps for End-to-End IaaS Provisioning in the Cloud with Azure Resource Manager (ARM), PowerShell and Desired State Configuration (DSC) - KeithMayer.com - Site Home - TechNet Blogs](http://blogs.technet.com/b/keithmayer/archive/2015/07/07/18-steps-for-end-to-end-iaas-provisioning-in-the-cloud-with-azure-resource-manager-arm-powershell-and-desired-state-configuration-dsc.aspx) コードで紹介されているので、基本的にそれをコピペすれば動くのですが、せっかくなので全部写経しつつコメント出力を追加したり、いちいち色んな物を選択したり、手動でクレデンシャルを入力したりするのが面倒なのでそこも自動化したり…と、改造しながら楽しんでみました。まだ、DSCでIISを構成するところまで行ってないのですが以下の動作を行わせる所までは全部理解して書いて正常動作を確認するところまでできました。 - クレデンシャル生成 - Azureアカウント追加 - ARMプロバイダ登録 - サブスクリプション選択 - リソースグループ作成 - ストレージアカウント作成 - 仮想ネットワーク作成 - VIPリソース作成 - ロードバランサ作成 - ネットワークセキュリティグループ作成 - NIC作成 - 可用性セット作成 - VM作成 https://gist.github.com/ebibibi/9a0a6830b54f0d3a7400 ...

July 18, 2015 · 1 min · 胡田昌彦