Post date: 2017/08/25 15:45:37
[時刻UTC→JST]
# timedatectl set-timezone Asia/Tokyo
[AWSの立ち上げ]
1.まずは無料ではじめる
サインイン
いつものパスワードでアカウント作成、連絡先情報を入力、支払いはANAカードを使用
携帯電話に本人確認がくるので4桁のPIN番号入力
サポートプラン: ベーシック
アカウント準備できたら、emailが来る。開始方法をクリックすると10分間チュートリアル
2.コンソールへログイン
email/いつものパスワードでログイン
仮想マシーンの起動: EC2インスタンスを今すぐ始める
EC2インスタンスの名前の指定: anagix1
(なぜかわからんが、米国東部(オハイオ)リージョンになってる!)
オペレーションシステムの選択: 今回はUbuntu Server 16.04 LTSにしてみる
インスタンスタイプ: 無料のt2.micro (1 コア vCPU (最大 3.3 GHz)、1 GiB メモリ RAM、8 GB ストレージ)
プライベートキーをDropbox/MinimalFabに保存
3.このインスタンスを作成を実行
EC2コンソールに進む
インスタンスへの接続は、接続タブをクリックすると表示される
インスタンスの状態が、初期化しています、2/2のcheckに合格しました、にかわった
4.SSHでアクセスする
そのままでは入れなかったので、セキュリティグループのインバウンドのルールを自分のグローバルIPのみに変更した
[chefとかインストール]
1.emacs
2.curl https://omnitruck.chef.io/install.sh | sudo bash -s -- -P chefdk -c stable で、chefdk 2.1.11-1がインストールされた
Rubyのバージョンは、2.4.1p111すげえ。RAILSとHoboが大丈夫かやや心配
3.chef-client --local-modeを試してみる
参考: https://learn.chef.io/modules/learn-the-basics/ubuntu/aws/set-up-a-machine-to-manage#/
ここまでで、ディスク使用量 22%
[RDS (mysqlサービス)]を使う
コンソールから、すべてのサービスを展開表示し、RDSを選択
”今すぐはじめる”で、MySQL-compatible editonを選択
本番稼働用か、開発/テスト用を選択できるが、無料枠はの開発/テストを選び、次のステップ
インスタンスの仕様は、無料枠では以下のようになる:
(無料利用枠では、ングルの db.t2.micro インスタンスと 20 GB までのストレージを提供しています)
DBインスタンスのクラス: db.t2.micro - 1v CPU, 1GIB RAM
マルチAZ配置: いいえ、しか選べない
ストレージタイプ: 汎用(SSD)しか選べない
ストレージ割り当て: 5 GB
以下のように設定
DBインスタンス識別子: albdb
マスターユーザの名前: anagix
マスターパスワード: anagixalb
パスワードの確認: 同じのを入れる
[詳細設定]の設定
ネットワーク&セキュリティ(変更不可)
VPC: デフォルトVPC(vpc-63d2fe1a)
サブネットグループ: default
パブリックアクセス可能: はい
アベイラビリティ-ゾーン: 指定なし
VPCセキュリティグループ: default(VPC)
データ・ベースの設定
データ・ベースの名前: alb_production
データ・ベースのポート: 3306
DBパラメータグループ: default.mysql5.6
オプショングループ: default.mysql5.6
タグをスナップショットへコピー: チェックせず
IAMのDBパラメータ認証を有効にする: 指定なし
暗号を有効化: いいえ
バックアップ
バックアップの保存期間: 7日
バックアップウィンドウ: 指定なし
モニタリング
拡張モニタリングを有効にする: いいえ
メンテナンス
マイナーバージョン自動アップグレード: はい
メンテナンスウィンドウ: 指定なし
以上で、DBインスタンスの作成
DBインスタンスの表示をクリックすると、DBインスタンスの起動状況が表示される
ステータスは、作成中から、更新ボタンで、バックアップ中に変わった
[mysql-clientのインストール]
apt-get install mysql-client (これでディスクは25%)
[RDBへの接続]ここまできたところで、やりなおすことにした。
理由: 1.リージョンがでたらめ、やはりASIA・Tokyoで作り直したい
2.順序として、VPCをつくり、そのなかにRDS,EC2という順序にすべきだった。
なので、以下やりなおし。
1.EC2の移動
インスタンスのコンソールで、アクション→イメージ→イメージの作成
2.RDSコンソールで、米国東部(北部バージニアに作ってしまった)DBインスタンスを削除
3.世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまでにしたがって、
VPCの作成
CIDRは、172.31.0.0/16になってしまって、編集できないので、このままで行く
サブネットの作成
名前タグ: anagix
VPC: vpc-8f351ceb
VPC CIDR: 172.31.0.0/16
アベイラビリティゾーン: ap-northeast-1a を選択
IPv4 CIDRブロック: 172.31.0.0/24
インターネットゲートウェイ
albgwという名前で、作成し、VPCにアタッチ
ルートテーブル
すでにrtb-6d9c4d0a というルートテーブルIDが存在するので、サブネットの関連付けを編集
送信先を 0.0.0.0/0、ターゲットを作成したalbgwにして保存
セキュリティグループの作成
名前タグ: anagixで作成 グループ名:anagix
インバウンドのルール
4.RDSをMySQLで作成
今回は、Ubuntu 16.04のmysql-clientが5.7なので、5.7.17を選ぶ
DBインスタンス識別子: albdb
マスターユーザの名前: rootに変更
マスターパスワード: anagixalb
データ・ベースの名前: alb_production
ここで、DBインスタンスの起動エラー
DB Subnet Group doesn't meet availability zone coverage requirement. Please add subnets to cover at least 2 availability zones. Current coverage: 1 (Service: AmazonRDS; Status Code: 400; Error Code: DBSubnetGroupDoesNotCoverEnoughAZs; Request ID: b9a3e7da-8a51-11e7-9fec-dfe649870939)
対策として、subnetを追加すればOKだった
アベイラビリティゾーン: ap-northeast-1c
IPv4 CIDRブロック: 172.31.1.0/24
5.EC2の作成
今回は、1で作成したイメージをまず、AMIで、Asia(Tokyo)にリージョン移動する。
リージョン表示をかえると、新しいAMI IDが表示され、状態は pending
新しいインスタンスを作成する際、イメージをMyAMIから選ぶ
注意: 自動割り当てパブリックIPを、”有効化”にすること (これはここでしか出来ない)
6.EC2へのログイン
chmod 400 anagix1n.pem
ssh -i "anagix1n.pem" ubuntu@ec2-13-114-3-219.ap-northeast-1.compute.amazonaws.com
7. MySQLの接続
セキュリティグループ(Created from the RDS management console)というやつのソースを、172.31.0.0/16に変更した
mysql -h albdb.c........amazonaws.com -P 3306 -u root -p で接続できた!
8.ボリューム(EBS)無料枠30Gの追加
コンソールのボリュームから、ボリュームの作成を実行
ボリュームのアタッチ
作成したボリュームを選択し、アクション→アタッチ
インスタンスは、調べなくても自動的に探してくれる
デバイスが、/dev/sdf と表示された。
こんな注が: ここで入力された (および詳細情報に表示される) デバイス名が /dev/sdf から /dev/sdp であっても、新しい Linux カーネルによっては内部でデバイスの名前が /dev/xvdf から /dev/xvdp に変更されることがあります。
EC2のインスタンスで、lsblkを実行すると、xvdfが増えていることが確認できた。
mkfs -t ext4 /dev/xvdf の後、 mount /dev/xvdf /usr/local/anagix_tools
9.セキュリティグループの変更
ネットワークインタフェースのセキュリティグループはlaunch-wizard-2というもので、22からのみIN BOUNDを許す設定だった
(このままでは80でアクセスできない)
コンソールからネットワークインタフェースに行き、ap-northeast-1aリージョンのセキュリティグループを、最初に3で作ったanagixに変更した
混乱を避けるため、不要になったセキュリティグループを削除した
10. swapの作成
https://sys-guard.com/post-11945/ にしたがって、fallocateを使ってswapをつくる
【chef-client local-modelを使ったALB2サーバインストール】
1.sudo chef-client -z -j ./roles/alb2_server.json
でロールを実行できる。ロールの記述は以下のjson
{
"name": "alb2_server",
"description": "ALB2 server",
"chef_type": "role",
"json_class": "Chef::Role",
"default_attributes": {
},
"override_attributes": {
},
"run_list": [
"recipe[screen]",
"recipe[anagix_init]",
"recipe[openssl]",
"recipe[alb2_install]",
"recipe[git]",
"recipe[gyazo]",
"recipe[alb_db_bkup]",
"recipe[my_apache2_for_alb2]"
]
}
2.recipeの更新
過去に作成したrecipeにはREADME.mdのないものなどあり、そのままではchefの実行でエラーになる
例えば alb2_installの場合、以下のように再度generateすれば、テンプレートのファイルが作成される
chef generate cookbook cookbooks/alb2_install
berkshelfの使い方
~/chef-repo に以下のBerksfileを作成し、berks vendor cookbooksを実行する
source "https://api.berkshelf.com"
cookbook 'git', '~> 4.5.0'
cookbook 'runit', '> 0.13.0'
cookbook 'openssl'
3.cookbooksの修正
・gitをrecipeから外した: どうしてもundefined method `set' for Chef::Platform:Classというエラーが取れない
https://github.com/chef-cookbooks/git/issues/119にしたがい、gitを6.0.0にupdateしてもダメ
・cookbooks/anagix_init/templates/defaultから、.gitconfig, .screenrcなどが欠落していたので復活(原因不明)
・cookbooks/anagix_init/attributes/default.rbに、default['anagix_home'] = '/home/anagix' を設定
・passwdファイルが定義されてないというので、anagix_init/files/passwd を作る(こんなの初めて!)
注意: attributes/default.rb~ が残っていると、以下のようなエラーが発生する
Recipe Compile Error in /home/ubuntu/.chef/local-mode-cache/cache/cookbooks/alb2_install/attr\ ibutes/default.rb~
4.gem、Gemfileの修正
ruby2.4にしたために、Railsを4.2.9、Hoboを2.2.5にした。
5.mysqlデータ・ベースのコピー
RDSとはいえ、基本的にかわらない。sqlをmysqldumpで作成しておき、EC2のインスタンスから
mysql -h xxx -u root -p alb_production < sqlファイル で、作成する。かなり遅かった。
6.Bundle execで起動できるまで
・rake assets:precompileを実行し、app/views/taglibs/auto以下を生成
・Railsで"Sorry, you can't use byebug without Readline."のエラーが出た時の対処法 に書いてあるようにGemfileに
gem 'rb-readline'
を入れる必要があった
・ActionView::Template::Error (undefined method `assets_precompile='というエラーは、Gemfileで、sprockets-railsの2.3.3縛りと、respondersの2.1.0縛りを削除し、bundle updateすると解消した。
respondersは、2.1.0のままじゃないと、"protected method `render' called for #<[controller name]>"の
エラーになった(参考: https://groups.google.com/forum/#!topic/hobousers/8j9kCBAaqI4 )
7.起動はしたものの、不具合対策
config/environments/production.rb で以下のオプション変数の名称を_assetsから_filesに変更する必要があった。(Rails4.2で変更になっていた)
config.serve_static_files = true
ここで、rails 4.2.8で、Ruby 2.4に対応したことが発覚(http://www.softantenna.com/wp/software/rails-4-2-8/)
Ruby2.4+Rails4.2.9+Hobo2.2.5への移行を試みたが、どうしてもapp/views/projects/show.drymで、以下のエラーになる。
ActionView::Template::Error (The asset "changetab.js" is not present in the asset pipeline.)
changetab.jsは、public/javascripts/changetab.jsに置いているにもかかわらずchangetab.jsをass/javascriptから
探そうとしているように見える。gem 'sprockets-rails', '2.3.3' のバージョン指定を外すと、3.2.0が入ったので
原因はそれかも知れない。
Ruby2.4+Rails4.2.9+Hobo2.2.5+sprockets_rails2.3.3を試みるも、以下のエラーになる。
ActionView::Template::Error (undefined method `assets_precompile=' for #<#<Class:0x00000009ff\
a830>:0x007f6274d84c70>
ほとんどあきらめたが、sprockets-railsを3.1.0にすると動いた。
Ruby2.4+Rails4.2.9+Hobo2.2.5+srockets-rails3.1.0でしばらく動かしてみる。
[ALBサーバの立ち上げ]
1.8180/8183ポートを使うよう /etc/apache2/sites-available/000-default.confを変更
2.a2enmod rewrite でモジュール追加
RewriteEngine on
RewriteRule ^(.*)$ https://aws.anagix.com:8183$1 [R,L]
が有効になる。
注意: ロードバランサーでは、Rewriteが80/443では問題ないのに、8180/8183では正しく動作せず、loginの際などに、以下のエラー
400 Bad request: "You're speaking plain HTTP to an SSL-enabled server port."
phusion/passengerにすれば8180/8183でも正しく動作する。
3. Phusion/passngerのインストール
apt-get install passengerすると、/usr/bin/rubyも入ってしまうが、これは避けられないと諦める。
Railsで使うRubyを指定するために、PassengerRuby /opt/chefdk/embedded/bin/ruby の記述が
必要だが、これを8183側でなく8180側に書いたのでハマる。
Apache2.4で、アクセス制限の記述方法が変更されていたにかかれているように、apacheが2.2から2.4で、アクセス許可設定の方法が変わっている
You don't have permission to access / on this serverというエラーがでたので、とりあえず、<Directory />に対し、Require all granted した。