Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
プロビジョニング入門
AWSとAnsibleによるLAMP環境構築
By Yasushi Odashima
2016年11月4日(金)
■スライドシェアURL
http://www.slideshare.net/ssuser24564a/aws...
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
• 構成管理ツ...
2.作業範囲
目的 :
自宅や物理サーバが用意できない環境でのLAMP構築とAPPインストールのプロ
ビジョニング実践
Apache Install & Edit
PHP Install & Edit
Mysql Install & Edit
...
3.環境構成図
AnsibleServer
----------------------------
EC2 : Amazon Linux
APPServer
----------------------------
EC2 : Amazon ...
4.AWS インスタンス
構成内容 構成値 内容
1 アカウント作成 hogehoge 特になし
2 AMI選択 Amazon Linux 無料枠内でできるシンプルな構成を選択。
3 インスタンスタイプ t2maicro サーバのスペックを決定...
5.Ansible重要用語
用語 内容
1 インベントリファイル 実行するモジュールや処理内容、使用する変数の値等を記載するYaml形式のファイ
ル
2 プレイブック Ansibleで実行するプログラムを総称。Ansibleの持つプログラムを記...
6.ベストプラティクス構造
/playbook
/roles
/group_vars
/lamp.yml
/hosts
/lamp.yml
/1_Apache
/2_php
/3_mysqlroles配下を読み込む(Site.yml)
プレイブ...
7.プレイブック連携
ベストプラティクス構造で作成することで ---
- name: apache Install Apache
yum: name=httpd
- name: apache Make PHP Dir
file: path=/v...
8.プロビジョニング Section 1
Ansibleサーバより実行されたプレイブック(Lamp.yml)がAPPサーバに対して
APPServerAnsibleServer
Playbook(lamp.yml)実行
------------...
8.プロビジョニング Section 1 結果
http://<AWS Publicip>/makehtml2/0_main.html
DocumentRoot : /var/www/html
http://<AWS Publicip>/cou...
9.プロビジョニング Section2 実践
Section1にて構築した環境をもとにさらにフレームワークを導入し、LAMP+Laravelの環境に変更。
同時にAPPのインストールも行う
APPServerAnsibleServer
Play...
9.プロビジョニング Section2 結果
http://<AWS Publicip>/makehtml2/0_main.html
DocumentRoot切り替えにより
表示も切り替える
DocumentRoot : /var/www/ht...
10.まとめ
Apache Install & Edit
PHP Install & Edit
Mysql Install & Edit
App Install
Database Edit
OS Install & Edit AWS
Code(...
10.まとめ
■AWSを使えば自宅でも外でも簡単に検証環境が作れます!
物理環境で必要だったマシンの確保、OSのセットアップ等の作業から解放
され、コスト的にも時間的にもより効率的な環境が作成できます。
ネット環境があれば取り合えず何とかなりま...
---
- name: Playbook LAMP
become: yes hosts: [lamp]
roles:
#step 1 apache+php
- 1_apache
- 2_php
- 3_mysql
#step 2 laravel...
[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
a...
### PHP ###
phpapp: counter.dat
phpcode: "{{ filedest }}/{{ phpapp }}"
libpkg:
- 'libmcrypt'
- 'libtool-ltdl'
- 'libtidy'
...
repfile: /etc/php.ini
defstr: "^;date.timezone ="
replacestr: "date.timezone = Asia/Tokyo"
### mysql ###
sqlrepo : http://...
### laravel ###
dl: https://getcomposer.org/installer
composer: /usr/bin/composer
pjdir: /laravel
httpdfile: /etc/httpd/co...
---
- name: apache Update Repo
yum: name=* state=latest
- name: apache Install DeveloperTool
yum: name="@Development tools...
---
- name: php install repo
yum: name=http://rpms.famillecollet.com/enterprise/remi-release-
6.rpm
- name: php install ph...
---
- name: mysql install repo
yum: name="{{ sqlrepo }}"
- name: mysql install repo mysql
yum: name="{{ item }}" state=pre...
補足:プレイブック内容
/playbook/roles/
4_lalavel/tasks/main.yml
---
- name: laravel composer Install
shell: curl -sS "{{ dl }}" | ph...
補足:プレイブック内容
/playbook/roles/
5_app/tasks/main.yml
---
- name: App Install
file: path=/laravel state=absent
- name: App Ins...
Prochain SlideShare
Chargement dans…5
×

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

1 133 vues

Publié le

AWSとANSIBLEを使用してのLAMP+Laravelのアプリ表示までの実践資料

Publié dans : Technologie
  • Identifiez-vous pour voir les commentaires

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

  1. 1. プロビジョニング入門 AWSとAnsibleによるLAMP環境構築 By Yasushi Odashima 2016年11月4日(金) ■スライドシェアURL http://www.slideshare.net/ssuser24564a/awsansiblelamplaravel-68179035
  2. 2. 1.登場人物 2.作業範囲 3.環境構成 4. AWS インスタンス 5. Ansible 重要用語 6.ベストプラティクス構造 7.プレイブック連携 8.プロビジョニング Section 1 9.プロビジョニング Section 2 10.まとめ 目次
  3. 3. 1.登場人物 • AmazonWebService • Amazonのクラウドサービス。今回ではAnsibleサーバとAPPサーバとして使用す る。OSはLinux6を基本としたAmazonLinuxを採用。 • Ansible • 構成管理ツール。インフラ作業をコード化することでプロビジョニング作業を自動化 する。今回はAPPサーバに対してOSインストール以降のすべての作業をプロビジョ ニングする。
  4. 4. 2.作業範囲 目的 : 自宅や物理サーバが用意できない環境でのLAMP構築とAPPインストールのプロ ビジョニング実践 Apache Install & Edit PHP Install & Edit Mysql Install & Edit App Install Database Edit OS Install & Edit AWS Code ※プロビジョニング:サーバに対してミドルウェアのインストールや設定等の環境構築を行うこと
  5. 5. 3.環境構成図 AnsibleServer ---------------------------- EC2 : Amazon Linux APPServer ---------------------------- EC2 : Amazon Linux Server構築、設定 http://<PublicIP> APPServer構築における工程をコード化しプロ ビジョニングを行う
  6. 6. 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)を構築するまでの内容。基本無料枠を使用する。
  7. 7. 5.Ansible重要用語 用語 内容 1 インベントリファイル 実行するモジュールや処理内容、使用する変数の値等を記載するYaml形式のファイ ル 2 プレイブック Ansibleで実行するプログラムを総称。Ansibleの持つプログラムを記載し処理の内容 を記載するインベントリファイル 3 ロール 複数のモジュールを組み合わせの処理を行うインベントリファイル。 4 モジュール プレイブックより呼び出されるPythonファイル。Pythonファイルを自作しモジュールとし て実行可能。 5 ベストプラクティス Ansibleで推奨されているディレクトリ構造。自作モジュールやロールを呼び出す上で の理想的な構造。 構成管理Ansibleにおける重要用語。以降のスライドにて詳細を記載。
  8. 8. 6.ベストプラティクス構造 /playbook /roles /group_vars /lamp.yml /hosts /lamp.yml /1_Apache /2_php /3_mysqlroles配下を読み込む(Site.yml) プレイブックで使用する変数を記載 それぞれの処理を記載する /library 自作モジュールの格納(未使用) プレイブックは保存、管理を行うことで「hosts」に 記載されたマシンすべてに同様の処理を行う。
  9. 9. 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」からの呼び出しが可能になる
  10. 10. 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から始まる作業を自動化する
  11. 11. 8.プロビジョニング Section 1 結果 http://<AWS Publicip>/makehtml2/0_main.html DocumentRoot : /var/www/html http://<AWS Publicip>/counter.php プロビジョニング実行後、APPサーバにはLAMPの環境が構築されており、サーバログイン なしでWEBアクセスが可能になる
  12. 12. 9.プロビジョニング Section2 実践 Section1にて構築した環境をもとにさらにフレームワークを導入し、LAMP+Laravelの環境に変更。 同時にAPPのインストールも行う APPServerAnsibleServer Playbook実行 ----------------------------- ・Laravel Install ・PHPCode Move ・Setting Port:22 実行コマンド ansible-playbook –i /playbook/hosts /playbook/lamp.yml
  13. 13. 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
  14. 14. 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を 一つにまとめることも可能。
  15. 15. 10.まとめ ■AWSを使えば自宅でも外でも簡単に検証環境が作れます! 物理環境で必要だったマシンの確保、OSのセットアップ等の作業から解放 され、コスト的にも時間的にもより効率的な環境が作成できます。 ネット環境があれば取り合えず何とかなります。 ■Ansibleを使えば面倒なインフラ作業から解放されます! プレイブックを保存しておくことで、破損したときの復旧も簡単です。 またコード化して一斉に展開することで一度に大量のサーバに対してもオペミス もなく効率的に結果を出すことができます。
  16. 16. --- - 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
  17. 17. [lamp] ip-XXX-XX-XX-XXX 補足:プレイブック内容 /playbook/hosts
  18. 18. --- 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)まで結合して一つの ファイルとして作成する
  19. 19. ### 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)まで結合して一つの ファイルとして作成する
  20. 20. 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)まで結合して一つの ファイルとして作成する
  21. 21. ### 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)まで結合して一つの ファイルとして作成する
  22. 22. --- - 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
  23. 23. --- - 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
  24. 24. --- - 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
  25. 25. 補足:プレイブック内容 /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
  26. 26. 補足:プレイブック内容 /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

×