Swing-by

在宅勤務おじさんのブログ

D-Learning #1 [AWS勉強会 初級編]に参加してきました。

株式会社ディーネットさん主催のAWS勉強会に参加してきました。

WordPressプラグインを使ってS3に静的なページを公開する方法や、バックアップツールを使ったS3へのデータバックアップの方法、AWSの課金体系やIAMについての説明、EC2上でのDisk拡張方法などについての内容でした。

それぞれのハマりどころなどについての説明もあり、今後も使えそうな知識を得ることができたと思います。

短時間ながら初心者の僕にとってはかなり濃い内容の勉強会でしたので、復習がてらブログにまとめようと思います。次回以降も是非参加したいと思っています。

■イベント概要

D-Learning #1 AWS勉強会 初級編

ハッシュタグ

#dlearning_osaka

■スライドおよびメモ的な何か

★S3の基本的な使い方と静的WEBページの作成・公開

WordPressを使った静的なWebサイト作成

  • S3の特徴
    • 安全性:S3へのアクセスはIAMの鍵による認証が可能・通信暗号化・データも暗号化可能
    • 信頼性:99.999999999%の耐久性
    • スケーラブル:使いたい分だけ、容量を利用できる
    • 安価:
      • ストレージ料金:~1TB/月 $0.0033/GB・・・
      • リクエスト料金:1000リクエストあたり$0.0047(PUT/COPY/POST) 10000リクエストあたり$0.0037(GET,その他)
      • S3から外部へのデータ転送料金:~1GB/月 $0/GB ~10TB/月 $0.201/GB ・・・
      • S3へのデータ転送は無料

  • 今回使うAWSののサービスと役割
    • S3:WordPressのコンテンツをアップロードする先
    • EC2:WordPressプラグインでコンテンツを生成させる
    • Route53:DNSサーバ(S3とのひも付け)
    • IAM:EC2で作成したサーバからS3へ操作ができるようにするアカウントを作成

  • S3でBUCKETを作成
    • バケット名:ドメイン名を入力
    • リージョン:TOKYOを入力
    • Editバケットポリシー(JSON形式で編集)
    • WEBページを利用するオプションにチェック
    • index.html/404.htmlのページを設定

  • IAMの設定
    • 新しいユーザの作成
    • ポリシーの作成:Attach User Policy -> Amazon S3 Full・・・

  • 管理画面に設定が出てくる
    • StaticPress:EC2の出力先を設定→変更するボタン
    • StaticPress S3:アクセスキーの設定、リージョンの指定→変更するボタン
    • 再構築ボタンを押すとS3に静的なWEBページがアップロードされる (2回押さないとなぜか動かない)

  • ハマりどころ1(構築を押すと途中で止まる)
    • WordPressにdebug.logが出力される
    • class-S3_helper.php $magic_fileという記述を消すと直った

  • ハマりどころ2(レイアウトがおかしい)
    • style.cssの設定

  • その他
    • EC2は落としても問題ないのか?→静的なページであればOK・検索機能などは使えなくなる

★S3を使ったバックアップ

  • S3
    • バックアップに適した特徴
      • 耐久性
      • 容量無制限
      • ライフサイクル機能
      • 暗号化(自動的に)
      • 低コスト
      • オンプレ/VPS/他クラウドとの連携も可能

  • IAM
    • 「あいえーえむ」が外人に多い読み方
    • AWSでユーザーとそのアクセス権限を管理できるようにする
    • セキュリティのため(S3に限定した権限だけのユーザを作るなど)
    • 認証情報(Access Key Id/Secret Access Key)

  • S3バケットの作り方
    • バケット名の入力(はやいもの勝ち、アンダースコア使えない、ハイフンは使える)
    • リージョンの選択

便利なバックアップツールの紹介

  • AWS CLI
    • syncコマンドを利用して、ローカルフォルダのコンテンツをS3バケットのコピーと同期
    • MacLinuxはpipでインストール
    • cronなどで定期的にデータを同期させて利用
$aws s3 sync myfolder s3://mybucket/myfolder --exclude *.tmp
upload: myfolder/newfile.txt to s3://mybucket/myfolder/newfile.txt
pip install awcli
(例)0 3 * * aws s3 sync myfolder s3://mybucket/myfolder | logger -t <tag>

  • s3cmd
    • AWS CLIのように、コマンドラインからS3を操作
    • S3操作に限定した機能
    • yumコマンドでインストール可能(RHEL系)
    • 世代管理の機能はない
    • データ転送や同期、S3側暗号化などS3の各種操作
    • cronで定期的に処理できる
(例)0 3 * * s3cmd sync /path/to/files s3://<bucket>/ | logger -t <tag>
- S3バケット一覧
s3cmd ls

- S3へデータのアップロード
s3cmd put -r /path/to/files s3://<bucket>

- S3で利用している容量の表示
s3cmd du s3://<bucker>

- S3とのデータ同期
s3cmd sync /path/to/files s3://<bucket>

  • s3cmdの注意点
    • yum利用時は、epel-testingリポジトリを利用
    • 設定をデフォルトで利用しない(S3リージョンの指定など)
    • サーバの時刻を同期しておく(TIME ZONEの設定やNTPの導入】
yum --enablerepo=epel-testing s3cmd
s3cmd -configure
bucket_location = US
bucket_location = ap-northeast-1

  • Duplicity
    • rsyncアルゴリズムを用いた暗号化可能な効率的に帯域を利用するバックアップツール
    • 世代管理・特定の日時でのデータリストア(2日前のデータに戻すなど)
      • S3側はファイル単位の世代管理しかない
    • フルバックアップや増分バックアップ(元で削除したら先も削除される)
    • 暗号化(GPGによるデータの暗号化)
    • 対応ストレージや対応方法豊富

  • duplyというツール経由でDuplicity利用
    • duplyはコマンドが簡単
    • 設定ファイルを使い分けることで、バックアップの方法をかえることができる
$duply <profile> <command>

  • コマンド比較
- バックアップ
$duply <profile> backup
$duplicity <target> s3:///<Endpoint>/<bucket>

- リストア
$duply <profile> restore <target_path>
$duplicity s3:///<Endpoint>/<bucket> <restore_dir>

- 古いバックアップデータの削除
$duply <profile> purgeFull --force
$duplicity remove-all-but-n-full <count> <target>
(指定世代分を残し、それよりも古いものを削除)
  • 設定ファイル(プロファイル)の作成
- 作成
$duply <profile> create

- 場所
/home/<user_name/.duply/<profile>/conf

- rootユーザの場合
/etc/duply/<profile/conf
  • 設定ファイルの編集
GPG_KEY='_KEY_ID_'
- 暗号化する鍵の指定
- コメントアウトすると共通鍵暗号方式になる「GWG_PW」のみ指定

GPG_PW='_GPG_PASSWORD_'
- 鍵のパスフレーズを指定

TARGET='s3://<Endpoint>/<bucket>'
- バックアップの保存先を指定

SOURCE='<backup_source>'
- バックアップ対象を指定

TARGET_USER='<AWS access key ID>'
TARGET_PASS='<AWS secret key>'
- IAMで作成した専用ユーザの情報を記載

MAX_AGE=<age>
- 保存しておくデータの古さ
- s/m/h/D/W/M/Y が指定可能
MAX_AGE=10m の場合(データ削除時に、直前のバックアップから10分以上経過しているものを削除)

MAX_FULLBKP_AGE=<age>
- フルバックアップを行うタイミングの指定
- 前回のバックアップから指定時間を経過していれば、フルバックアップを実行
- MAX_FULLBKP_AGE=1Dの場合
    1日以内にバックアップを実行すると増分バックアップ
    1日以上経過してからバックアップを実行するとフルバックアップ

MAX_FULL_BACKUPS=<n>
- バックアップの削除コマンドを実行しても残すフルバックアップの世代数
  • duplicity/duplyの注意点
    • epelリポジトリからのインストールは古い・バグがある
    • yumではなくソースインストール
    • バックアップデータの削除は明示的に削除
      • 自動で削除してくれない・溜まり続ける
$duply <profile> purgeFull --force
MAX_FULL_BACKUPS=<n>で指定した世代分より前のものは増分を含めて削除される

cronでバックアップとデータ削除を定期的に実行
duply <profile> backup
duply <profile> purgeFull -force

  • 動作確認時の注意点
    • 時刻をずらさない。S3との時間がずれると動かない
    • duply側の設定で時間を短くして動作確認をする

  • S3のバックアップは多岐に渡る
    • Windwosやデータベース
    • S3対応NAS(QNAP/BUFFALOテラステーション)
    • S3対応有償ソフトウェア(ArcServe/SteelStoreなど)
    • AWS Storage Gateway
    • Amanda

AWS料金体系とIAMの話

IAM

IAM(Identify and Access Management)とは - AWS上での様々なアクセス権限を管理するサービスの名称 - 料金はかからない

  • 実際のアカウントの利用例
    • AWSアカウント
    • SIer利用IAMユーザ(業務利用)
    • 顧客利用IAMユーザ(参照のみ)

  • IAMUserを使わなかったら・・・*
    • AWSアカウントの利用者管理が煩雑
    • 作業履歴が取れない
    • その気になれば何でもできてしまう

  • IAMUserを使う場合・・*
    • ユーザ管理が簡易になる
    • 各ユーザの作業履歴を取得可能(CloudTrailと組み合わせて)
    • AWSアカウントが空気の存在になる

  • デモ
    • IAMユーザを作成し、パーミッションを設定する
    • IAM Groupsでユーザーの一括管理
    • IAM Roles

料金体系

  • 料金について
    • EC2について
    • AWS Simple Monthly Calculator で料金のシミュレーションができる

  • 従量課金(一時間毎)
    • ドル払い
    • サーバタイプ(スペック)ごとに料金が異なる
    • 3つの購入オプションがある
      • オンデマンドインスタンス(通常の従量課金タイプ・スペックタイプの変更が自由)
      • リザーブドインスタンス
        • (1年or3年の長期契約として予約金を支払うことで料金の割引が受けられる、キャパシティの予約、スペックを変更すると割引はうけられない)→予約金+時間ごとの割引された料金を支払う。「割引を受ける権利」を買うイメージ ※インスタンスごとに権利が必要
        • Light/Midium/Heavy ※Heavyの場合は停止中も課金対象
      • スポットインスタンス
        • ユーザが価格を指定(入札)するタイプ
        • 市場価格が入札価格を下回る時のみサーバが起動する(市場価格を払う)
          • 83.5% OFFなども!
        • スポットインスタンスの用途:途中でおちても問題ない処理・バッチ処理・検証利用とか

★EC2でのDisk拡張方法、スポットインスタンスの作り方

  • EC2のディスク拡張領域
    1. インスタンスを停止
    2. ボリュームのDetach
    3. スナップショットをとる
    4. スナップショットからボリュームを作成
    5. 大きいサイズで作ったボリュームをインスタンスにアタッチ
    6. インタンスを起動
    7. 起動できたらSSHログインしてOSごとの対応

  • スナップショットの取得、スナップショットからボリュームを作成
    • アタッチされているボリュームを確認
    • Block devices /dev/sda1 ←メモっておく
    • 詳細画面のActionsから DetachVolume → CreateSnapshot → スナップショットのIDが表示 → リンクをクリックすると

  • EBSの作成
    • EBSはインスタンスと同じAZに作る(最小8GB→最大1TB)
    • TokyoリージョンではaとcのAZがあるので、インスタンスと同じAZに作る必要がある

  • ボリュームをインスタンスにアタッチと起動
    • 作ったボリュームを選択してAction→どのインスタンスに取り付けるかを選択、どこにマウントするか(Device)メモったパスを選択
    • サーバーの起動(マネジメントコンソールから起動、しばらくまつ)

  • OSごとの対応*
    • Amazon Linux Disk拡張する上においては一番クセがない
      • アタッチする場所を間違えないように(Device)
      • sudo df -h で拡張できていればOK
    • RHELはPVとHVMで挙動が違う
      • PV AmazonLinuxと同様に起動したら終わっている
      • HVM 起動しただけじゃうまくいかない(サイズが指定したものになっていない)

  • RHEL(HVM)
    • EPELをインストール
    • cloud-utils-growpartをインストール
    • cloud-initの設定に「- growpart」を追加
    • growpartコマンド
    • リブート
    • GPT
    • gdsk,

  • まとめ
    • EC2で容量拡張は可能だが、ダウンタイムが発生する。OS・AMIによってもクセがあるので、工数がかかる作業となる。容量拡張が必要とならない設計にするのがベター
    • DBならRDSを使うとか、ログファイルはS3に保存するとか、EC2以外のサービスと組み合わせる