• AWS活用セミナー「AWSの利用を躊躇されている方々へ」

    2015年10月23日にアイティメディア主催**「主導権はユーザー側が持つ 企業のためのAWS徹底活用セミナー」**に登壇いたしました。

    当日セミナーにお越しいただけなかった方にもお伝えできるよう本ブログにてコンテンツとしてお届けいたします。

    セミナー概要

    AWSの利用を躊躇されている方々へ

    株式会社ISAO infra R&D プロジェクトリーダー 片貝 力也

    本日はAWSの利用を躊躇している方々に向けて、利用当初の注意点や問題になりやすい事項を簡単に紹介させて頂きます。具体的な実例をもとにご説明させて頂きたいと思いますが、既に利用いただいている方々にとっては物足りない内容になってしまいます。その点、予めご了承ください。また最近ニーズが高まっているAWSでのセキュリティ対策についてもご紹介いたします。

    AWS活用セミナー アジェンダ

    EC2以外のサービスを利用しますか?

    AWS(Amazon Web Searvices)を利用される予定の方々に質問です。 EC2以外のサービスを利用しますか?

    もちろんEBSやELB、S3なども利用しないとサービスとして成り立たないかと思いますが、現状AWSにて構築を検討する際に、まずAWSで提供しているマネージド込みのサービスをどこまで使用するかが一つの重要なポイントになります。EC2上に自前でミドルウェア環境を構築していくのか、RDSやElastiCashなどミドルウェアまで揃えているマネージドサービスを利用するのか、どこまで利用するのか一度検討ください。ただマネージドサービスを利用することで構築の手間が大幅に省けますし、運用の手間も簡略化されるため、工数が減りコスト減にも繋がりますので、利用される事を通常お勧めします。

    しかし、1点気を付けなければならないのがベンダーロックイン(※)状態です。 数年毎に別のシステムへの移設を検討しなければならない場合は、マネージドサービスを利用していると移設検討が非常に困難となってしまいます。ただAWS環境から他環境への移設メリットは無い、もしくは薄いケースが殆どだと思いますので、現状ですとマネージドのサービスを躊躇せずに利用して問題ないと思います。またAWS環境にて安定的なサービス運用をする為にもマネージドのサービスを利用する事は近道となります。

    (※)ベンダーロックイン 特定の環境・技術に固定され、他との互換性が損なわれるとこと

    ただシステム環境以外にも構築運用メンバーの技術スキルもAWSに踏襲・専属化していってしまいますので、昨今のインフラメンバーでは、オンプレミス環境のネットワーク設計や導入作業が出来ないといった事態も発生してます。

    インフラエンジニアを抱えていらっしゃる企業様は、運用リソースの配置や今後のスキルパスまで考えていくことが必要です。

    AWSの月額費用って本当に安いの?

    AWS利用で発生する月額費用は、規模がある程度大きくなると決して安くは見えません。

    特にオンプレミスで構築した場合のCPUのコア数やハードウェアのパフォーマンス等を、そのまま踏襲してAWSで試算をすると、1年や複数年のスパンでハウジング費用と比較すると高くなるケースが多々あります。ただし、これは単純に発生する月額費用を比較した場合の話なので、実際は見えにくい運用でのコストを加えて比較すべき内容です。

    AWSは構築運用だけでなく、設計や管理、オンサイト作業のコストを除外できることも大きなメリットとなります。 例えばデーターセンターに行く必要がないというのが分かりやすい一例です。それらを計算に入れると正しいAWS費用の試算ができます。 またインスタンスの稼働を100%ではなく、実負荷を想定した変動性でコスト試算できるとよりメリットが見やすくなります。

    リザーブドインスタンスって?

    さらに、AWSにはリザーブドインスタンス(RI)という年間契約でお安くなるプランもございます。 このRIは1年もしくは3年契約での割引サービスだけでなく、「リザーブド」の名前が示すようにインスタンスの起動が約束されます。 契約しているとインスタンスの数が確保でき、稀にある「リソースが枯渇していて必要なインスタンスの数が上がらない」といった心配も無くなります。

    AWS活用セミナー

    インスタンスの起動に失敗した場合、数分〜数十分待ってから起動させる必要があるのですが、RIは契約分のリソースが確保される事になります。 手動でオペレーションしている場合は大きな問題にはなりませんが、規模が大きくなり自動化等を取り入れていると、スムーズなインスタンスの起動は重要な課題となります。

    AWSのメンテナンスってどうなの?

    EC2のメンテナンスには主に2種類あります。

    • アップデート用メンテナンス
    • リタイアメント用メンテナンス
    AWS活用セミナー

    1つ目はAWSが実施するセキュリティアップデートです。こちらは特定のタイミングを指定し、AWS側が実施するメンテナンスとなります。なので環境や対象によっては、そのタイミングでサービスを停止、メンテナンスに切り替える必要があります。ただライブマイグレーション等で対応できる範囲も増えているようなので、今後は年に1回あるかどうかだと考えてます。

    ...
  • zabbixのグラフで日本語が文字化けを直す

    おはようございます。インフラ宮下です。

    zabbixのグラフ設定は標準では日本語が表示されません。 ※アイテム名に日本語を使っている場合です。

    動作環境はこんな感じです。

    OS:CentOS release 6.5 (Final) バージョン:zabbix-server-2.2.3

    「監視データ」→「グラフ」で作成したグラフを見てみると下記のように日本語の部分が□になってしまいます。 これはアイテムに日本語を使っていて画像変換時にフォントがないのが原因です。

    zabbix-graph

    まずはフォントがおかれている場所を確認します。

    # ls /usr/share/zabbix/fonts/
    graphfont.ttf
    

    次にOSに搭載されているフォントを確認します。

    $ ls /usr/share/fonts/
    dejavu  ipa-gothic  ipa-mincho  ipa-pgothic  ipa-pmincho  vlgothic
    

    IPAを使います。ただシンボリックリンクを張るだけでOKです。 特にzabbix-serverの再起動も必要ないです。

    # ln -s /usr/share/fonts/ipa-pgothic/ipagp.ttf /usr/share/zabbix/fonts/ipagp.ttf
    # vi /usr/share/zabbix/include/defines.inc.php
    (変更箇所)
    7                                                                                                                             
    39c39
    < define('ZBX_GRAPH_FONT_NAME',         'ipagp'); // font file name
    ---
    > define('ZBX_GRAPH_FONT_NAME',         'graphfont'); // font file name
    86c86
    < define('ZBX_FONT_NAME', 'ipagp');
    ---
    > define('ZBX_FONT_NAME', 'graphfont');
    

    zabbix-graph-after

    ...
  • 【AWS】CloudWatchを使ってEC2インスタンスのリソース状況を確認する

    はじめまして、ディレクターの白川です。

    AWSではGUIから様々なサービスが利用出来るので、ディレクター職の自分にも非常に優しくていいですね。

    さて、Webサービスを運用していくためには、インフラの稼働状況を監視することが必要不可欠です。 機器自体の死活監視に加え、メモリやCPU、ディスクなどのリソース使用状況を常にモニタリングし、負荷状況に応じて適切な対応を行わなければなりません。

    そこで今回は、AWSが提供するクラウド監視ツール、CloudWatchを利用してEC2インスタンスのリソース使用状況を確認する方法についてご紹介します。

    1.CloudWatchの確認方法

    AWSマネージメントコンソールにアクセスし、メニューの中からCloudWatchを選択します。

    Image-1

     

    画面左の「Dashboard」の中から、[EC2]を選択します。

    Image-2

     

    インスタンス毎のIDとメトリクス名が表示されます。グラフを表示したいインスタンスとメトリクスの組み合わせを確認し、チェックボックスにチェックを入れます。

    Image-3

     

    画面下にグラフが表示されます。 ※図はCPU使用率を表示したイメージです。

    Image-4

     

    2.グラフの見方

    [Average]というドロップダウンボックスが、各データの集計方式(Statistics)を指します。 それぞれ、平均(Average)、最小値(Minimum)、最大値(Maximum)、合計(Sum)が選択出来ます。 ※データサンプル数(Data Samples)は、サンプルとして取得したデータの数になります。こちらは、CPUやメモリなどの使用状況を確認する上ではあまり使用しないかと思います。

    Image-5

     

    3.CloudWatchで確認出来る、EC2の標準メトリクス

    CloudWatch上で確認出来るEC2のメトリクスなどは、下記のAWSドキュメントを確認ください。

    4.まとめ

    CloudWatchでは、今回ご紹介したEC2のリソース以外にも、RDSやELB、Auto Scalingなど様々なAWSリソースの監視が可能です。 ただし、CloudWatchの統計は2週間しか保存されないため、長期的なスパンでのリソース分析には向きません。 そういった場合は、Zabbixなどの高機能な監視ソフトウェアの利用を検討する必要があります。

    ISAOでも、Zabbix等を利用した高レベルなクラウド監視実績が多数ありますので、ご検討の際は是非ともお声掛けください。

    ...
  • Chefで既存手順のレシピを書く5(munin、zabbix)

    おつかれさまです。小宮です。

    前回に引き続き、munin,zabbixの手順のレシピをご紹介します。レシピはこの記事でおしまいです。
    記事の最後にはレシピの適用方法を記載します。

    ・muninのレシピ

    # cd /opt/src/rpms
    # mkdir -p /root/chef-repo/site-cookbooks/munin/files/default/rpms
    # mkdir -p /root/chef-repo/site-cookbooks/munin/files/default/var/www/html/munin
    # mkdir /root/chef-repo/site-cookbooks/munin/files/default/etc/munin/plugin-conf.d
    # cp -p /etc/munin/munin.conf /root/chef-repo/site-cookbooks/munin/files/default/etc/munin/
    # scp -Cp xxx-web01:/etc/munin/munin-node.conf /root/chef-repo/site-cookbooks/munin/files/default/etc/munin/
    # cp -p /var/www/html/munin/.htaccess /root/chef-repo/site-cookbooks/munin/files/default/var/www/html/munin/
    # cp -p /etc/munin/plugin-conf.d/munin-node /root/chef-repo/site-cookbooks/munin/files/default/etc/munin/plugin-conf.d/
    # tar cf /root/chef-repo/site-cookbooks/munin/files/default/rpms/munin-node-rpm.tar ./munin-node-rpm/
    # tar tf /root/chef-repo/site-cookbooks/munin/files/default/rpms/munin-node-rpm.tar ./munin-node-rpm/
    # tar cf /root/chef-repo/site-cookbooks/munin/files/default/rpms/munin-serv-rpm.tar ./munin-serv-rpm/
    # tar tf /root/chef-repo/site-cookbooks/munin/files/default/rpms/munin-serv-rpm.tar ./munin-serv-rpm/
    
    # cd /root/chef-repo/site-cookbooks/munin/recipes
    # touch munin-node.rb munin-server.rb munin-node-db.rb munin-node-web.rb
    # vi munin-node.rb
        filename = "munin-node-rpm.tar"
        cookbook_file "/tmp/#{filename}" do
          source "rpms/#{filename}"
          mode 0644
        end
    
        package "perl-DBI" do
          not_if "rpm -qa|grep perl-DBI"
          action :install
        end
    
        script "install_munin-node" do
          not_if 'ls /etc/munin/munin-node.conf'
          interpreter "bash"
          user        "root"
          code <<-EOL
            cd /tmp
            tar xf /tmp/#{filename}
            rpm -i /tmp/munin-node-rpm/perl-Dig*
            rpm -i /tmp/munin-node-rpm/perl-{C*,H*,I*,L*,N*,X*,li*}
            rpm -i /tmp/munin-node-rpm/perl-DBD-Pg*
            rpm -i /tmp/munin-node-rpm/munin-*
            cp -p /etc/munin/munin-node.conf{,.org}
          EOL
        end
    
        cookbook_file "/etc/munin/munin-node.conf" do
          source "etc/munin/munin-node.conf"
          mode 0644
        end
    
        script "link_plugins" do
          not_if 'ls /etc/munin/plugins/tcp'
          interpreter "bash"
          user        "root"
          code <<-EOL
            rm -f /etc/munin/plugins/*
            ln -s /usr/share/munin/plugins/cpu /etc/munin/plugins/cpu
            ln -s /usr/share/munin/plugins/if_err_ /etc/munin/plugins/if_err_eth0
            ln -s /usr/share/munin/plugins/if_ /etc/munin/plugins/if_eth0
            ln -s /usr/share/munin/plugins/iostat /etc/munin/plugins/iostat
            ln -s /usr/share/munin/plugins/load /etc/munin/plugins/load
            ln -s /usr/share/munin/plugins/memory /etc/munin/plugins/memory
            ln -s /usr/share/munin/plugins/tcp /etc/munin/plugins/tcp
            ln -s /usr/share/munin/plugins/df /etc/munin/plugins/df
          EOL
        end
    
        service "munin-node" do
          supports :status => true, :restart => true
          action [ :enable, :start ]
        end
    
    
    # vi munin-server.rb
        filename = "munin-serv-rpm.tar"
        cookbook_file "/tmp/#{filename}" do
          source "rpms/#{filename}"
          mode 0644
        end
    
        script "install_munin-serv" do
          not_if 'ls /etc/munin/munin.conf'
          interpreter "bash"
          user        "root"
          code <<-EOL
            tar xf /tmp/#{filename}
            rpm -i /tmp/munin-serv-rpm/*
            cp -p /etc/munin/munin.conf{,.org}
          EOL
        end
    
        cookbook_file "/etc/munin/munin.conf" do
          source "etc/munin/munin.conf"
          mode 0644
        end
    
        service "munin-node" do
          supports :status => true, :restart => true
          action [ :enable, :start ]
        end
    
        cookbook_file "/var/www/html/munin/.htaccess" do
          source "var/www/html/munin/.htaccess"
          mode 0644
        end
    
    # vi munin-node-web.rb
        script "link_plugins_web" do
          not_if 'ls /etc/munin/plugins/apache_accesses'
          interpreter "bash"
          user        "root"
          code <<-EOL
            ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
            ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
          EOL
        end
    
        service "munin-node" do
          supports :status => true, :restart => true
          action [ :enable, :restart ]
        end
    
    # vi munin-node-db.rb
        script "link_plugins_db" do
          not_if 'ls /etc/munin/plugins/mysql_threads'
          interpreter "bash"
          user        "root"
          code <<-EOL
            ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/mysql_queries
            ln -s /usr/share/munin/plugins/mysql_slowqueries /etc/munin/plugins/mysql_slowqueries
            ln -s /usr/share/munin/plugins/mysql_threads /etc/munin/plugins/mysql_threads
          EOL
        end
    
        cookbook_file "/etc/munin/plugin-conf.d/munin-node" do
          source "etc/munin/plugin-conf.d/munin-node"
          mode 0644
        end
    
        service "munin-node" do
          supports :status => true, :restart => true
          action [ :enable, :restart ]
        end
    

    role毎にちがうコマンド実行するとかひとつのレシピ内でやる方法ってあるのかが気になります。ifとかでできるんでしょうか。
    今回はそんな方法はわからなかったので、webとdbそれぞれ用のレシピを分けて作りました。
    roleに適用する順序は、munin-node.rbを最初にしないとプラグインが最初全部消される仕様です。(レシピは上から順に実行されます)

    ...