自宅開発環境が貧弱で大変厳しいので、コーディング環境含めクラウド上で行えるようにできないかと色々試しています。 とりあえず最低限SSH使える環境がアレばスマフォでもコーディングとビルドが行える環境を作るのが目標です。
クラウドは使っている間だけ課金されるので、使うときにマシンを建てて終わったら即潰す運用をすると安く済みそうです。 潰し忘れを防ぐため、インスタンスの立ち上げも落とすのもすべて自動でやりたいです。
今回はその第一歩として、READMEを読みながらVagrantを使ってMicrosoft Azure上に仮想マシンを建ててみました。
必要アプリのインストール
Vagrant, Azure-cli, vagrant-azure pluginとdotenvをインストールする必要があります。
Vagrant
やるだけ
Azure-cli
Azure-cliのインストール方法はgithubのREADMEを参照して行うだけです。
curl -L https://aka.ms/InstallAzureCli | bash
インストールはデフォルトだと ~/ 以下になります。 変えたいときはインストール時にパスを入力すると、その下においてくれます。
===> In what directory would you like to place the install? (leave blank to use '/home/tnishinaga/lib/azure-cli'): ~/opt/azure/lib/azure-cli -- We will install at '/home/tnishinaga/opt/azure/lib/azure-cli'. ===> In what directory would you like to place the 'az' executable? (leave blank to use '/home/tnishinaga/bin'): ~/opt/azure/bin
vagrant-azure
vagrant-azureプラグインも入れるだけ……なのですが、私の環境ではエラーが起きたので頑張ってインストールしました。 同じ問題が起きた方は参考にしてください。
dotenv
dotenvをインストールすると.envに書いてある設定をVagrant内で読み込むことができるようになります。 この.envにアクセスキー等を書いておいて、.gitignoreに登録しておけばアクセスキーなどのネットに上がっては困る情報を間違えてネットにあげてしまうリスクを下げることができるようです。
vagrant-azureのREADMEにはインストールするよう書いてありませんが、サンプルで使ってるのでインストールします。
vagrant plugin install dotenv
vagrant-azureで仮想マシンを建ててみる
基本はvagrant-azureのREADMEにあるGetting Startedの手順をなぞるだけです。
初期設定
Azureへのログイン
az login
でAzureにログインします。
あるURLにアクセスしてこのコードを入力してくださいと言われるので、そのとおりにします。
Azure Active Directory Applicationを作る
az ad sp create-for-rbac
コマンドでAzure Active Directory Applicationというものを作ります。
以下のようなメッセージが出てくるはずなので、tenant, appId, passwordをメモっておいてください。
{ "appId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "displayName": "some-display-name", "name": "http://azure-cli-2017-04-03-15-30-52", "password": "XXXXXXXXXXXXXXXXXXXX", "tenant": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" }
サブスクリプションIDの取得
サブスクリプションIDも必要なので az account list --query "[?isDefault].id" -o tsv
で取得してメモしておきます。
Vagrantfileの作成
以下のようなVagrantfileを作ります。
require 'dotenv' Dotenv.load Vagrant.configure('2') do |config| config.vm.box = 'azure' # use local ssh key to connect to remote vagrant box config.ssh.private_key_path = '~/.ssh/id_rsa' config.vm.provider :azure do |azure, override| # each of the below values will default to use the env vars named as below if not specified explicitly azure.tenant_id = ENV['AZURE_TENANT_ID'] azure.client_id = ENV['AZURE_CLIENT_ID'] azure.client_secret = ENV['AZURE_CLIENT_SECRET'] azure.subscription_id = ENV['AZURE_SUBSCRIPTION_ID'] end end
vagrant-azureのREADMEとの差異として、以下を先頭に追記しています。
require 'dotenv' Dotenv.load
これは、AZURE_TENANT_IDなどの値を.envから引いてくるために使われるdotenvプラグインを読みこむために必要です。
.envファイルを作る
.envファイルを作り、先程メモしたtenant, appId, password、サブスクリプションIDをここに入力します。
AZURE_TENANT_ID=tenant AZURE_CLIENT_ID=appId AZURE_CLIENT_SECRET=password AZURE_SUBSCRIPTION_ID=サブスクリプションID
この.envファイルはgithub等にあげてしまうと悪用されてしまうので、.gitignoreに追加して公開されないようにしておきます。
echo ".env" >> .gitignore
ssh-keyを作っていない方は、ssh-keygenでid_rsaとid_rsa.pubの鍵ペアを作って置く必要もあります。
仮想マシンを起動してみる
vagrant box add azure https://github.com/azure/vagrant-azure/raw/v2.0/dummy.box --provider azure
したあと
vagrant up --provider=azure
で仮想マシンがAzureで立ち上がるはずです。
立ち上がった後は、 vagrant ssh
でSSHアクセスができます。
ロケーションのエラーが出た場合
私の使ってるサブスクリプションの問題で、エラーがでて起動できないことがありました。
"response": { "body": "{\"status\":\"Failed\",\"error\":{\"code\":\"DeploymentFailed\",\"message\":\"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-debug for usage details. \",\"details\":[{\"code\":\"Conflict\",\"message\":\"{\\r\\n \\\"error\\\": {\\r\\n \\\"code\\\": \\\"SkuNotAvailable\\\",\\r\\n \\\"message\\\": \\\"The requested tier for resource '/subscriptions/6af6c932-69d5-441b-9ed1-fbd7a6dc4e09/r esourceGroups/polished-voice-4/providers/Microsoft.Compute/virtualMachines/fragrant-sun-83' is currently not available in location 'westus' for subscription '6af6c932-69d5-441b-9ed1-fbd7a6dc4e09'. Please try another tier or deploy to a differe
ログを見る限りでは、デフォルトで選択されるwestusロケーションが使えなかったようです。
これはlocationの設定を変更すると回避できるそうなので、とりあえず色々試して東南アジア(southeastasia)を選択しました。
ロケーション選択追記後のVagrantfileは以下のようになります。
require 'dotenv' Dotenv.load Vagrant.configure('2') do |config| config.vm.box = 'azure' # use local ssh key to connect to remote vagrant box config.ssh.private_key_path = '~/.ssh/id_rsa' config.vm.provider :azure do |azure, override| # each of the below values will default to use the env vars named as below if not specified explicitly azure.tenant_id = ENV['AZURE_TENANT_ID'] azure.client_id = ENV['AZURE_CLIENT_ID'] azure.client_secret = ENV['AZURE_CLIENT_SECRET'] azure.subscription_id = ENV['AZURE_SUBSCRIPTION_ID'] azure.location = "southeastasia" end end
仮想マシンを潰す
使い終わったら、vagrant destroy
でマシンを潰せます。
おしまい
とりあえずこれで仮想マシンの立ち上げと削除ができることが確認できました。
次はansibleを用いて環境の自動設定をやってみようと思います。