SlideShare a Scribd company logo
プロビジョニング入門
AWSとAnsibleによるLAMP環境構築
By Yasushi Odashima
2016年11月4日(金)
■スライドシェアURL
http://www.slideshare.net/ssuser24564a/awsansiblelamplaravel-68179035
1.登場人物
2.作業範囲
3.環境構成
4. AWS インスタンス
5. Ansible 重要用語
6.ベストプラティクス構造
7.プレイブック連携
8.プロビジョニング Section 1
9.プロビジョニング Section 2
10.まとめ
目次
1.登場人物
• AmazonWebService
• Amazonのクラウドサービス。今回ではAnsibleサーバとAPPサーバとして使用す
る。OSはLinux6を基本としたAmazonLinuxを採用。
• Ansible
• 構成管理ツール。インフラ作業をコード化することでプロビジョニング作業を自動化
する。今回はAPPサーバに対してOSインストール以降のすべての作業をプロビジョ
ニングする。
2.作業範囲
目的 :
自宅や物理サーバが用意できない環境でのLAMP構築とAPPインストールのプロ
ビジョニング実践
Apache Install & Edit
PHP Install & Edit
Mysql Install & Edit
App Install
Database Edit
OS Install & Edit AWS
Code
※プロビジョニング:サーバに対してミドルウェアのインストールや設定等の環境構築を行うこと
3.環境構成図
AnsibleServer
----------------------------
EC2 : Amazon Linux
APPServer
----------------------------
EC2 : Amazon Linux
Server構築、設定 http://<PublicIP>
APPServer構築における工程をコード化しプロ
ビジョニングを行う
4.AWS インスタンス
構成内容 構成値 内容
1 アカウント作成 hogehoge 特になし
2 AMI選択 Amazon Linux 無料枠内でできるシンプルな構成を選択。
3 インスタンスタイプ t2maicro サーバのスペックを決定する
4 ネットワーク 172/31/0.0/16 デフォルトをそのまま使用
5 サブネット subnet-9024c3e7 データセンターの拠点を選択する。
6 自動割り当てパブリックIP 有効化 インターネットからアクセス可能にする。
7 ストレージ 8GB 無料枠内では30GBまで設定可能
8 タグ APPServer インスタンスの名称
9 セキュリティグループ HTTP,HTTPS,ICMP デフォルトではSSHのみしか許可していない
10 Key Hogehoge.pem インスタンスログイン時に使用する秘密鍵
EC2(AmazonLinux)を構築するまでの内容。基本無料枠を使用する。
5.Ansible重要用語
用語 内容
1 インベントリファイル 実行するモジュールや処理内容、使用する変数の値等を記載するYaml形式のファイ
ル
2 プレイブック Ansibleで実行するプログラムを総称。Ansibleの持つプログラムを記載し処理の内容
を記載するインベントリファイル
3 ロール 複数のモジュールを組み合わせの処理を行うインベントリファイル。
4 モジュール プレイブックより呼び出されるPythonファイル。Pythonファイルを自作しモジュールとし
て実行可能。
5 ベストプラクティス Ansibleで推奨されているディレクトリ構造。自作モジュールやロールを呼び出す上で
の理想的な構造。
構成管理Ansibleにおける重要用語。以降のスライドにて詳細を記載。
6.ベストプラティクス構造
/playbook
/roles
/group_vars
/lamp.yml
/hosts
/lamp.yml
/1_Apache
/2_php
/3_mysqlroles配下を読み込む(Site.yml)
プレイブックで使用する変数を記載
それぞれの処理を記載する
/library
自作モジュールの格納(未使用)
プレイブックは保存、管理を行うことで「hosts」に
記載されたマシンすべてに同様の処理を行う。
7.プレイブック連携
ベストプラティクス構造で作成することで ---
- name: apache Install Apache
yum: name=httpd
- name: apache Make PHP Dir
file: path=/var/www/html state=directory
- name: apache PHP File Transfer
copy: src=/playbook/roles/file/dest=/var/www/html
- name: apache restart
service: name=httpd state=restarted
---
- name: Playbook LAMP
become: yes
hosts: [lamp]
roles: - 1_apache
- 2_php
- 3_mysql
---
- name: php install repo
yum: name={{ phpdlpath }}
---
- name: mysql install repo
yum: name="{{ sqlrepo }}"
■/playbook/roles/1_apache/tasks/main.yml
■/playbook/roles/2_php/tasks/main.yml
■/playbook/roles/3_mysql/tasks/main.yml
■/playbook/lamp.yml
①
②
③
「Lamp.yml」からの呼び出しが可能になる
8.プロビジョニング Section 1
Ansibleサーバより実行されたプレイブック(Lamp.yml)がAPPサーバに対して
APPServerAnsibleServer
Playbook(lamp.yml)実行
-----------------------------
・Apache,PHP,Mysql Install
・HTMLCode Move
・Setting
Port:22
実行コマンド
ansible-playbook –i /playbook/hosts /playbook/lamp.yml
プロビジョニングを行い、ApacheInstallから始まる作業を自動化する
8.プロビジョニング Section 1 結果
http://<AWS Publicip>/makehtml2/0_main.html
DocumentRoot : /var/www/html
http://<AWS Publicip>/counter.php
プロビジョニング実行後、APPサーバにはLAMPの環境が構築されており、サーバログイン
なしでWEBアクセスが可能になる
9.プロビジョニング Section2 実践
Section1にて構築した環境をもとにさらにフレームワークを導入し、LAMP+Laravelの環境に変更。
同時にAPPのインストールも行う
APPServerAnsibleServer
Playbook実行
-----------------------------
・Laravel Install
・PHPCode Move
・Setting
Port:22
実行コマンド
ansible-playbook –i /playbook/hosts /playbook/lamp.yml
9.プロビジョニング Section2 結果
http://<AWS Publicip>/makehtml2/0_main.html
DocumentRoot切り替えにより
表示も切り替える
DocumentRoot : /var/www/html
http://<AWS Publicip>/counter.php
DocumentRoot : /laraishi/public
http://<AWS Publicip>/attendances
10.まとめ
Apache Install & Edit
PHP Install & Edit
Mysql Install & Edit
App Install
Database Edit
OS Install & Edit AWS
Code(Section1)
Laravel Install & Edit
Laravel App Install
Code(Section2)
Section1と2の作業を手作業で行うと環境+8個のタスクが発生するがAWSとAnsibleを使用する
ことで3つのタスクに減らし、物理環境の準備も必要ない
Lamp.ymlの編集でSection1と2を
一つにまとめることも可能。
10.まとめ
■AWSを使えば自宅でも外でも簡単に検証環境が作れます!
物理環境で必要だったマシンの確保、OSのセットアップ等の作業から解放
され、コスト的にも時間的にもより効率的な環境が作成できます。
ネット環境があれば取り合えず何とかなります。
■Ansibleを使えば面倒なインフラ作業から解放されます!
プレイブックを保存しておくことで、破損したときの復旧も簡単です。
またコード化して一斉に展開することで一度に大量のサーバに対してもオペミス
もなく効率的に結果を出すことができます。
---
- name: Playbook LAMP
become: yes hosts: [lamp]
roles:
#step 1 apache+php
- 1_apache
- 2_php
- 3_mysql
#step 2 laravel
- 4_laravel
- 5_app
補足:プレイブック内容
/playbook/lamp.yml
[lamp]
ip-XXX-XX-XX-XXX
補足:プレイブック内容
/playbook/hosts
---
ansible_ssh_user: ec2-user
ansible_ssh_private_key_file: /home/ec2-
user/.ssh/hogehoge_1005.pem
ansible_ssh_port: 22
ansible_connection: ssh
### Apache ###
httpdgroup: www
httpdir: /var/www
filesrc: /playbook/roles/1_apache/file/
filedest: /var/www/html
補足:プレイブック内容
/playbook/group_vars/
lamp.yml(1)
(1)~(4)まで結合して一つの
ファイルとして作成する
### PHP ###
phpapp: counter.dat
phpcode: "{{ filedest }}/{{ phpapp }}"
libpkg:
- 'libmcrypt'
- 'libtool-ltdl'
- 'libtidy'
- 'libXpm'
- 'libtiff'
- 'gd-last'
- 'autoconf'
- 'automake'
pkglist:
- 'php'
- 'php-opcache'
- 'php-mbstring'
- 'php-mcrypt'
- 'php-pecl-apc'
- 'php-gd'
- 'php-mysqlnd'
- 'php-xml'
補足:プレイブック内容
/playbook/group_vars/
lamp.yml(2)
(1)~(4)まで結合して一つの
ファイルとして作成する
repfile: /etc/php.ini
defstr: "^;date.timezone ="
replacestr: "date.timezone = Asia/Tokyo"
### mysql ###
sqlrepo : http://dev.mysql.com/get/mysql-community-
release-el6-5.noarch.rpm
apkg:
- 'mysql'
- 'mysql-devel'
- 'mysql-server'
- 'mysql-utilities'
svc: mysqld
svcstate: started
svcauto: yes
root_db_password: root
dbtemp: /playbook/roles/3_mysql/template/
dbdir: /dbbackup
dbsrc: /playbook/roles/3_mysql/file/
dbbk: hogehoge.sql
dbname: hogehogeDB
補足:プレイブック内容
/playbook/group_vars/
lamp.yml(3)
(1)~(4)まで結合して一つの
ファイルとして作成する
### laravel ###
dl: https://getcomposer.org/installer
composer: /usr/bin/composer
pjdir: /laravel
httpdfile: /etc/httpd/conf/httpd.conf
httpcode:
- { regexp: 'DocumentRoot "/var/www/html"' ,replace:
'DocumentRoot "{{ pjdir }}/public"' }
- { regexp: '<Directory "/var/www/html">' ,replace:
'<Directory "{{ pjdir }}/public">' }
補足:プレイブック内容
/playbook/group_vars/
lamp.yml(4)
(1)~(4)まで結合して一つの
ファイルとして作成する
---
- name: apache Update Repo
yum: name=* state=latest
- name: apache Install DeveloperTool
yum: name="@Development tools"
- name: apache Install VIM
yum: name=vim
- name: apache Install Apache
yum: name=httpd
- name: apmache Make {{ httpdgroup }} Group
group: name={{ httpdgroup }}
- name: apache {{ ansible_ssh_user }} www appeded
shell: usermod -a -G {{ httpdgroup }} {{ ansible_ssh_user }}
- name: apache www Permission
file: path={{ httpdir }} group={{ httpdgroup }} mode=2775 state=directory
- name: apache /www Subdirectory Permission
shell: find /var/www -type d -exec sudo chmod 2775 {} ;
- name: apache /www Subdirectory Permission
shell: find /var/www -type f -exec sudo chmod 0664 {} ;
- name: apache Make PHP Dir
file: path={{ filedest }} state=directory
- name: apache PHP File Transfer
copy: src={{ filesrc }} dest={{ filedest }}
- name: apache PHP File ACL Change
file: path={{ phpcode }} mode=606
- name: apmache Enable htaccess
replace:
dest=/etc/httpd/conf/httpd.conf
regexp='AllowOverride None'
replace='AllowOverride All'
補足:プレイブック内容
/playbook/roles/1_apache/
tasks/main.yml
---
- name: php install repo
yum: name=http://rpms.famillecollet.com/enterprise/remi-release-
6.rpm
- name: php install phprepo
yum: name={{ item }} disablerepo=amzn-main enablerepo=epel
with_items:
- 'libwebp'
- name: php install phplib
yum: name={{ item }}
with_items:
- "{{ libpkg }}"
- name: php install php
yum: name={{item}} disablerepo=amzn-main enablerepo=remi-
php70
with_items:
- "{{ pkglist }}"
- name: php setting timezone
replace: >
dest="{{ repfile }}"
regexp="^;date.timezone ="
replace="date.timezone = Asia/Tokyo"
補足:プレイブック内容
/playbook/roles/2_php/
tasks/main.yml
---
- name: mysql install repo
yum: name="{{ sqlrepo }}"
- name: mysql install repo mysql
yum: name="{{ item }}" state=present
with_items:
- "{{ apkg }}"
- name: install mysql python module (from source)
when: ansible_distribution == 'Amazon' # Amazon Linux AMI
command: 'bash -lc "{{ item }}"'
with_items:
- 'cd /usr/tmp && wget http://download.sourceforge.net/sourceforge/mysql-python/MySQL-python-1.2.3.tar.gz'
- 'cd /usr/tmp && tar xvzf /usr/tmp/MySQL-python-1.2.3.tar.gz'
- 'cd /usr/tmp/MySQL-python-1.2.3 && python setup.py build'
- 'cd /usr/tmp/MySQL-python-1.2.3 && python setup.py install'
- 'rm -rf /usr/tmp/MySQL-python*'
- name: apache restart
service: name=httpd state=restarted
- name: mysql start mysql
service: name="{{ svc }}" state="{{ svcstate }}" enabled="{{ svcauto }}"
#- name: mysql user setting
# command: mysqladmin -u root password {{ root_db_password }}
# mysql_user: name=root host={{ inventory_hostname }} password={{ root_db_password }} priv=*.*:All,GRANT
- name: rootパスワード設定
mysql_user: name=root password={{ root_db_password }} login_user=root
login_password={{ root_db_password }} check_implicit_admin=yes
- template: src={{ dbtemp }}.my.cnf.j2 dest=/root/.my.cnf owner=root mode=0600
- name: WorkingDir make
file: path={{ dbdir }} state=directory
- name: Move DBBackup
copy: src={{ dbsrc }} dest={{ dbdir }}
- name: DB Create
mysql_db: name={{ dbname }} state=present
- name: DB Import
mysql_db: name={{ dbname }} state=import target={{ dbdir }}/{{ dbbk}}
補足:プレイブック内容
/playbook/roles/3_mysql/
tasks/main.yml
補足:プレイブック内容
/playbook/roles/
4_lalavel/tasks/main.yml
---
- name: laravel composer Install
shell: curl -sS "{{ dl }}" | php
- name: mv composer.phar /usr/bin/composer
shell: mv composer.phar "{{ composer }}“
- name: Project Make
shell: composer create-project laravel/laravel {{ pjdir }} --prefer-dist
- name: laravel httpd_conf
replace: dest="{{ httpdfile }}" regexp="{{ item.regexp }}"
replace="{{ item.replace }}" backup=yes
with_items:
- "{{ httpcode }}“
-name: hogehoge
shell: chmod -R 777 {{ pjdir }}
- name: apache restart
service: name=httpd state=restarted
補足:プレイブック内容
/playbook/roles/
5_app/tasks/main.yml
---
- name: App Install
file: path=/laravel state=absent
- name: App Install
unarchive: src=/playbook/roles/5_app/file/laravel.tar.gz dest=/
- name: App Install
command: chmod -R 777 /laravel

More Related Content

PPTX
Chef windows linux環境構築
PDF
Chef社内勉強会(第1回)
PDF
Chefで始めるWindows Server構築
PDF
Windows7でもchefしたい!
PPTX
明日から始める Chef 入門 #bpstudy
PDF
Chefで作る開発環境
PDF
Ansible quickstart
PPTX
Chef概論とレシピ実践入門
Chef windows linux環境構築
Chef社内勉強会(第1回)
Chefで始めるWindows Server構築
Windows7でもchefしたい!
明日から始める Chef 入門 #bpstudy
Chefで作る開発環境
Ansible quickstart
Chef概論とレシピ実践入門

What's hot (20)

PPTX
Pythonユーザのための構成管理入門 #pyconapac
PPTX
Puppetのススメ
PDF
Ansibleで始めるインフラ構築自動化
PDF
Ansible 2.0 のサマライズとこれから
PPTX
Itamae-Serverspec入門
PDF
Niigata.pm #1
PDF
Ansibleで味わうHelion OpenStack
PDF
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
PPTX
Ansible ではじめるインフラのコード化入門
PDF
Ansible handson ood2016
PDF
ChefとPuppetの比較
PDF
第1回 一撃サーバー構築シェルスクリプト勉強会
PDF
Ansible 入門 #01 (初心者向け)
PDF
入門 Chef Server #biglobetechtalk
PDF
Ansible 2.0を使って組む kubernetesクラスタ vol.1
PDF
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
PPTX
Appsody でnodejsのアプリを立ち上げよう!
PDF
Serverspecの活用tips紹介
PDF
NDS#31
PDF
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Pythonユーザのための構成管理入門 #pyconapac
Puppetのススメ
Ansibleで始めるインフラ構築自動化
Ansible 2.0 のサマライズとこれから
Itamae-Serverspec入門
Niigata.pm #1
Ansibleで味わうHelion OpenStack
マニアックツール紹介、マネジメントのKnife-Zero(Chef)とテストスイートInSpec
Ansible ではじめるインフラのコード化入門
Ansible handson ood2016
ChefとPuppetの比較
第1回 一撃サーバー構築シェルスクリプト勉強会
Ansible 入門 #01 (初心者向け)
入門 Chef Server #biglobetechtalk
Ansible 2.0を使って組む kubernetesクラスタ vol.1
開発エンジニアがChefで テスト駆動サーバー設定してみた #biglobetechtalk
Appsody でnodejsのアプリを立ち上げよう!
Serverspecの活用tips紹介
NDS#31
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
Ad

Viewers also liked (20)

PDF
[B34] MySQL最新ロードマップ – MySQL 5.7とその先へ by Ryusuke Kajiyama
PDF
Ansible with AWS
PDF
Spider DeNA Technology Seminar #2
PDF
Zabbix+group replication
PDF
Sharding and Scale-out using MySQL Fabric
PPTX
2014 11-20 Machine Learning with Apache Spark 勉強会資料
PPTX
リーダブルコードが良書だったのでまとめました
PPTX
MySQL InnoDB Cluster 미리보기 (remote cluster test)
PDF
MySQL InnoDB Cluster - Group Replication
PDF
Nuvola: a tale of migration to AWS
PPTX
MySQL Replication Evolution -- Confoo Montreal 2017
PDF
Building Scalable High Availability Systems using MySQL Fabric
PDF
Using Ansible for Deploying to Cloud Environments
PDF
レスポンシブWebデザインでうまくやるための考え方
PDF
Automate with Ansible basic (3/e)
PDF
MySQL 5.7とレプリケーションにおける改良
PDF
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
PDF
From devOps to front end Ops, test first
PDF
Ansible 實戰:top down 觀點
PDF
Automation with Ansible and Containers
[B34] MySQL最新ロードマップ – MySQL 5.7とその先へ by Ryusuke Kajiyama
Ansible with AWS
Spider DeNA Technology Seminar #2
Zabbix+group replication
Sharding and Scale-out using MySQL Fabric
2014 11-20 Machine Learning with Apache Spark 勉強会資料
リーダブルコードが良書だったのでまとめました
MySQL InnoDB Cluster 미리보기 (remote cluster test)
MySQL InnoDB Cluster - Group Replication
Nuvola: a tale of migration to AWS
MySQL Replication Evolution -- Confoo Montreal 2017
Building Scalable High Availability Systems using MySQL Fabric
Using Ansible for Deploying to Cloud Environments
レスポンシブWebデザインでうまくやるための考え方
Automate with Ansible basic (3/e)
MySQL 5.7とレプリケーションにおける改良
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
From devOps to front end Ops, test first
Ansible 實戰:top down 觀點
Automation with Ansible and Containers
Ad

Similar to AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel- (20)

KEY
Mysql casial01
PDF
10分で作る Node.js Auto Scale 環境 with CloudFormation
PDF
ゲームのインフラをAwsで実戦tips全て見せます
PPTX
ネットワークエンジニアのための Puppet / Chef
PDF
Nseg20120825
PDF
環境構築自動化ツールのご紹介
PDF
Lapp環境をソースからインストールする(centos)
PDF
成長を加速する minne の技術基盤戦略
PDF
Mina 20130417
PPTX
Cloudstack user group meeting in osaka
PDF
Ansible入門
PDF
Personal Cloud Automation
PPTX
Zabbixを2分でインストール
PDF
20140612_Docker上でCloudStackを動かしてみる!!
PDF
今日から使い始めるChef
PDF
Okinawa Open Days 2015 Handson - Ansible
PPTX
ZabbixとAWS
PDF
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
PDF
WindowsでMySQL入門
KEY
Web Operations and Perl kansai.pm#14
Mysql casial01
10分で作る Node.js Auto Scale 環境 with CloudFormation
ゲームのインフラをAwsで実戦tips全て見せます
ネットワークエンジニアのための Puppet / Chef
Nseg20120825
環境構築自動化ツールのご紹介
Lapp環境をソースからインストールする(centos)
成長を加速する minne の技術基盤戦略
Mina 20130417
Cloudstack user group meeting in osaka
Ansible入門
Personal Cloud Automation
Zabbixを2分でインストール
20140612_Docker上でCloudStackを動かしてみる!!
今日から使い始めるChef
Okinawa Open Days 2015 Handson - Ansible
ZabbixとAWS
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
WindowsでMySQL入門
Web Operations and Perl kansai.pm#14

AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-