Chef12に対応したAWS OpsWorksにRailsアプリをデプロイする②
最近、Slackのカスタムリアクション絵文字をちょくちょく追加してたら、カスタムリアクション職人と呼ばれるようになってしまった前田です。
人間1つくらいは得意なことがあるものですね。
自分で欲しいものを追加したり、リクエストがあると追加したりしていますが、弊社のSlackは少しカオスなことになってきているかもしれません。
Slackのリアクション絵文字で遊ぶ弊社社員
他にもこんな感じのカスタムリアクションがあったりしますが、最近は ズッ
リアクションがMMM Slack内で大流行しています。
さて、ブログの内容は前回の続きです。
弊社ではAWSでアプリケーションをデプロイする際、インフラ構築の自動化&省力化の為のDevOpsツールとして主にAWSのOpsWorksを利用しています。
最近はDockerでサーバー環境を構築するのが流行のようですが、しつこくOpsWorks(Chef12)について書いていきます。
前回の記事はコチラ
-> Chef12に対応したAWS OpsWorksにRailsアプリをデプロイする①
前回はStackの作成と、CookbooksをOpsWorksにアップロードするまでを書きました。
今回は全体設計やレシピを書く前にやったことなどを書いていきます。
環境セットアップ、全体設計図
OpsWorksのスタックは前回作成しました。
あとは、VPCやサブネットやセキュリティグループ、ELBやRDSなどを作成します。
弊社では、VPC・サブネット・セキュリティグループなどは、AWSのCloudFormationを使用して構築しています。
ELBとRDSは手動でいい感じに構築します。
RDSは、MySQLバージョン5.6.27
で作成しました。
下記が全体設計図です。
Webサーバー、CMSサーバーはRailsアプリケーションです。
デプロイをどうするか、というところで色々議論しましたが、デプロイサーバーを用意し、そのデプロイサーバーからCapistranoで指定したレイヤーのインスタンス郡にデプロイを実行する、という設計にしました。
デプロイサーバーは踏み台も兼ねています。
スタックにレイヤー、インスタンス、アプリケーションを設定
OpsWorksスタックにレイヤーやインスタンス・ELB・RDS、アプリケーションをセットします。
レイヤー
インスタンス
各インスタンスのスペックはUbuntu 14.04 LTS
t2.micro
でセットアップして、インスタンスを起動します。
レイヤーのレシピが空の状態なら起動が失敗することは無いかと思います。
アプリケーション
適当なRailsアプリケーションを作成して、GitHubかBitBucketにアップしておき、Apps
でRailsアプリケーションをセットします。
具体的なレシピを書く前にやったこと
①AWSのドキュメントを読む
AWSのドキュメントは個人的にはいつも読みづらいなぁと感じているのですが、避けては通れません。
急がば回れですが、ある程度飛ばして重要そうな箇所を読みました。
AWS OpsWorks ユーザーガイド (API Version 2013-02-18)
②データバッグの内容を確認する
前回の記事で書きました、「OpsWorks内でのデータバッグの取得方法が変わった」ことが、Chef12に対応したOpsWorksの大きな変更点で、まずはどういった値がOpsWorks上で取得出来るのかを確認しました。
AWS OpsWorks データバッグのリファレンス
確認方法は、簡単なデータバッグ値表示用のレシピを書き、OpsWorks上で実行しました。
レシピの内容は以下です。
レシピ名・・・display_variables
構成
├── metadata.rb
└── recipes
└── default.rb
metadata.rb
name "display_variables"
description "display variables for aws opsworks"
maintainer "masaki maeda"
version "1.0.0"
recipes/default.rb
%w(aws_opsworks_app
aws_opsworks_command
aws_opsworks_ecs_cluster
aws_opsworks_elastic_load_balancer
aws_opsworks_instance
aws_opsworks_layer
aws_opsworks_rds_db_instance
aws_opsworks_stack
aws_opsworks_user).each do |data_bag|
puts '--------------------'
puts "### #{data_bag} ###"
search(data_bag).each_with_index do |app, i|
puts "===== #{i} ====="
app.each do |key, value|
puts "key = #{key}, value = #{value}"
end
end
puts '--------------------'
end
このレシピをOpsWorks上にアップロードして、Execute Recipes などで実行します。
そうすると、下記は一部ですが、色々値が取得出来ることが分かるかと思います。
スタック内に定義されている必要そうな情報はほぼすべて取得出来ます。
基本的に、ここで取得出来る値を利用してセットアップしていくので、この値を確認しながらレシピを作っていきます。
ここから先はまだ長いのですが、とりあえずこれでいけそうなことが分かりました。
次回
次回は必要なレシピ郡やデプロイまでを書いていきます。
AWSを活用したスケーラブルなサービス構築をお考えの際は、是非MMMにお声がけ下さいませ!