AzureのVirtualMachineでCentOSを使う話

このエントリは Microsoft Azure Advent Calendar 2016 - Qiita の1日目です。

こんにちは。CTOの馬場です。 アドベントカレンダーはネタかぶりが心配ですが、 1日目だと安心して好きなことが書けます。

というわけでAzureのVirtualMachineでCentOSを使う話です。

Azure の Virtual Machine には CentOS のコミュニティ公式イメージがありません。 かわりに OpenLogic という会社が提供しているイメージがあり、 これが Recommended となっています。

正直なところ個人的にはこのサードパーティサポートありきのスタイルはすごく居心地が悪いのですが、 聞くところによるとAzure経済圏ではコミュニティイメージのほうが落ち着かないそうで、、、 ということで、郷に入っては郷に従え。 このイメージをうまく使うことを考えましょう。

Terraformで OpenLogic CentOS-based 7.2 使うには

Terraformで OpenLogic CentOS-based 7.2 使うには、 azurerm_virtual_machine で以下のように指定します。

resource "azurerm_virtual_machine" "vm" {
  storage_image_reference {
    publisher = "OpenLogic"
    offer     = "CentOS"
    sku       = "7.2"
    version   = "7.2.20160308"
  }
  ...
}

Ubuntuの例は豊富にあるのですが、 CentOSの例があまり見当たらなかったのでここに書いておきます。

SELinuxの初期状態の比較

CentOS 7.2.1511 Minimal と OpenLogic CentOS-based 7.2 のいずれもデフォルトは Enforcing です。

SELinuxの運用で詰まったら、 以前hbstudyで開催されたSELinuxハンズオンの資料が参考になると思います。

hbstudy# 28 SELinux HandsOn 公開版

インストール済みRPMの比較

いずれも yum -y update してから比較しました。

CentOS 7.2.1511 Minimal にインストールされておらず、 OpenLogic CentOS-based 7.2 にインストールされているものは以下のとおりです。

at、chrony、ntpdateあたりがインストール済みなのは助かりますね。

firewalldがインストールされているのでご注意ください。

net-tools や bind-utils がインストール済みなのは 助かるおじさんたちが多いかもしれません。

bash-completion 、 vim-enhanced 、 bzip2 、 rsync 、 lsof 、 tcpdump などのツール類もインストール済みです。

以下の3つはAzureならではという感じがします。

  • hyperv-daemons-license-0-0.26.20150402git.el7.noarch
  • hypervkvpd-0-0.26.20150402git.el7.x86_64
  • WALinuxAgent-2.2.0-1.el7.centos.noarch
abrt-2.1.11-36.el7.centos.x86_64
abrt-addon-ccpp-2.1.11-36.el7.centos.x86_64
abrt-addon-kerneloops-2.1.11-36.el7.centos.x86_64
abrt-addon-pstoreoops-2.1.11-36.el7.centos.x86_64
abrt-addon-python-2.1.11-36.el7.centos.x86_64
abrt-addon-vmcore-2.1.11-36.el7.centos.x86_64
abrt-addon-xorg-2.1.11-36.el7.centos.x86_64
abrt-cli-2.1.11-36.el7.centos.x86_64
abrt-console-notification-2.1.11-36.el7.centos.x86_64
abrt-dbus-2.1.11-36.el7.centos.x86_64
abrt-libs-2.1.11-36.el7.centos.x86_64
abrt-python-2.1.11-36.el7.centos.x86_64
abrt-retrace-client-2.1.11-36.el7.centos.x86_64
abrt-tui-2.1.11-36.el7.centos.x86_64
at-3.1.13-20.el7.x86_64
attr-2.4.46-12.el7.x86_64
augeas-libs-1.4.0-2.el7.x86_64
bash-completion-2.1-6.el7.noarch
bc-1.06.95-13.el7.x86_64
bind-libs-9.9.4-29.el7_2.4.x86_64
bind-utils-9.9.4-29.el7_2.4.x86_64
blktrace-1.0.5-6.el7.x86_64
boost-system-1.53.0-25.el7.x86_64
boost-thread-1.53.0-25.el7.x86_64
bridge-utils-1.5-9.el7.x86_64
bzip2-1.0.6-13.el7.x86_64
centos-indexhtml-7-9.el7.centos.noarch
chrony-2.1.1-1.el7.centos.x86_64
cifs-utils-6.2-7.el7.x86_64
crda-1.1.3_2015.04.06-2.el7.x86_64
cryptsetup-1.6.7-1.el7.x86_64
cups-libs-1.6.3-22.el7.x86_64
cyrus-sasl-plain-2.1.26-20.el7_2.x86_64
desktop-file-utils-0.22-1.el7.x86_64
dmraid-1.0.0.rc16-26.el7_2.1.x86_64
dmraid-events-1.0.0.rc16-26.el7_2.1.x86_64
dosfstools-3.0.20-9.el7.x86_64
dyninst-8.2.0-2.el7.x86_64
ebtables-2.0.10-13.el7.x86_64
ed-1.9-4.el7.x86_64
elfutils-0.163-3.el7.x86_64
emacs-filesystem-24.3-18.el7.noarch
firewalld-0.3.9-14.el7.noarch
fprintd-0.5.0-4.0.el7_0.x86_64
fprintd-pam-0.5.0-4.0.el7_0.x86_64
gdb-7.6.1-80.el7.x86_64
gdk-pixbuf2-2.31.6-3.el7.x86_64
gpg-pubkey-2aa04dbd-52d6cc8d
gpm-libs-1.20.7-5.el7.x86_64
hunspell-1.3.2-13.el7.x86_64
hunspell-en-0.20121024-5.el7.noarch
hunspell-en-GB-0.20121024-5.el7.noarch
hunspell-en-US-0.20121024-5.el7.noarch
hyperv-daemons-license-0-0.26.20150402git.el7.noarch
hypervkvpd-0-0.26.20150402git.el7.x86_64
iw-3.10-6.el7.x86_64
iwl7265-firmware-22.0.7.0-43.el7.noarch
jansson-2.4-6.el7.x86_64
jasper-libs-1.900.1-29.el7.x86_64
jbigkit-libs-2.0-11.el7.x86_64
keyutils-1.5.8-3.el7.x86_64
kpatch-0.3.1-1.el7_2.noarch
langtable-0.0.31-3.el7.noarch
langtable-data-0.0.31-3.el7.noarch
langtable-python-0.0.31-3.el7.noarch
ledmon-0.79-4.el7.x86_64
libconfig-1.4.9-5.el7.x86_64
libdwarf-20130207-4.el7.x86_64
libfprint-0.5.0-3.el7.x86_64
libjpeg-turbo-1.2.90-5.el7.x86_64
libldb-1.1.25-1.el7_2.x86_64
libnl-1.1.4-3.el7.x86_64
libnl3-cli-3.2.21-10.el7.x86_64
libpng-1.5.13-7.el7_2.x86_64
libreport-2.1.11-32.el7.centos.x86_64
libreport-centos-2.1.11-32.el7.centos.x86_64
libreport-cli-2.1.11-32.el7.centos.x86_64
libreport-filesystem-2.1.11-32.el7.centos.x86_64
libreport-plugin-mailx-2.1.11-32.el7.centos.x86_64
libreport-plugin-mantisbt-2.1.11-32.el7.centos.x86_64
libreport-plugin-rhtsupport-2.1.11-32.el7.centos.x86_64
libreport-plugin-ureport-2.1.11-32.el7.centos.x86_64
libreport-python-2.1.11-32.el7.centos.x86_64
libreport-web-2.1.11-32.el7.centos.x86_64
libselinux-python-2.2.2-6.el7.x86_64
libsss_idmap-1.13.0-40.el7_2.12.x86_64
libsss_nss_idmap-1.13.0-40.el7_2.12.x86_64
libstoragemgmt-1.2.3-4.el7.x86_64
libstoragemgmt-python-1.2.3-4.el7.noarch
libsysfs-2.1.0-16.el7.x86_64
libtalloc-2.1.5-1.el7_2.x86_64
libtar-1.2.11-29.el7.x86_64
libtdb-1.3.8-1.el7_2.x86_64
libteam-1.17-7.el7_2.x86_64
libtevent-0.9.26-1.el7_2.1.x86_64
libtiff-4.0.3-25.el7_2.x86_64
libtirpc-0.2.4-0.6.el7.x86_64
libusb-0.1.4-3.el7.x86_64
libusbx-1.0.15-4.el7.x86_64
libwbclient-4.2.10-7.el7_2.x86_64
libX11-1.6.3-2.el7.x86_64
libX11-common-1.6.3-2.el7.noarch
libXau-1.0.8-2.1.el7.x86_64
libxcb-1.11-4.el7.x86_64
libxml2-python-2.9.1-6.el7_2.3.x86_64
lm_sensors-libs-3.3.4-11.el7.x86_64
lsof-4.87-4.el7.x86_64
mailx-12.5-12.el7_0.x86_64
man-pages-3.53-5.el7.noarch
man-pages-overrides-7.2.4-1.el7.x86_64
mdadm-3.3.2-7.el7_2.1.x86_64
mlocate-0.26-5.el7.x86_64
mtr-0.85-7.el7.x86_64
nano-2.3.1-10.el7.x86_64
net-tools-2.0-0.17.20131004git.el7.x86_64
NetworkManager-team-1.0.6-31.el7_2.x86_64
ntpdate-4.2.6p5-22.el7.centos.2.x86_64
ntsysv-1.3.61-5.el7_2.1.x86_64
pciutils-3.2.1-4.el7.x86_64
perl-5.16.3-286.el7.x86_64
perl-Carp-1.26-244.el7.noarch
perl-constant-1.27-2.el7.noarch
perl-Encode-2.51-7.el7.x86_64
perl-Exporter-5.68-3.el7.noarch
perl-File-Path-2.09-2.el7.noarch
perl-File-Temp-0.23.01-3.el7.noarch
perl-Filter-1.49-3.el7.x86_64
perl-Getopt-Long-2.40-2.el7.noarch
perl-HTTP-Tiny-0.033-3.el7.noarch
perl-libs-5.16.3-286.el7.x86_64
perl-macros-5.16.3-286.el7.x86_64
perl-parent-0.225-244.el7.noarch
perl-PathTools-3.40-5.el7.x86_64
perl-Pod-Escapes-1.04-286.el7.noarch
perl-podlators-2.5.1-3.el7.noarch
perl-Pod-Perldoc-3.20-4.el7.noarch
perl-Pod-Simple-3.28-4.el7.noarch
perl-Pod-Usage-1.63-3.el7.noarch
perl-Scalar-List-Utils-1.27-248.el7.x86_64
perl-Socket-2.010-3.el7.x86_64
perl-Storable-2.45-3.el7.x86_64
perl-Text-ParseWords-3.29-4.el7.noarch
perl-threads-1.87-4.el7.x86_64
perl-threads-shared-1.43-6.el7.x86_64
perl-Time-HiRes-1.9725-3.el7.x86_64
perl-Time-Local-1.2300-2.el7.noarch
pinfo-0.6.10-9.el7.x86_64
pm-utils-1.4.1-27.el7.x86_64
psacct-6.6.1-9.el7.x86_64
pygobject2-2.28.6-11.el7.x86_64
pytalloc-2.1.5-1.el7_2.x86_64
python-augeas-0.5.0-2.el7.noarch
python-chardet-2.2.1-1.el7_1.noarch
python-dmidecode-3.10.13-11.el7.x86_64
python-kitchen-1.1.1-5.el7.noarch
python-pyasn1-0.1.6-2.el7.noarch
python-six-1.9.0-2.el7.noarch
python-slip-0.4.0-2.el7.noarch
python-slip-dbus-0.4.0-2.el7.noarch
quota-4.01-11.el7_2.1.x86_64
quota-nls-4.01-11.el7_2.1.noarch
rdate-1.4-25.el7.x86_64
rdma-7.2_4.1_rc6-2.el7.noarch
rfkill-0.4-9.el7.x86_64
rng-tools-5-7.el7.x86_64
rpcbind-0.2.0-33.el7_2.1.x86_64
rsync-3.0.9-17.el7.x86_64
samba-client-libs-4.2.10-7.el7_2.x86_64
samba-common-4.2.10-7.el7_2.noarch
samba-common-libs-4.2.10-7.el7_2.x86_64
samba-common-tools-4.2.10-7.el7_2.x86_64
samba-libs-4.2.10-7.el7_2.x86_64
satyr-0.13-12.el7.x86_64
scl-utils-20130529-17.el7_1.x86_64
setserial-2.17-33.el7.x86_64
setuptool-1.19.11-8.el7.x86_64
sg3_utils-libs-1.37-5.el7.x86_64
sgpio-1.2.0.10-13.el7.x86_64
smartmontools-6.2-4.el7.x86_64
sos-3.2-35.el7.centos.3.noarch
sssd-client-1.13.0-40.el7_2.12.x86_64
strace-4.8-11.el7.x86_64
sysstat-10.1.5-7.el7.x86_64
systemd-python-219-19.el7_2.13.x86_64
systemtap-runtime-2.8-10.el7.x86_64
tcpdump-4.5.1-3.el7.x86_64
tcp_wrappers-7.6-77.el7.x86_64
tcsh-6.18.01-8.el7.x86_64
teamd-1.17-7.el7_2.x86_64
time-1.7-45.el7.x86_64
traceroute-2.0.19-5.el7.x86_64
unzip-6.0-15.el7.x86_64
usb_modeswitch-1.2.7-6.el7.x86_64
usb_modeswitch-data-20130807-2.el7.noarch
usbutils-007-5.el7.x86_64
usermode-1.111-5.el7.x86_64
vim-common-7.4.160-1.el7.x86_64
vim-enhanced-7.4.160-1.el7.x86_64
vim-filesystem-7.4.160-1.el7.x86_64
WALinuxAgent-2.2.0-1.el7.centos.noarch
wget-1.14-10.el7_0.1.x86_64
words-3.0-22.el7.noarch
xdg-utils-1.1.0-0.16.20120809git.el7.noarch
xfsdump-3.1.4-1.el7.x86_64
xmlrpc-c-1.32.5-1905.svn2451.el7.x86_64
xmlrpc-c-client-1.32.5-1905.svn2451.el7.x86_64
yajl-2.0.4-4.el7.x86_64
yum-langpacks-0.4.2-4.el7.noarch
yum-utils-1.1.31-34.el7.noarch
zip-3.0-10.el7.x86_64

ちなみにCentOS 7.2.1511 Minimalにインストール済みで OpenLogic CentOS-based 7.2 にないものは以下のとおりです。 あまり気にしなくてよさそう。

dracut-config-rescue-033-360.el7_2.1.x86_64
NetworkManager-wifi-1.0.6-31.el7_2.x86_64

OpenLogic CentOS-based 7.2 のディスクレイアウト

OpenLogic CentOS-based 7.2 のディスクレイアウトは以下のとおりです。 エフェメラルなローカルストレージが /mnt/resource にマウントされています。

[root@babatest ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        30G  1.2G   29G   4% /
devtmpfs        955M     0  955M   0% /dev
tmpfs           965M     0  965M   0% /dev/shm
tmpfs           965M  8.3M  957M   1% /run
tmpfs           965M     0  965M   0% /sys/fs/cgroup
/dev/sdb1       3.9G   16M  3.7G   1% /mnt/resource
tmpfs           193M     0  193M   0% /run/user/1000
tmpfs           193M     0  193M   0% /run/user/0

OSディスク( / )はLVMなしのxfs、 エフェメラルはext4です。

# cat /proc/mounts  | grep sd
/dev/sda1 / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0
/dev/sdb1 /mnt/resource ext4 rw,seclabel,relatime,data=ordered 0 0

おまけ:TerraformでAzure Storage Accountを作る

TerraformでAzure Storage Accountを作るの、困るんですよね。

  • 全Azureでユニークな
  • 4〜24文字の英数字小文字

を生成する必要があります。 デプロイのテンプレートでは uniqueString() を使うのですが、 Terraformでは使えないので uuid() で頑張っています。

uuid() を使うときは lifecycle が必須。 これを指定しないと都度生成してしまうので困ったことになります。

resource "azurerm_storage_account" "storage_account" {
  name                = "${lower(element(split("-", uuid()), 1))}${lower(element(split("-", uuid()), 2))}${lower(element(split("-", uuid()), 3))}${lower(element(split("-", uuid()), 4))}"

  ...

  lifecycle {
    ignore_changes = ["name"]
  }
}

この方法、頑張りすぎだと思うので、誰かもっといい方法があれば教えて欲しいです...

アドベントカレンダーはまだまだ続きます。明日以降もお楽しみに!

Microsoft Azure Advent Calendar 2016 - Qiita

株式会社ハートビーツのインフラエンジニアから、ちょっとした情報をお届けします。