Mais conteúdo relacionado
Semelhante a AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel- (20)
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
- 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. 5.Ansible重要用語
用語 内容
1 インベントリファイル 実行するモジュールや処理内容、使用する変数の値等を記載するYaml形式のファイ
ル
2 プレイブック Ansibleで実行するプログラムを総称。Ansibleの持つプログラムを記載し処理の内容
を記載するインベントリファイル
3 ロール 複数のモジュールを組み合わせの処理を行うインベントリファイル。
4 モジュール プレイブックより呼び出されるPythonファイル。Pythonファイルを自作しモジュールとし
て実行可能。
5 ベストプラクティス Ansibleで推奨されているディレクトリ構造。自作モジュールやロールを呼び出す上で
の理想的な構造。
構成管理Ansibleにおける重要用語。以降のスライドにて詳細を記載。
- 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」からの呼び出しが可能になる
- 11. 8.プロビジョニング Section 1 結果
http://<AWS Publicip>/makehtml2/0_main.html
DocumentRoot : /var/www/html
http://<AWS Publicip>/counter.php
プロビジョニング実行後、APPサーバにはLAMPの環境が構築されており、サーバログイン
なしでWEBアクセスが可能になる
- 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. 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を
一つにまとめることも可能。
- 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
- 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. 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. ### 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. ---
- 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. ---
- 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. ---
- 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. 補足:プレイブック内容
/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