ブログ

ryuzeeによるブログ記事。不定期更新

Azure Cloud Shellを活用してスライド公開環境を30分で作る方法

みなさんこんにちは。@ryuzeeです。

Slideshareがスライドの差し替え機能を停止したり、日本語フォントがおかしくなったりして悶絶するのを避けるために、自作のスライド公開用プラットフォームを運用しています(レポジトリはこちらです)。

このプラットフォームはAzureもしくはAWSのオブジェクトストレージやキューを使った構成になっていて、アプリケーション本体はDockerコンテナに格納しています。 今日はこの環境を、Azure上に手作業なしで作ってみたいと思います。

概要

自動でAzure上のリソースを作る方法はいろいろあります。例えばTerraformでも可能ですし、公開されている各言語用のSDKを使うこともできます。 個人的な好みは公式で提供されているコマンドラインインタフェース(CLI)を使う方法です。これであれば新サービスの登場とほぼ同時にすぐに使えます。

このスライド公開用プラットフォームを動かすのに今回は以下のサービスを利用します。

  • Blob Storage
  • Queue Storage
  • SQL Database
  • App Service

これらの作成や設定を全部CLIを使って進めます。 またコマンドの実行はAzure Portal上のAzure Cloud Shellから行います(メニューの「>_」をクリックします)。ポータル上で実行するために認証のことを考える必要もなく、常に最新のCLIが使える点がメリットです。

実行内容

実行の内容は以下のような感じになります。 何回実行しても名前の競合が起こらないように、冒頭で変数を定義し、コマンドの引数にはその値を渡すようにします (たとえば、SQL DatabaseのサーバURLやストレージアカウントのURLは重複が許されません)。 値については適宜書き換えてください。

なお、複数のサブスクリプションを持っている場合は、az account set -s サブスクリプションIDとして、どのサブスクリプションを使うか指定してから作業を開始します。

# ランダムな数値を生成しておいて各種リソース名にはそれを付与する
export rand=$RANDOM
# リソースグループ名
export resourcegroup=slide-$rand
# リージョン名
export region='Japan West'
# ストレージアカウント名
export storageaccount=slidestorage$rand
# SQL Database Serverのエンドポイント
export dbserver=slide-sqlserver-$rand
# データベース名
export dbname=slidehub
# データベースの管理者ユーザー名
export dbuser=slideadmin
# 【要変更】データベースの管理者用パスワード(適宜変更すること)
export dbpassword=YourPassW0rd
# App Serviceのサービスプラン
export appservice_plan=appserviceplan$rand
# App Serviceの名前(URLの一部になる)
export appservice_name=slidehub-$rand
# 利用するDockerイメージ
export container_image=ryuzee/slidehub:latest
# 【要変更】アプリケーションで使うシークレットキー(類推されない長い文字列)
export secretkey=03659dccb3fab0cd064b2d265257e657f21d0f060853bf5fa2dd70359a23

#=================================================================
# ここからリソースの作成処理
#=================================================================

# リソースグループを作成する
# これから作るリソースは全てこのグループに所属させることでまとめて削除できるようにする
az group create --name "$resourcegroup" --location "$region"

# ストレージアカウントを作る
az storage account create --name "$storageaccount" --resource-group "$resourcegroup" --location "$region"

# ストレージのアクセスキーを取得する
key=`az storage account keys list --account-name "$storageaccount" --resource-group "$resourcegroup" | jq -r '.[0].value'`

# Blobストレージのコンテナ(格納場所。S3でいうところのバケット)を作る
az storage container create --name "slide-files-$rand" --account-name "$storageaccount" --public-access off
az storage container create --name "slide-images-$rand" --account-name "$storageaccount" --public-access blob

# Blobストレージに対するアクセスポリシーを設定する。外部からのワンタイムでのアクセスを許すための設定
az storage cors add --methods PUT GET HEAD POST OPTIONS --origins "*" --exposed-headers "*" --allowed-headers "*" --account-name "$storageaccount" --services b

# Blob Queueを作る
az storage queue create --name "slide-queue-$rand" --account-name "$storageaccount"

# SQL Databaseのサーバを作る
az sql server create --name "$dbserver" --resource-group "$resourcegroup" --location "$region" --admin-user "$dbuser" --admin-password "$dbpassword"

# SQL Databaseのファイヤウォールポリシーを更新する。以下の例ではAzureサービス内からは全て接続を許可
az sql server firewall-rule create --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0 --name "$dbserver-rule" --resource-group "$resourcegroup" --server "$dbserver"

# データベース自体を作る
az sql db create --resource-group "$resourcegroup" --server "$dbserver" --name "$dbname"

# App Serviceのサービスプランを作成する。ここでインスタンスの大きさも指定する
az appservice plan create --name "$appservice_plan" --resource-group "$resourcegroup" --sku S2 --is-linux

# App Serviceのアプリケーションを作成する。ここでは指定したDockerイメージを使うこととしている
# また起動時にコンテナ内のスクリプトを動かし、テーブル作成やデータ作成を行う
az webapp create --resource-group "$resourcegroup" --plan "$appservice_plan" --name "$appservice_name" --deployment-container-image-name "$container_image" --startup-file /opt/application/current/script/override_startup_production.sh

# App ServiceでDockerに引き渡す環境変数を設定する
az webapp config appsettings set --resource-group "$resourcegroup" --name "$appservice_name" --settings \
OSS_AZURE_CONTAINER_NAME="slide-files-$rand" \
OSS_AZURE_IMAGE_CONTAINER_NAME="slide-images-$rand" \
OSS_AZURE_QUEUE_NAME="slide-queue-$rand" \
OSS_AZURE_STORAGE_ACCESS_KEY=$key \
OSS_AZURE_STORAGE_ACCOUNT_NAME="$storageaccount" \
OSS_DB_ENGINE=sqlserver \
OSS_DB_NAME="$dbname" \
OSS_DB_PASSWORD="$dbpassword" \
OSS_DB_PORT=1433 \
OSS_DB_URL="$dbserver.database.windows.net" \
OSS_DB_USE_AZURE=true \
OSS_DB_USERNAME="$dbuser" \
OSS_SECRET_KEY_BASE="$secretkey" \
OSS_USE_AZURE=1 \
PORT=3000

あとは20〜30分くらい待っていれば自動でスライド公開環境ができあがります。なお、当然ながらAzureのリソースの料金がかかります。 初期のアカウントは、ユーザー名がadmin@example.comで、パスワードがpassw0rdなので適宜変更してから遊んでみると良いでしょう。

ログインして管理画面上でカスタマイズするとこんな感じにできます。

環境の削除

すべて同じリソースグループの中に入れているので、削除自体も簡単です。同じようにAzure Cloud Shellなどで以下を実行します。

az group delete --name リソースグループ名 --no-wait --yes

まとめ

CLI最高マネージド最高

アジャイルコーチングやトレーニングを提供しています

株式会社アトラクタでは、アジャイル開発に取り組むチーム向けのコーチングや、認定スクラムマスター研修などの各種トレーニングを提供しています。ぜひお気軽にご相談ください。

詳細はこちら
  • スクラム実践者が知るべき97のこと
  • 著者/訳者:Gunther Verheyen / 吉羽龍太郎 原田騎郎 永瀬美穂
  • 出版社:オライリージャパン(2021-03-23)
  • 定価:¥ 2,640
  • スクラムはアジャイル開発のフレームワークですが、その実装は組織やチームのレベルに応じてさまざまです。本書はスクラムの実践において、さまざまな課題に対処してきた実践者が自らの経験や考え方を語るエッセイ集です。日本語書き下ろしコラムを追加で10本収録
  • プロダクトマネジメント ―ビルドトラップを避け顧客に価値を届ける
  • 著者/訳者:Melissa Perri / 吉羽龍太郎
  • 出版社:オライリージャパン(2020-10-26)
  • 定価:¥ 2,640
  • プロダクト開発を作った機能の数やベロシティなどのアウトプットで計測すると、ビルドトラップと呼ばれる失敗に繋がります。本書ではいかにしてビルドトラップを避けて顧客に価値を届けるかを解説しています。
  • SCRUM BOOT CAMP THE BOOK 【増補改訂版】
  • 著者/訳者:西村直人 永瀬美穂 吉羽龍太郎
  • 出版社:翔泳社(2020-05-20)
  • 定価:¥ 2,640
  • スクラム初心者に向けて基本的な考え方の解説から始まり、プロジェクトでの実際の進め方やよく起こる問題への対応法まで幅広く解説。マンガと文章のセットでスクラムを短期間で理解できます。スクラムの概要を正しく理解したい人、もう一度おさらいしたい人にオススメ。
  • みんなでアジャイル ―変化に対応できる顧客中心組織のつくりかた
  • 著者/訳者:Matt LeMay / 吉羽龍太郎、永瀬美穂、原田騎郎、有野雅士
  • 出版社:オライリージャパン(2020-3-19)
  • 定価:¥ 2,640
  • アジャイルで本当の意味での成果を出すには、開発チームだけでアジャイルに取り組むのではなく、組織全体がアジャイルになる必要があります。本書にはどうやってそれを実現するかのヒントが満載です
  • レガシーコードからの脱却 ―ソフトウェアの寿命を延ばし価値を高める9つのプラクティス
  • 著者/訳者:David Scott Bernstein / 吉羽龍太郎、永瀬美穂、原田騎郎、有野雅士
  • 出版社:オライリージャパン( 2019-9-18 )
  • 定価:¥ 3,132
  • レガシーコードになってから慌てるのではなく、日々レガシーコードを作らないようにするにはどうするか。その観点で、主にエクストリームプログラミングに由来する9つのプラクティスとその背後にある原則をわかりやすく説明しています。
  • Effective DevOps ―4本柱による持続可能な組織文化の育て方
  • 著者/訳者:Jennifer Davis、Ryn Daniels / 吉羽 龍太郎、長尾高弘
  • 出版社:オライリージャパン( 2018-3-24 )
  • 定価:¥ 3,888
  • 主にDevOpsの文化的な事柄に着目し、異なるゴールを持つチームが親和性を高め、矛盾する目標のバランスを取りながら最大限の力を発揮する方法を解説します
  • ジョイ・インク 役職も部署もない全員主役のマネジメント
  • 著者/訳者:リチャード・シェリダン / 原田騎郎, 安井力, 吉羽龍太郎, 永瀬美穂, 川口恭伸
  • 出版社:翔泳社( 2016-12-20 )
  • 定価:¥ 1,944
  • 米国で何度も働きやすい職場として表彰を受けているメンローの創業者かつCEOであるリチャード・シェリダン氏が、職場に喜びをもたらす知恵や経営手法、より良い製品の作り方などを惜しみなく紹介しています
  • アジャイルコーチの道具箱 – 見える化の実例集
  • 著者/訳者:Jimmy Janlén / 原田騎郎, 吉羽龍太郎, 川口恭伸, 高江洲睦, 佐藤竜也
  • 出版社:Leanpub( 2016-04-12 )
  • 定価:$14.99
  • この本は、チームの協調とコミュニケーションを改善したり、行動を変えるための見える化の実例を集めたものです。96個(+2)の見える化の方法をそれぞれ1ページでイラストとともに解説しています。アジャイル開発かどうかに関係なくすぐに使えるカタログ集です
  • カンバン仕事術 ―チームではじめる見える化と改善
  • 著者/訳者:原田騎郎 安井力 吉羽龍太郎 角征典 高木正弘
  • 出版社:オライリージャパン( 2016-03-25 )
  • 定価:¥ 2,138
  • チームの仕事や課題を見える化する手法「カンバン」について、その導入から実践までを図とともにわかりやすく解説した書籍。カンバンの原則などの入門的な事柄から、サービスクラス、プロセスの改善など、一歩進んだ応用的な話題までを網羅的に解説します。
  • Software in 30 Days スクラムによるアジャイルな組織変革“成功"ガイド
  • 著者/訳者:Ken Schwaber、Jeff Sutherland著、角征典、吉羽龍太郎、原田騎郎、川口恭伸訳
  • 出版社:アスキー・メディアワークス( 2013-03-08 )
  • 定価:¥ 1,680
  • スクラムの父であるジェフ・サザーランドとケン・シュエイバーによる著者の日本語版。ビジネス層、マネジメント層向けにソフトウェア開発プロセス変革の必要性やアジャイル型開発プロセスの優位性について説明
  • How to Change the World 〜チェンジ・マネジメント3.0〜
  • 著者/訳者:Jurgen Appelo, 前川哲次(翻訳), 川口恭伸(翻訳), 吉羽龍太郎(翻訳)
  • 出版社:達人出版会
  • 定価:500円
  • どうすれば自分たちの組織を変えられるだろう?それには、組織に変革を起こすチェンジ・マネジメントを学習することだ。アジャイルな組織でのマネージャーの役割を説いた『Management 3.0』の著者がコンパクトにまとめた変化のためのガイドブック