Denen blog

株式会社電縁の社員によるブログです。

Azure Resource Manager テンプレート作成時に独自のファイルを展開させる方法

f:id:yasuaki-sakai:20180823183652j:plain

こんにちは、イノベーションオフィスの吉田です。

 

みなさんは Azure を使ってらっしゃいますでしょうか?

最近知ったのですが、Azure には Azure Resource Manager(ARM)テンプレートというものが用意されていまして、色々な構成のインスタンスを簡単に作成することが出来ます。

以下をご覧いただければ分かると思いますが、既に様々なテンプレートが公開されているんです。

github.com

例えば「wordpress-mysql-replication」なら、Master-Slave 構成の MySQL が動いている Wordpress 環境を作成することが可能です。

 

この ARM テンプレートでは Azure 上に用意されたリソースを組み合わせて JSON 形式に記述していく仕組みになっています。

で、とある事情でこのテンプレートを作ってみていたのですが、リソースとして用意されていない特定のファイル群を特定の場所に配置したい!みたいな時にどうすればいいか困ってしまいました。

色々調べた結果シェルが実行出来るようなのでそちらを使ってやりたいことを実現出来たのでご紹介したいと思います。

※他にこんなやり方有るよ!って方は教えてください(笑)

 

それではまず、配置したいファイル群を tar.gz 形式に固めて Web から閲覧出来る場所に配置してください。

今回は URL を http://www.example.com/download/resource.tar.gz とします。

 

次に、ファイルをダウンロードして展開するシェルを用意します。

コードは以下の通りです。

#!/bin/sh

mkdir -p /opt/my_resource
wget -P "/opt/my_resource/" http://www.example.com/download/resource.tar.gz
tar xvzf /opt/my_resource/resource.tar.gz -C /opt/my_resource

シンプルですね。

ディレクトリ作ってダウンロードして解凍するだけです。

今回は http://www.example.com/download/download.sh に配置することとします。

 

で、一番のキモがここになります。

ARM テンプレートは azuredeploy.json という JSON 形式のファイルに記述するのですが、Linux でシェル実行するには以下の形で記述する必要があります。

    { 
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "name": "[concat(variables('vmName'),'/downloadResource')]",
      "apiVersion": "2017-03-30",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
      ],
      "properties": {
        "publisher": "Microsoft.OSTCExtensions", 
        "type": "CustomScriptForLinux", 
        "typeHandlerVersion": "1.2", 
        "settings": {
          "fileUris": [
            "http://www.example.com/download/download.sh"
           ],
           "commandToExecute": "sh download.sh"
        }
      } 
    },

variables() や parameters() は任意の値を設定する仕組みなのですが、今回の内容と関係ないので説明は省かせていただきます。

この記述で気にしていただきたいのは以下になります。

  • dependsOn で OS イメージの起動を待つよう指定する
  • properties.publisher で Microsoft.OSTCExtensions を指定する
  • properties.settings.filterUris で実行したいシェルファイルを指定する
  • properties.settings.commandToExecute で実行するコマンドを指定する

これで実際にデプロイしてみるとファイルが展開されるようになるかと思います。

 

ARM テンプレートは慣れるとデプロイも早く、便利なので自分でももっと使っていこうと思います。

それでは!

 

書いた人:イノベーションオフィス 室長 吉田

f:id:yasuaki-sakai:20171204190702j:plain