ConoHa のスタートアップスクリプトを使って VM を作成してみた(CentOS 7 編)


このブログでもお世話になっている ConoHa でスタートアップスクリプト機能が追加されたので早速試してみました。

スタートアップスクリプトはコントロールパネルではなく、API から操作するようです。
公式サイトには下記の二つのページが紹介されていました。

今回は、前回(2年前!) ConoHa の API の記事にならって、PowerShell を使用します。

PowerShell の Invoke-RestMethod を使って ConoHa の API を触ってみた

トークンの取得

スタートアップスクリプトに限らず、ConoHa の API を利用するには必要になります。

$apiUser = "APIユーザー名"
$apiPassword = "APIパスワード"
$tenantId = "テナントID"
$identityServiceUrl = "https://identity.tyo1.conoha.io/v2.0"
$computeServiceUrl = "https://compute.tyo1.conoha.io/v2/" + $tenantId

$body = '{"auth":{"passwordCredentials":{"username":"' + $apiUser + '","password":"'+$apiPassword+'"},"tenantId":"'+$tenantId+'"}}'
$url = $identityServiceUrl+"/tokens"
$mytokens = Invoke-RestMethod $url -Method POST -Body $body

$token = $mytokens.access.token.id
$tokenHeader = @{"X-Auth-Token" = $token}

imageRef, flavorRef の取得

こちらも、スタートアップスクリプトスクリプトを使用しない場合でも、VPS 作成の API で必要になる imageRef と flavorRef の取得を行います。

今回は 1GB プランを使用します。
1024MB なので、このように調べてみました。

$flavors = Invoke-RestMethod -Method GET -Headers $tokenHeader -Uri "$computeServiceUrl/flavors/detail" 
$flavors.flavors | Where-Object {$_.ram -eq 1024}

1GB プランの場合、flavorRef は 7eea7469-0d85-4f82-8050-6ae742394681 を指定すると良いようです。

OS イメージは、Linux なら何でもよいようですが、今回は CentOS 7.3 を使用します。
name から絞り込むと良いようで、このように調べてみました。

$images = Invoke-RestMethod -Method GET -Headers $tokenHeader -Uri "$computeServiceUrl/images/detail" 
$images.images | Where-Object {$_.name -like "vmi-centos-7.3*"}

1GB プランなので、20gb がつかない vmi-centos-7.3-amd64-unified の 1788b029-1b7a-43eb-a89d-02abd0866458 を指定します。

base64 user-data の生成

以前の記事で紹介した、このブログを運用しているサーバーの設定をベースにスタートアップスクリプトを作成します。

ConoHa ではシェルスクリプトの他に、’#include-once’、’#include’、’#cloud-config’、’#cloud-boothook’ も利用できるようですが、スタートアップスクリプト初心者なのでシェルスクリプトを使用します。

スクリプトはこのようにしました。

$script = "#!/bin/sh

yum -y update 
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
yum -y remove httpd
yum -y install nginx
systemctl enable nginx
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php71
yum -y install php php-fpm php-mbstring php-mysqlnd composer
systemctl enable php-fpm
reboot"

PowerShell で Base64 に変換する場合、下記のようになります。

$byte = [System.Text.Encoding]::UTF8.GetBytes( $script )
$base64 = [System.Convert]::ToBase64String( $byte )

いよいよ、VM の作成

調べた imageRef と flavorRef、そして自作のスタートアップスクリプトを組み合わせると、下記の PowerShell で VM が作成できます。

$body = '{
    "server": {
        "imageRef": "1788b029-1b7a-43eb-a89d-02abd0866458",
        "flavorRef": "7eea7469-0d85-4f82-8050-6ae742394681",
        "adminPass":"72LY2hf38Kf84vCy4sUr",
        "user_data" : "' + $base64 + '"
    }
}'
Invoke-RestMethod -Method POST -Headers $tokenHeader -Uri "$computeServiceUrl/servers" -Body $body

※adminPass は公式ドキュメントの転載です。ご安心ください。

VM の作成自体は 30秒で終了(コンパネ表記が起動中になる)のですが、スクリプトはその後実行されます。

スクリプト次第ですが、時間がかかる場合、スクリプト実行状態なのかそうでないのかが分からないことがあります。

/var/log/cloud-init.log に出力されるようなので、不安ならそこを見ると良いかもしれません。

今回は、セキュリティグループについては説明を省略しています。
(反則ですが)コントロールパネルから Web と SSH を有効にします。

最後に

スクリプトの最後の行より、自動的に再起動されます。
再起動後、IP アドレスを入力し、nginx のテストページが表示されると作業完了です。

ConoHa で独自に手を入れた VM を作成する場合、「イメージ保存」機能もありますが、時間がかかる作業です。
スクリプトで記述できる内容は、スタートアップスクリプトを使用すると便利になると思いました。


Comments

comments

コメントを残す

メールアドレスが公開されることはありません。

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)