総評
今回vagrant上にAnsibleを導入し、Ansible modules、aws-cli、shellなどを使用して、コマンド1つでWebサイトが見えるまでの環境作りをしました。
一部手動になってしまった部分はありますが、やったことを残してみたいと思います。
前提
最終テストは実際にAWSインスタンスを立ち上げた環境で実施しました。
ELB、EC2、RDSは事前に構築済みとします。
構築されているEC2にAnsibleをインストールして構築しています。
Ansibleで実施していること
site.ymlのrolesを見ていただくと、何を構築かわかると思うのでsite.ymlをのせます。
- name: Startup project
hosts: all
user: root
vars:
now_date: "{{ lookup('pipe','date +%Y%m%d') }}"
vars_files:
- "vars_files/common.yml"
roles:
- role: S3
- role: Lambda
- role: ApiGateway
- role: CloudFront
# - role: Route53 # cloudfrontのドメインネームが上手くとれず断念…
- role: App # Webサイト資源の配置を自動化
- role: Db
- role: Vhost # Apache vhostの設定+再起動
- role: CloudSearch
■Lambda、ApiGateway、CloudFront、Db
過去の投稿参考にしていただければと思います。
・MAC環境にAnsible導入後、AWSサービス構築までの道〜③cloudfront_distributionモジュール〜
・MAC環境にAnsible導入後、AWSサービス構築までの道〜④Lambdaモジュール〜
・MAC環境にAnsible導入後、AWSサービス構築までの道〜⑤API Gateway〜
・MAC環境にAnsible導入後、AWSサービス構築までの道〜番外編:DB構築(MySQL)〜
■App、Vhost
プロジェクトなどでバージョン管理やデプロイの方法などが違うと思いますので、こちらでは記載しません。
vhostはひな形ファイルをCopyし、特定箇所のみreplaceする形をとっています。
###■CloudSearch
過去の記事に上げたShell ScriptをAnsible上で実行しているだけになります。
Indexingを自動化しているだけですので、CloudSearchのドメインは事前に作成が必要です。
###■S3
Ansible Documentation「aws_s3」閲覧いただければ、すぐに対応いただけると思います。
自動化できなかった点(残課題)
- Route53
Cloudfrontのドメインネームが上手く取得できず設定できませんでした。
ディストリビューション情報を取得した際のレスポンスの順番がディストリビューションによって順番が異なっていたりしたため、上手くできなかったです。。。
Webサイト閲覧までの流れ
上記site.ymlを実行することで一連のサービスが立ち上がり、Apacheの再起動も実施されているので、あとはRoute53にてDNSの設定をするだけになります。
ただし、Cloudfrontが構築中の場合、Enabledになるまで待っていただく必要があるかもしれません。
- site.yml
- Route53設定
- ブラウザよりアクセス
まとめ
自動化することで、今までサイト閲覧までにかかっていた時間が1/8ぐらいになりました。
まだ改善しなければならないところはありますが、一旦ほぼ自動化できたという点では良かったと思います。
また知らない技術を使っての自動化構築ということで非常に楽しかったです!
Ansibleのレスポンスの取り方がイマイチわかりずらかったです…
今後の課題として
- 今回の自動化スクリプトのアップデート(完全自動化)
- 汎用性の検討(対話式にして、どの案件でも使えるようにするなど)
- ステージング、本番環境への適用
を目指していきたいと思います。