Express(node.js)とMySQLを使用したREST APIサービスをAzureに展開してみる:MySQLスキーマ/テーブル作成 その2

定型パターンと化していますが、前回から4か月も経過してしまいました。個人的にはこの間に転勤とか転勤とかありましてドタバタしていました。
今回のネタ環境でも、VSTSのUIが大幅に変更されたり、Azure Database for MySQLがGAになったりとしていますが、内容的にはあまり影響を受けていないようなので、このまま続けていきます。

MySQLのデータベース/ユーザー/テーブルを作成するためのシェルとSQL文はこんな感じです。
※各種ファイルは「/environment/MySQL」フォルダ配下に格納しています。
〇データベース作成
・CreateDatabase.sh

mysql --host=$DBSERVER.mysql.database.azure.com --user=$ADMINUSERNAME@$DBSERVER --password=$ADMINPASSWORD --ssl-mode=PREFERRED --no-auto-rehash --verbose --execute="set @SchemaName='$SCHEMANAME';source $SYSTEM_ARTIFACTSDIRECTORY/$BUILD_DEFINITIONNAME/drop/environment/MySQL/CreateDatabase.SQL;"

・CreateDatabase.SQL

SELECT @SchemaName;
SET @s = CONCAT('CREATE DATABASE ', @SchemaName);
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

〇ユーザー作成
・CreateUser.sh

mysql --host=$DBSERVER.mysql.database.azure.com --user=$ADMINUSERNAME@$DBSERVER --password=$ADMINPASSWORD --ssl-mode=PREFERRED --no-auto-rehash --verbose --execute="set @SchemaName:='$SCHEMANAME';set @AppUserName:='$APPUSERNAME';set @AppPassword:='$APPPASSWORD';source $SYSTEM_ARTIFACTSDIRECTORY/$BUILD_DEFINITIONNAME/drop/environment/MySQL/CreateUser.SQL;"

・CreateUser.SQL

SET @s = CONCAT("CREATE USER '", @AppUserName , "'@'%' IDENTIFIED BY '", @AppPassword, "'");
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

SET @s = CONCAT('GRANT ALL PRIVILEGES ON ', @SchemaName, '.* TO ', QUOTE(@AppUserName) , '@', QUOTE('%'), ' IDENTIFIED BY ', QUOTE(@AppPassword));
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

SET @s = CONCAT('FLUSH PRIVILEGES');
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

〇テーブル作成
・CreateTable.sh

mysql --host=$DBSERVER.mysql.database.azure.com --user=$ADMINUSERNAME@$DBSERVER --password=$ADMINPASSWORD --ssl-mode=PREFERRED --no-auto-rehash --verbose --execute="set @SchemaName='$SCHEMANAME';set @AppUserName='$APPUSERNAME';set @TableName='$TABLENAME';source $SYSTEM_ARTIFACTSDIRECTORY/$BUILD_DEFINITIONNAME/drop/environment/MySQL/CreateTable.SQL;"

・CreateTable.SQL

SET @s1 = CONCAT("CREATE TABLE IF NOT EXISTS `", @SchemaName, "`.`", @TableName, "` (");
SET @s2 = CONCAT(@s1, "`ipaddress` varchar(15) NOT NULL,");
SET @s3 = CONCAT(@s2, "`hostname` varchar(100) DEFAULT NULL,");
SET @s4 = CONCAT(@s3, "`administrator` varchar(100) DEFAULT NULL,");
SET @s5 = CONCAT(@s4, "`foruse` varchar(100) DEFAULT NULL,");
SET @s6 = CONCAT(@s5, "`editable` tinyint(4) NOT NULL,");
SET @s7 = CONCAT(@s6, "PRIMARY KEY (`ipaddress`)");
SET @s8 = CONCAT(@s7, ") ENGINE=InnoDB DEFAULT CHARSET=utf8");
PREPARE stmt1 FROM @s8;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

ポイントは、環境変数の値を複数利用するために、わざわざシェルでmysqlコマンドの引数で「–execute=”set~”」を使っていることぐらいです。

これらのシェルを起動するリリースタスクはこんな感じで定義しています。


ちなみにですが、作成するテーブル名はリリース単位とかで変更できるようにリリース定義内のVariablesで設定しています。

ようやく環境周りのリリースまでできたので、次はWeb Appにプログラムをリリースしてみます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください