Tocyukiのブログ

ギターと柔術とプログラミングが好き!

【厳選】AWSアソシエイト試験を突破するための公式ドキュメントおよびチュートリアル

以下に挙げたAWS公式ドキュメントを読んでチュートリアルを実施していればAWSをいじった経験がなくてもアソシエイト試験は軽々突破できるぜよ!!

そう信じて頑張っていこうぜよ!!

コンピューティング

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

ストレージ

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

データベース

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

開発者ツール

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

セキュリティ、アイデンティティ、コンプライアンス

docs.aws.amazon.com

暗号化と PKI

docs.aws.amazon.com

docs.aws.amazon.com

マネジメントとガバナンス

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

ネットワーキングとコンテンツ配信

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

アプリケーション統合

docs.aws.amazon.com

docs.aws.amazon.com

docs.aws.amazon.com

【Python】リストの要素を頻出順でソートする

やりたいこと

例えば以下のようなリストを

[5, 4, 3, 5, 5, 5, 4, 4, 3, 2]

こうしたい場合のTipsです

[5, 5, 5, 5, 4, 4, 4, 3, 3, 2]

できあがったコード

from collections import Counter

a = [5, 4, 3, 5, 5, 5, 4, 4, 3, 2]
counter = Counter(a)
result = [k for k, v in counter.most_common() for _ in range(v)]
print(result)
# [5, 5, 5, 5, 4, 4, 4, 3, 3, 2]

色々やりかたはあると思うけど、とりあえずリストを手っ取り早く要素毎に辞書形式でカウントアップしてくれるCounterと要素数毎に返してくれるmost_common()を使って実装してみた。

まず、対象のリストをCounter()メソッドを使って要素: 要素数の辞書型で返すようにする

a = [5, 4, 3, 5, 5, 5, 4, 4, 3, 2]
counter = Counter(a)

print(counter)
# Counter({5: 4, 4: 3, 3: 2, 2: 1})

ちなみにtype関数で型を見るとcollection型になっている

>>> type(counter)
<class 'collections.Counter'>

これをさらにmost_common()を使って値の昇順で返すようにして、

>>> counter.most_common()
[(5, 4), (4, 3), (3, 2), (2, 1)]

あとは以下のようなイメージのforループを内包表記で記載すればリストの要素を頻出順でソートすることができた!

このforループを

reuslt = []
for k, v in counter.most_common():
    for _ in range(v):
        result.append(k)

こんな感じで内包表記!

result = [k for k, v in counter.most_common() for _ in range(v)]

もっと良い方法等あれば教えてつかーさい^^

GitLab CI + GitLab Pages + Sphinx で最強のドキュメントビルド環境を構築する

最近、仕事で運用しているサービスのドキュメントをもうWordで作りたくないという思いがすごくてSphinxがよさそうなのでいろいろいじってたらGitLab CI + GitLab Pages + Sphinxが最強のドキュメントビルド環境すぎたのでやり方を説明します。

前提条件

  • GitLab.comでアカウント作成済み
  • Sphinxで初回ビルドできる環境を構築済み

やること

  • リポジトリの作成とクローン
  • リポジトリのクローン
  • Sphinxでプロジェクトの作成
  • .gitlab.ymlを作成し、GitLabへPush後、CI結果を確認
  • GitLab Pagesへアクセス

リポジトリの作成とクローン

なんか適当にREADMEだけあるようなリポジトリを作成してクローンしておく

Sphinxでプロジェクトの作成

$ sphinx-quickstart -q -p sphinx-handson -a Tocyuki -v 1.0 sphinx-handson

状態の確認

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        Makefile
        conf.py
        index.rst
        make.bat

GitLabへPushしておく

$ git add .
$ git commit -m 'Create sphinx-handson project'
$ git push

.gitlab.ymlを作成し、GitLabへPush後、CI結果を確認

以下のページを参考にして.gitlab.ymlを作成する

gitlab.com

image: alpine

pages:
  script:
  - apk --no-cache add py2-pip python-dev
  - pip install sphinx
  - apk --no-cache add make
  - make html
  - mv _build/html/ public/
  artifacts:
    paths:
    - public
  only:
  - master

GitLabへPush

$ git add .
$ git commit -m 'Create .gitlab-ci.yml'
$ git push

CI結果がパスしていることを確認 f:id:tocguitar1:20190129014622p:plain

GitLab Pagesへアクセス

以下のページからGitLab PagesのURLを確認する

f:id:tocguitar1:20190129014728p:plain

画面が正常に表示されることを確認

f:id:tocguitar1:20190129014902p:plain

おわりに

GitLabでCI環境作ってしまえばGitLab Pagesへテスト後自動でデプロイされるしめちゃ便利!
GitHubはデファクトスタンダードだけど、GitLabですべて完結できるのは大きいなぁと感じました!

今後はGitLabを中心に使っていこうかなー。

参考情報

今回使用したリポジトリです。 gitlab.com

Sphinxユーザーの会 sphinx-users.jp

Amazon S3で処理速度(パフォーマンス)を上げる方法

タイムスタンプやアルファベット順などの連続するプレフィックスを使用すると、Amazon S3 の特定のパーティションに大量のキーが集中し、そのパーティションの I/O 容量がひっ迫する場合があります。

上記が原因で以下のような問題が発生することがある。

Amazon Simple Storage Service (Amazon S3) のワークロードが急増する (「リクエスト率およびリクエストパフォーマンスに関する留意事項」で説明されているリクエスト率を超える) と、ワークロードに応じて Amazon S3 のパフォーマンスがスケールされません。これに伴って、HTTP 500 や 503 エラーが発生する場合があります。

上記問題に対応するにはどうするか?

ランダムなキー名にすると、I/O の負荷は複数のインデックスパーティションに分散されます。

各オブジェクト名にランダム文字列をプレフィックスとして付加すればよいってことですねー!

aws.amazon.com

【決定版】AWS 認定ソリューションアーキテクト – アソシエイト取得までの道のり

タイトルは釣りですが、業務でちょこちょこAWSいじるようになった(仕向けた)ので、とりあえず資格も取得するぞと意気込んでおりまして、すでに合格したという体でお送りいたします!!

というのも、実はすでに有料のバウチャー付きトレーニングを受けているので取らなければならないのです/(^o^)\

追記

とりあえず以下の流れで大丈夫かな?

試験ガイドの確認

aws.amazon.com

試験ガイドを確認し、どんな試験なのかなぁ〜、というのをなんとなく把握しておく。

分野 試験における比重
分野 1: 回復性の高いアーキテクチャを設計する 34%
分野 2: パフォーマンスに優れたアーキテクチャを定義する 24%
分野 3: セキュアなアプリケーションおよびアーキテクチャを規定する 26%
分野 4: コスト最適化アーキテクチャを設計する 10%
分野 5: オペレーショナルエクセレンスを備えたアーキテクチャを定義する 6%
合計 100%


分野 1: 回復性の高いアーキテクチャを設計する

  • 1.1 信頼性と回復性の高いストレージを選択する。
  • 1.2 AWS サービスを使用した分離機構を設計する方法を定義する。
  • 1.3 多層アーキテクチャソリューションを設計する方法を定義する。
  • 1.4 可用性またはフォルトトレラント性 (あるいはその両方) が高いアーキテクチャを設計する方法を定義する。

分野 2: パフォーマンスに優れたアーキテクチャを定義する

  • 2.1 パフォーマンスの高いストレージとデータベースを選択する。
  • 2.2 キャッシュを使用してパフォーマンスを向上させる。
  • 2.3 伸縮性と拡張性を備えたソリューションを設計する。

分野 3: セキュアなアプリケーションおよびアーキテクチャを規定する

  • 3.1 アプリケーション層をセキュリティ保護する方法を定義する。
  • 3.2 データをセキュリティ保護する方法を定義する。
  • 3.3 単一の VPC アプリケーション用のネットワークインフラストラクチャーを定義する。

分野 4: コスト最適化アーキテクチャを設計する

  • 4.1 コスト最適化ストレージを設計する方法を定義する。
  • 4.2 コスト最適化コンピューティングを設計する方法を定義する。

分野 5: オペレーショナルエクセレンスを備えたアーキテクチャを定義する

  • 5.1 オペレーショナルエクセレンスを実現するソリューションの設計特性を選択する。

AWS Well-Architected フレームワークのホワイトペーパーを確認

aws.amazon.com

AWS Well-Architected フレームワークのホワイトペーパーを確認し、特定のアーキテクチャがクラウドのベストプラクティスに沿っているかどうかの指標を理解する。

AWS クラウドサービス活用資料集を確認

aws.amazon.com

いわゆるブラックベルトですね!主要サービスのものは一通り確認しておくべし!

併せてホワイトペーパーガイドと API リファレンスも見ておくとなおよし!

AWSのサービスを実際にいじってみる

aws.amazon.com

aws.amazon.com

aws.amazon.com

AWSではさまざまなチュートリアルが用意されているので、チュートリアルに沿って実際に手を動かしてみると理解もめちゃくちゃ深まります!というかサービスをまったく使ってなくて試験受けるとなるとほんと暗記だけで終わってしまうので実際のサービスは一通りいじっておくことをオススメします。

サンプル問題と模擬試験の問題内容解析

サンプル問題が公開されているので問題内容の確認と分析を行う。

aws.amazon.com

一通りのインプットが完了したら、模擬試験を受験し、現在の実力の確認と、問題内容のスクリーンショット取得を行い、問題の分析を行いましょう!

おすすめの参考書

あと年末更新されたこの参考書もおすすめです!

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

  • 作者: ??部昭寛,宮?光平,菖蒲淳司,株式会社ソキウス・ジャパン
  • 出版社/メーカー: インプレス
  • 発売日: 2019/01/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

だいたいこのぐらいやれば、きっと大丈夫でしょう!

AWSで見積もりを行う方法

AWSってすごく便利だけど、従量課金で結局いくらぐらいかかるのかがわからないから見積もりを行う方法を調べてみたよ。

公式サイト

aws.amazon.com

AWS Simple Monthly Calculator(簡易見積ツール)

calculator.s3.amazonaws.com

このツールで基本的な要件は満たせそう!

AWS Total Cost of Ownership (TCO) Calculator

https://awstcocalculator.com/

これは主にオンプレミス環境との比較で使うツールかな?

提案とかには使えそう。

というわけで

AWS Simple Monthly Calculator(簡易見積ツール)を使えばやりたいことやれそうな感じなのでした!

UbuntuをZsh+tmux+Vim+Dockerで俺色に染めるまでの道のり

仕事で使ってるtmuxを動かしているサーバーがあるのですが、タワー型のやっすいの使っててそこにCentOS7突っ込んでオフィスに直置きしてます。法定停電でもあった日にゃ育てたtmuxのセッションが死滅し、その明けの出勤は気が重くなること請け合いな感じになっていたので、CentOSからの脱却もかねてAWS上にUbuntuサーバーを立てて俺色に染めてやろうと思ったわけですはい。とりあえず手動でガシガシと構築していって最終的にAnsibleのPlaybookを作るとこまでやっております。

要件

基本的にこの子たちがいればどこにいてもやっていけると思う。

  • Zsh(zplug/ghq/peco)
  • tmux
  • Vim
  • Git
  • Ansible
  • Docker

Ubuntuの良いところ

弊社はほとんどがCentOSでgitやtmuxが最初から入ってなくてしかもyumでインストールできるのはバージョンが古いものになってしまうけど、Ubuntuの18.04.1 LTSはさいしょからtmux 2.6git 2.17.1が入っているのでとっても良いぞってなったのでこれからUbuntuを愛していこうとおもいます。

やること

AWSでのインスタンス作成は割愛します。

  • rootアカウントでのパスワード認証を許可する
  • Zsh(peco/go/ghq)のインストール
  • Ansibleのインストール
  • Dockerのインストール
  • Playbook化

rootアカウントでのパスワード認証を許可する

自分が使い倒すだけのサーバーなのでrootアカウントのパスワードを設定しパスワードログインができるようにします。

# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

/etc/ssh/sshd_configを以下のように編集

- PasswordAuthentication no
+ PasswordAuthentication yes
+ PermitRootLogin yes

sshdの再起動

# systemctl restart sshd

Zsh(zplug/ghq/peco)のインストール

まずはzshを以下のようにインストール

# apt install zsh

お次に公式手順に従いzplugをインストール

github.com

# curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh

pecoのインストール

github.com

cd /usr/src
wget https://github.com/peco/peco/releases/download/v0.5.3/peco_linux_amd64.tar.gz
tar zxvf peco_linux_amd64.tar.gz
cd peco_linux_amd64
cp -p peco /usr/local/bin
peco --version
peco version v0.5.3 (built with go1.10)

ghqを使うためにgoをインストール

apt-get install gcc make
apt-get install golang
go version
go version go1.10.4 linux/amd64

.zshrcの配布

github.com

ghqのインストール

go get github.com/motemen/ghq

※ちなみにghqコマンドにパスを通すために.zshrcまたは.zshenvにに以下を追記する必要があります。

## golang
export GOPATH=$HOME
export PATH=$PATH:$GOPATH/bin

zshをデフォルトのログインシェルにする

chsh -s /usr/bin/zsh

Ansibleのインストール

公式手順にのっとり以下のようにインストールを実施

Installation Guide — Ansible Documentation

apt-get update
apt install software-properties-common
apt-add-repository ppa:ansible/ansible
apt update
apt install ansible

Dockerのインストール

docs.docker.com

以下手順にのっとり以下のようにスクリプトでインストールを実施

qiita.com

curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
# Executing docker install script, commit: 46dc063
+ sh -c apt-get update -qq >/dev/null
+ sh -c apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | apt-key add -qq - >/dev/null
Warning: apt-key output should not be parsed (stdout is not a terminal)
+ sh -c echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic edge" > /etc/apt/sources.list.d/docker.list
+ [ ubuntu = debian ]
+ sh -c apt-get update -qq >/dev/null
+ sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
+ sh -c docker version
Client:
 Version:           18.09.0
 API version:       1.39
 Go version:        go1.10.4
 Git commit:        4d60db4
 Built:             Wed Nov  7 00:49:01 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.0
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.4
  Git commit:       4d60db4
  Built:            Wed Nov  7 00:16:44 2018
  OS/Arch:          linux/amd64
  Experimental:     false
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker your-user

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run
         containers which can be used to obtain root privileges on the
         docker host.
         Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
         for more information.

Playbook化

まだやってないけど、Ubuntuに変えたのでこれからは普通にTravisCIを使った自動テストも組めるぞ~! github.com

そんな感じで

やはりCentOSはちょっと使いづらいなぁと感じつつ、VimからNeoVimへの移行もしないといけないかなぁと思い始めたのでまた別の機会にまとめようかと思いますー!

AnsibleのroleテストをTravisCIで行う

AnsibleのroleテストはTravisCIが主流だというので試してみようじゃないという趣旨の記事です。

やること

GitHubにリポジトリを作成

以下のような感じで適当にリポジトリを作成しておく

f:id:tocguitar1:20181024161625p:plain

ansible-galaxyコマンドでroleのひな型を作成

作成したリポジトリをClone

$ git clone https://github.com/Tocyuki/ansible-role-travisci-handson.git

roleのひな型を作成する

$ ansible-galaxy init -f ansible-role-travisci-handson
- ansible-role-travisci-handson was created successfully

こんな感じのディレクトリ構成となる

$ tree ansible-role-travisci-handson
ansible-role-travisci-handson
├── LICENSE
├── README.md
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

8 directories, 9 files

.travis.ymlを作成

tasks/main.ymlに適当に記述しておく

---
# tasks file for ansible-role-travisci-handson
- name: Debug Message
  debug:
    msg: 'Hello World!!!'

.travis.ymlに以下のように記載

---
language: python
python: 2.7
sudo: false

addons:
  apt:
    packages:
      - python

install:
  - pip install ansible
  - ansible --version
  - printf '[defaults]\nroles_path=../' >ansible.cfg

script:
  - ansible-playbook tests/test.yml -i tests/inventory --syntax-check
  - ansible-playbook tests/test.yml -i tests/inventory -C
  - ansible-playbook tests/test.yml -i tests/inventory

TravisCI側で実行対象のリポジトリを設定する

TravisCIへログインを行う

Travis CI - Test and Deploy Your Code with Confidence

f:id:tocguitar1:20181024164932p:plain

右上のアカウントアイコンをクリックし、「Setting」を選択し、対象のリポジトリを有効にする

f:id:tocguitar1:20181024165239p:plain

GitHubへプッシュしTravisCIでテストされることを確認

tasks/main.yml.travis.ymlgit addする

$ git add tasks/main.yml .travis.yml

git commitを行う

$ git commit -m "Add tasks/main.yml .travis.yml"
[master c367d3a] Add tasks/main.yml .travis.yml
 2 files changed, 23 insertions(+), 1 deletion(-)
 create mode 100644 .travis.yml

git pushを実行

$ git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 655 bytes | 0 bytes/s, done.
Total 5 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/Tocyuki/ansible-role-travisci-handson.git
   9edd540..c367d3a  master -> master

tests/test.ymlconnection: localを入れわすれてビルドに失敗したので修正後、再度git push実行

- hosts: localhost
  connection: local
  remote_user: root
  roles:
    - ansible-role-travisci-handson
$ gaa ; gcmsg "Fix tests/test.yml"; gp
[master 222b373] Fix tests/test.yml
 1 file changed, 2 insertions(+), 1 deletion(-)
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 452 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/Tocyuki/ansible-role-travisci-handson.git
   c367d3a..222b373  master -> master

TravisCI上でテストが走ることを確認

f:id:tocguitar1:20181024170136p:plain

そして正常に完了することを確認

f:id:tocguitar1:20181024172120p:plain

READMEにテスト結果のバッチをつける

矢印部分をクリックし、Markdownを選択するとなんかでてくるのでそれをコピーしてREADME.mdに張り付ける

f:id:tocguitar1:20181024174122p:plain

こんな感じで記載してGitHubへPushする

git diff README.md
diff --git a/README.md b/README.md
index 225dd44..044d484 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,8 @@
 Role Name
 =========

+[![Build Status](https://travis-ci.org/Tocyuki/ansible-role-travisci-handson.svg?branch=master)](https://travis-ci.org/Tocyuki/ansible-role-travisci-handson)
+
 A brief description of the role goes here.

 Requirements

GitHubで以下のように表示されていることを確認

f:id:tocguitar1:20181024174527p:plain

おわりに

超簡単にですがこれでAnsible roleの自動テストができるようになったぞ!

ただ、TravisCIはUbuntuかMacにしか対応しておらず、そのほかのディストリビューションでやろうとした場合、Dockerを使ったりする必要があるのでそれはまたの機会に!

今回のリポジトリはこちら!

github.com

Windows10でHyper-Vを無効化できないときの対応

Windows10ではDocker for WindowsとVirtualBoxが混在できないので、Docker使ってて、VirtualBox使いたくなると結構めんどうなんですよね。。。

なぜかぼくの端末ではインターネット上に転がっている情報をそのまま試すだけではうまくいかず、ちょいとアレンジが必要だったのでメモしておきます。

bcdedit /set {current} hypervisorlaunchtype off

とりあえず上記コマンドを実行して再起動すれば大丈夫でした!

わけわからんちん!

久しぶりに研修を受けた、そんな一日

今日からRedHat主催の「Automation with Ansible」の研修を受けに品川まで行ってまいりました。

↓これ

RHD407 : Automation with Ansible|CTC教育サービス 研修/トレーニング

初日はごくごく基本的なことしかやらなかったので、演習をどんどん進めて最終日に色々と質問しようかなぁと企んでおります。

この研修を参考に社内向けのハンズオン開催しようと思っているのですが、どうやらlightbulbがもとになってるようなので、もうlightbulbをそのまま使うのがなんだかんだ良いかもなぁとか思ったり。

Ansible lightbulb

github.com

エクササイズ

github.com

課題

github.com

回答

github.com

うん、なんだかいけそう。

お昼ごはん

www.mrchicken.jp

ルーティン作れなさすぎてツライ・・・。けんすうさんに癒やされました。

phpIPAMで定期ホストチェックとホスト自動登録をする方法

最近、phpIPAMを弄り倒しております。

こやつかゆいところに手が届くのか届かないのかなかなか触り始めるといろいろうまくいかなかったり、意外と使いにくい部分があったりでいろいろと発見がある毎日でございます。

とりあえず、ホストの存在確認と、ホストの自動登録は定期実行しておきたいなと思いまして、どうすればよいのかなぁと調べてみるとやはりcronで実行させるようですね。

以下のような感じで、実行ユーザーのcronに記載してあげればOKでした!

$ sudo crontab -l -u apache
*/15 * * * * /bin/php /var/www/phpipam/functions/scripts/pingCheck.php
*/15 * * * * /bin/php /var/www/phpipam/functions/scripts/discoveryCheck.php

AWS上にEC2 + RDS(MySQL)の構成でZabbix4.0を構築する

というわけで、監視周りも改善させていくぞ〜!

というのも現在の業務でのZabbixの構成が以下のような感じで各ロケーションにZabbixサーバーを構築し、設定もそれぞれのロケーションに構築しているZabbixサーバーで行っているという状況。

f:id:tocguitar1:20180812151759p:plain

現在、本番運用しているデータセンターが3箇所あり、基本的には同じアプリケーションを運用しているので、各データセンターにZabbix Serverがいると結構めんどくさい。

めんどくさいポイント&デメリットしては以下が挙げられる。

  • 同じアプリの監視を追加・修正するのに全部のZabbixサーバーの設定を変更しなければならない
  • バージョンアップも各Zabbixサーバーで行わなければならず、現状適切にバージョンアップされていない(2.2とかのZabbixが存在していたりする笑)
  • 各データセンターの監視データの確認をそれぞれのZabbixサーバーで見なければいけない。(超めんどくさい!)
  • スクリーンの作成も各Zabbixサーバーで行わなければいけない。(めんどくさすぎてスクリーン作られていない笑)
  • アラート通知の設定も各Zabbixサーバーでやらなければいけない。
  • 以上に挙げたようにめんどくさすぎて監視内容や通知手段、設定内容等に各Zabbixサーバーで差があり、もう監視どころじゃねぇ!

という感じで挙げたらキリがないのですが、そんな感じなのでこういう構成にしようと思います。

f:id:tocguitar1:20180812154055p:plain

構成としてはZabbix Proxy構成に変更するという感じですかね。

AWS環境をもうひとつのデータセンターと見立てて、そこを中心とした運用システムを構築していきたいなぁという目論見であります。

環境

というわけで以下の環境でZabbixサーバーを構築してきます。

  • Zabbix4.0alpha
  • EC2(CentOS7.5)
  • RDS(MySQL5.7)

構築手順

Zabbixのインストール

  • RPMのインストール
$ sudo rpm -i https://repo.zabbix.com/zabbix/3.5/rhel/7/x86_64/zabbix-release-3.5-1.el7.noarch.rpm
  • Zabbixサーバー、フロント、エージェント、MySQLのインストール
$ sudo yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-get mysql

DB設定

  • データベースの作成
$ mysql -u root -h mysql.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 447
Server version: 5.7.22-log Source distribution

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.03 sec)

MySQL [(none)]> grant all on zabbix.* to zabbix@`%` identified by '<Password>';
Query OK, 0 rows affected, 1 warning (0.06 sec)
  • テーブル作成および初期データの登録
$ sudo zcat /usr/share/doc/zabbix-server-mysql-4.0.0/create.sql.gz | mysql -u root -h mysql.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -p zabbix
  • zabbix_server.confにDB接続情報を記載
$ sudo diff /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.org
92d91
< DBHost=mysql.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
127d125
< DBPassword=<Password>

その他設定

  • Zabbixの自動起動設定およびZabbixの起動
$ systemctl start zabbix-server
$ systemctl status zabbix-server
  • httpdの設定ファイルでタイムゾーンを設定
$ sudo vi /etc/httpd/conf.d/zabbix.conf
- # php_value date.timezone Europe/Riga
+ php_value date.timezone Asia/Tokyo
  • あとはhttp:// IPアドレス or サーバー名/zabbixにアクセスし、初期設定を行う!

そんな感じで

あとは各ロケーションにZabbix Proxyを配置して実際に監視データを取得していきたいと思います〜!

参考

dev.classmethod.jp

phpIPAMをEC2 + RDS(MySQL)の構成で使い倒す 〜インストール編〜

危機管理!!!

というわけでさっそくAWS上にphpIPAMを構築してみる!

環境

  • AWS RDS(MySQL)
  • AWS EC2(CentOS7.5)
  • phpIPAM 1.4

構築手順

  • 以下の公式の手順を参考にしました

phpipam.net

必要なパッケージのインストール

$ sudo yum install httpd mysql php php-cli php-gd php-common php-ldap php-pdo php-pear php-snmp php-xml php-mysql php-mbstring git

CentOS7の標準パッケージに含まれないphp-mcryptをEPELからインストール

$ sudo yum install epel-release
$ sudo yum install php-mcrypt

PHPの設定

  • タイムゾーンの設定
$ grep timezone /etc/php.ini
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =
date.timezone = Asia/Tokyo

Apacheの設定

  • phpIPAMを/var/www/phpipamにインストールするための設定
$ cat /etc/httpd/conf.d/phpipam.conf
Alias /phpipam/ /var/www/phpipam/
<Directory "/var/www/phpipam">
    require all granted
</Directory>
  • Apacheの起動および自動起動設定
$ sudo systemctl enable httpd
$ sudo systemcrl start httpd

phpIPAMのインストール

  • git cloneを行い、モジュールをCloneする
$ cd /var/www
$ sudo git clone https://github.com/phpipam/phpipam.git
Cloning into 'phpipam'...
remote: Counting objects: 18778, done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 18778 (delta 8), reused 17 (delta 7), pack-reused 18752
Receiving objects: 100% (18778/18778), 14.13 MiB | 4.82 MiB/s, done.
Resolving deltas: 100% (13517/13517), done.
  • パーミッション、実行権限の変更を行う
$ sudo chown -R apache:apache /var/www/phpipam
$ cd /var/www/phpipam
$ find . -type f -exec chmod 0644 {} \;
$ find . -type d -exec chmod 0755 {} \;

phpIPAMの設定

  • 設定ファイルの作成
$ cp config.dist.php config.php
$ chown apache:apache config.php
$ chmod 640 config.php
  • DB接続情報とベースURLを以下のように修正
$ sudo diff config.dist.php config.php
6c6
< $db['host'] = 'localhost';
---
> $db['host'] = 'mysql.xxxxxxxxxxxxxxxxxxxxxxxxxx.rds.amazonaws.com';
105c105
< define('BASE', "/");
---
> define('BASE', "/phpipam/");

インストール設定

  • http://サーバ名 or IP アドレス/phpipam/ にアクセスし、「New phpipam installation」を選択する

f:id:tocguitar1:20180811162605p:plain

  • 「Automatic database installation」を選択すると、config.phpに指定したDBに自動的にデータベースとテーブルの作成が行われる

f:id:tocguitar1:20180811162613p:plain

  • MySQL username/MySQL password の欄に、データベース作成の権限を持つユーザのユーザ名とパスワードを入力し、「Install phpipam database」ボタンを押す
    • MySQL database location/MySQL database name には、config.phpに設定した値が表示される

f:id:tocguitar1:20180811162616p:plain

  • 「Database installed successfully!」と表示されたら、「Continue」ボタンを押してインストール完了!

f:id:tocguitar1:20180811162620p:plain

アップデートする場合

  • phpIPAMのバージョンを上げる場合はgit pullを実施するだけ!

phpipam.net

おわりに

とりあえずインストールできたので、これからどんどん使い倒すぞ〜!