こんにちは、サイオステクノロジー武井です。今回は、Azure Container Instancesのコンテナーグループを使って、世界最速でWordPress環境を作りますヮ(゚д゚)ォ!ちなみにWordPressは一例で、他にもたくさんの使い道があります。
Azure Container Instancesって?
Azureが提供するサーバーレスコンテナプラットフォームです。普通コンテナを使う場合は、Dockerを自分のPCなり、どこかのサーバーなりにインストールして、そこでイメージをpullなりbuildなりすると思います。
でも、そのサーバーさえ用意するのも手間ですし、サーバーを保守管理する手間も増えます。そこで、Azureにはコンテナをサーバーレスで動作できる環境があります。それがAzure Container Instancesです。AWSやGCPにも同様のものがあります。
コンテナを稼働させる実行基盤として、AzureにはWeb App for ContainersやAzure Kubernetes Serviceがあります。ただ、そちらは稼働させるまでに結構時間かかりますよね。Azure Container Instancesは、先の2つのような高機能はありません。Blue Green Deployもできませんし、高度なスケーリングもできません。単一もしくは複数のコンテナをサクッと動かすだけです。でもそれがまたいいところで、例えば、ローカルで動かしていたコンテナを他の人にもちょっと使わせてみたいとか、なにかのシステムの結合テストをするときに、そのアプリの結合テストの対象ではないけど、必要なOSSのサービスとかをサクッとAzure Container Instancesにデプロイするときがあります。
もっと具体的なケースで行くとシングルサインオンの対象のアプリをテストするとき、シングルサインオンのシステム自体はテスト対象ではないけど、全体の結合テストでは必須です。つまり本番リリース対象ではないけど、リリース対象のシステム稼働に必要な周辺システムにAzure Container Instancesを使ったりします。そんなものをVMやWeb App for ContainersやAzure Kubernetes Serviceで稼働させるのもめんどくさいですし(´・ω・`)
その他の用途としては、Kubernetesの仮想ノードとしてAzure Container Instancesが使われることもあります、Virtual Kubeletと呼ばれるモジュールからAzure Container InstancesのAPIを呼び出し、Kubernetesの仮想ノードを実現します。
コンテナグループ
Azure Container Instancesにはコンテナグループという機能があって、複数のコンテナをデプロイできます。これが激しく便利です。当然複数のコンテナ同士を通信させることもできるので、Web DBシステムみたいなも簡単にできます。
実践!!世界最速WordPress構築!!
では、Azure Container Instancesのコンテナグループを使ってWordPressを世界最速で構築したいと思います。もちろんその用途はWordPressだけではありません。皆様の創意工夫次第で用途は無限に広がります。なんとなくWordPressが解説のネタにしやすかっただけです^^;
前置きが長くなりましたが、早速実践してみましょう。まず、みんな大好きAzure Cloud Shellを起動してリソースグループを作成します。東日本リージョンにntakei_aci_wordpressというリソースグループを作ります。
$ az group create --name ntakei_aci_wordpress --location japaneast
次に先程作成したリソースグループに、myContainerGroupというコンテナグループを作成します。
$ az container create --resource-group ntakei_aci_wordpress --name myContainerGroup --output table
以下の内容のYAMLファイルを作成します。
apiVersion: 2018-10-01
# コンテナグループを作成するリージョンを指定します。
location: japaneast
# このファイルで作成するコンテナが所属するコンテナグループを指定します。
name: myContainerGroup
properties:
containers:
# コンテナ名を指定します。WordPressのコンテナです。
- name: wordpress
properties:
# コンテナのイメージ名を指定します。
image: wordpress:php7.4-apache
# コンテナのbuild時に渡す環境変数を指定します。WordPressの起動には
# 最低限DBのホスト名、データベース名、ユーザー名、パスワードが必要になります。
environmentVariables:
- name: 'WORDPRESS_DB_HOST'
value: '127.0.0.1:3306'
- name: 'WORDPRESS_DB_NAME'
value: 'wordpress'
- name: 'WORDPRESS_DB_USER'
value: 'wordpress'
# secureValueを指定しておくとAzureポータルで非表示となります。
- name: 'WORDPRESS_DB_PASSWORD'
secureValue: 'wordpress'
resources:
requests:
# コンテナに割り当てるCPUとメモリを指定します。
cpu: 1
memoryInGb: 1.5
# このコンテナに対して開放するポートを指定します。
ports:
- port: 80
# コンテナ名を指定します。WordPressが接続するDBのコンテナです。
- name: db
properties:
# コンテナのイメージ名を指定します。
image: mysql:8.0.20
# コンテナのbuild時に渡す環境変数を指定します。MySQLを起動するために
# 必要な環境変数諸々です。
environmentVariables:
- name: 'MYSQL_ROOT_PASSWORD'
secureValue: 'wordpress'
- name: 'MYSQL_DATABASE'
value: 'wordpress'
- name: 'MYSQL_USER'
value: 'wordpress'
# secureValueを指定しておくとAzureポータルで非表示となります。
- name: 'MYSQL_PASSWORD'
secureValue: 'wordpress'
resources:
requests:
# コンテナに割り当てるCPUとメモリを指定します。
cpu: 1
memoryInGb: 1.5
# このコンテナに対して開放するポートを指定します。
ports:
- protocol: tcp
port: '3306'
# OSのタイプを指定します。
osType: Linux
# IPアドレスのタイプを指定します。パブリックに公開したいので、Publicとつけます。
# グローバルなIPアドレスが割り当てられます。
ipAddress:
type: Public
# インターネットに対して公開したいポートとプロトコルを指定します。
ports:
- protocol: tcp
port: '80'
# 以下の値を指定すると[dnsNameLabel].[リージョン名].azurecontainer.ioという
# FQDNが付与されます。
dnsNameLabel: ntakei-wp
# 以下は決り文句です。(MS公式ドキュメントそのまんまです)
tags: null
type: Microsoft.ContainerInstance/containerGroups
※YAMLの公式リファレンスは以下になります。
https://docs.microsoft.com/ja-jp/azure/container-instances/container-instances-reference-yaml
先程作成したYAMLファイルをもとにコンテナを作成します。ちなみにコンテナを更新するときも、YAMLファイルを修正して以下のコマンドを実行します。
$ az container create --resource-group ntakei_aci_wordpress --file wp.yaml
これで準備は整いました。https://ntakei-wp.japaneast.azurecontainer.io/にアクセスしますと、WordPressのインストール画面が表示されるはずです。やったーヮ(゚д゚)ォ!
※実際に公開するときはHTTPSで通信経路を暗号化して下さいm(_ _)m
まとめ
いかがでしたか?超簡単でしたよね。あっという間にWordPressが出来上がっちゃいました。Azure Container Instancesを使って、是非あなたもステキなコンテナライフを満喫して下さい。No Azure Container Instances, No Life!!

