AWS再入門 Amazon EC2(Linux)編

2015.12.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

当エントリはDevelopers.IOで弊社AWSチームによる『AWS サービス別 再入門アドベントカレンダー 2015』の10日目のエントリです。昨日9日目のエントリは森永『AWS Config』でした。 このアドベントカレンダーの企画は、普段AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

本日10日目のテーマは『Amazon EC2』をLinux編(EC2全般を含む)とWindows編に分けて2本同日リリースでお伝えします。

目次

サービスの基本的な説明

Amazon EC2はクラウド上で簡単に仮想マシン環境を利用することができるサービスです。すぐに起動可能なマシンイメージを選択して起動することで、数分の作業で環境を構築することが可能です。 以下にAmazon EC2サービスの基本的な機能をおさらいしておきます。

プライベートなネットワーク環境に仮想マシンを構築可能

EC2を構築する上でネットワーク環境の準備が欠かせません。2013年12月4日以降に作成されたAWSアカウントにおいては、EC2-VPCのみサポートとなりました(EC2-Classicは過去のもの)ので、まずは事前にVPCについて理解しておきましょう。

マシーンイメージ(AMI)

EC2を利用する際には、起動イメージとなるAmazon Machine Images(AMI)を選択して起動します。OSインストール、基本的な初期設定済のマシンイメージを利用することで、スピーディにサーバ環境をデプロイすることができます。また、AMIはユーザが作成することもできますので、ベースとなるマシンイメージを作り込んで再利用することやシステムバックアップとしても利用することができます。

選択可能なマシンスペック(インスタンスタイプ )

CPUコア数やメモリ量はユーザが自由に調節できるわけではありません。事前に用意されたインスタンスタイプの中からマシンスペックを選定して利用することになります。歴史のあるEC2ですが、インスタンスタイプは進化(スペックアップと値下げ)を続けています。インスタンスは最新世代がよりハイスペックで割安となりますので、最新世代を利用しましょう。

初めての方にご注意いただきたいのは、インスタンスタイプによってネットワーク性能が異なるという点です。次の料金と合わせて、インスタンスタイプ比較にはシンプルで見やすいので下記ページもよく参照しています(非公式ですので自己責任で!)。

従量課金で利用可能

クラウドのメリットである、使いたい分だけ使う、不要になったらクラウド事業者が捨ててくれる、ところを最大限に活かしましょう。インスタンスタイプごとに定められた料金表に基づいて、利用した分だけ時間単位で利用することが可能です。

長期利用の場合には割引される購入オプションもありますので検討すると良いでしょう。

ブロックストレージとして利用できるEBS

Amazon Elastic Block Store(EBS)は、ブロックストレージとしてEC2からマウントして利用出来る99.999%の耐久性を備えたストレージサービスです。特性や料金の異なるストレージを最大16TBまでのディスクとして利用することが可能です。まずは汎用SSD(gp2)を必要なサイズだけ利用してみましょう。自動圧縮、差分管理で利用出来るスナップショットを利用したバックアップが取得できるのも非常に便利な点です。

とにかく触ってみよう

クラウドのメリットはリードタイム、キャパシティプランニング、初期コストなしで今すぐ試せること。とにかくまず触ってみることをお勧めします。まだEC2に触れたことが無い、という方には、下記記事が参考になるはずです。

利用可能なLinux OS

用意されているAMIの中から代表的なLinuxディストリビューションを取り上げてみたいと思います。

Amazon Linux

EC2を利用するなら、まず最初にAmazon Linuxを利用することを検討しましょう。クラウド環境に最適化された安全で安定した高パフォーマンスな環境を利用することができます。

その他の代表的なディストリビューション

用意されたAMIから以下のようなLinuxディストリビューションを選択可能です。探しているディストリビューションが見つからない場合には、AWS MarketplaceやAMI選択画面から検索してみましょう。

ami_search

仮想化タイプは、準仮想化(PV)ではなく、ハードウェア仮想マシン(HVM)を利用することが現在は推奨されていますので、イメージ選択の際にご注意ください。

初期設定に注意

選択するディストリビューションによって、OSの初期設定が異なりますのでご注意ください。

  • 初回接続ユーザ(ec2-user, ubuntu, centos, root等)
  • NTP自動起動
  • SELinux(RedHat系のみ)
  • AWS APIツール(AWS CLI等)の導入有無
  • ディスクパーティションやファイルシステムサイズ
  • cloud-init(※詳細は後述)

その他、インスタンス起動後の初期設定として、以下の項目も確認しておくと良いでしょう。

  • OSホスト名
  • OSユーザのパスワードやsudo設定
  • TimeZone設定(デフォルトUTC)
  • Locale設定
  • Firewall設定(iptables, firewalld)
  • ディスクサイズ、マウント設定
  • swap設定
  • パッケージ導入、アップデート
  • 不要サービス停止

構築作業の自動化

クラウドらしく利用する為には、環境を繰り返し再利用または置き換えできるようにしておくことが重要です。この点がオンプレミス環境での構築作業とは異なる要素になるのではないかと思います。

cloud-init

Amazon Linuxやその他の一部のAMIにはデフォルトでcloud-initが導入されています。このソフトウェアを利用して、前述のような様々な作業を自動化しています。以下はほんの一例です。

  • ec2-userで初回ログインできるようにユーザ作成、SSH鍵の配置をしてくれる
  • エフェメラルボリュームのマウント、ディスク自動拡張
  • パッケージ管理、更新

Linux OSをAmazon EC2環境で利用する場合には、cloud-initパッケージが導入されているか否か、また、導入されている場合どのような設定(/etc/cloud配下)となっているか、を確認しておくことが非常に重要です。以下にAmazon Linuxのcloud-init設定の一部をご紹介しておきます。

$ cat /etc/cloud/cloud.cfg.d/00_defaults.cfg
# ### DO NOT MODIFY THIS FILE! ###
# This file will be replaced if cloud-init is upgraded.
# Please put your modifications in other files under /etc/cloud/cloud.cfg.d/
#
# Note that cloud-init uses flexible merge strategies for config options
# http://cloudinit.readthedocs.org/en/latest/topics/merging.html

# The top level settings are used as module
# and system configuration.

# A set of users which may be applied and/or used by various modules
# when a 'default' entry is found it will reference the 'default_user'
# from the distro configuration specified below
users:
  - default

ssh_pwauth: false

# Example datasource config
# datasource:
#   Ec2:
#     metadata_urls: [ 'blah.com' ]
#     timeout: 5 # (defaults to 50 seconds)
#     max_wait: 10 # (defaults to 120 seconds)

locale_configfile: /etc/sysconfig/i18n
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
resize_rootfs: noblock
resize_rootfs_tmp: /dev
ssh_deletekeys: true
ssh_genkeytypes: [ 'rsa', 'dsa', 'ecdsa' ]
syslog_fix_perms: ~

# The modules that run in the 'init' stage
cloud_init_modules:
  - migrator
  - rsyslog
  - bootcmd
  - write-files
  - write-metadata
  - growpart
  - resizefs
  - set-hostname
  - update-hostname
  - update-etc-hosts
  - resolv-conf
  - users-groups
  - ssh

# The modules that run in the 'config' stage
cloud_config_modules:
  - mounts
  - locale
  - set-passwords
  - yum-configure
  - yum-add-repo
  - package-update-upgrade-install
  - timezone
  - puppet
  - disable-ec2-metadata
  - runcmd

# The modules that run in the 'final' stage
cloud_final_modules:
  - scripts-per-once
  - scripts-per-boot
  - scripts-per-instance
  - scripts-user
  - ssh-authkey-fingerprints
  - keys-to-console
  - phone-home
  - final-message
  - power-state-change

# System and/or distro specific settings
# (not accessible to handlers/transforms)
system_info:
  # This will affect which distro class gets used
  distro: amazon
  distro_short: amzn
  # Default user name + that default users groups (if added/used)
  default_user:
    name: ec2-user
    lock_passwd: true
    gecos: EC2 Default User
    groups: [ wheel ]
    sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]
    shell: /bin/bash
  # Other config here will be given to the distro class and/or path classes
  paths:
    cloud_dir: /var/lib/cloud/
    templates_dir: /etc/cloud/templates/
    upstart_dir: /etc/init/
  package_mirrors:
    - arches: [ i386, x86_64 ]
      search:
        regional:
          - repo.%(ec2_region)s.%(services_domain)s
          - repo.%(ec2_region)s.amazonaws.com
  ssh_svcname: sshd

# vim:syntax=yaml expandtab

ユーザデータを利用した初期設定の自動化

Amazon LinuxであればEC2起動時にユーザデータからcloud-init対応のコマンドやスクリプトを簡単に実行することができます。ユーザデータを利用する為には、前項のcloud-initパッケージにて初期設定されていることが前提となりますので、他のディストリビューションをご利用の際にはご注意ください。やや古い情報も含まれてはいますが、下記記事もぜひご覧ください。

プログラム可能なインフラ環境

AWS環境のほとんどの操作はAPIコールを通して行うことができます。インフラ構築の自動化もコードにすることで実現可能です。まずはAWS CLIやAWS Tools for Windows PowerShellあたりから試してみることをお勧めします。

あわせて読みたい

今回は再入門ということで、かいつまんでのご紹介となりましたが、AWS EC2には他にも様々な機能とサービスが含まれていますので、挙げればキリが無いくらいです。下記資料も可能な限り目を通してみてください。

さいごに

以上、AWS サービス別 再入門アドベントカレンダー 10日目のエントリ『Amazon EC2(Linux)』編でした。Amazon EC2はAWSの基本となるサービスですので、ほとんど触ったことがないという方は少ないかもわかりませんが、本記事が少しでも多くの方のお役に立てれば嬉しいです。

明日(12/11)は小山のAWS Directory Service編です。お楽しみに!