要件定義のアプリ計画のテンプレ。随時加筆。
-
アプリケーション要件 背景
現状のアプリはOracleとの依存関係が強すぎ、
メンテナンス効率が非常に悪いとう課題がある。
要件定義のアプリ計画のテンプレ。随時加筆。
要件定義のデータ移行のテンプレ。随時加筆。
例
本書の目的は2017年1月サービス開始予定のXXXシステムにおける移行に関する 作業・役割・期間を定義し、プロジェクトメンバー、関連部署間において、 共有することを目的とする。
例
・サービス開始は2017年1月4日(月)である。 ・移行作業については、2016年12月29日(木)のオンライン終了後~ 2017年1月3日(火)までの間でシステムを停止させた状態で行う。 ・XXXシステムの切替は一括切替とし、一部切替は行わない。 ・XXXシステムの切り戻しは一括切り戻しとし、一部切り戻しは行わない。 ・セキュリティパッチの適用は2016年8月31日をもって凍結する。以降、 ・本番開始までのタスク・スケジュールは今後随時見直し行う。 ・移行の大まかな流れは以下の通りとする。 (ここで年、月のエクセル図があるとイメージがつきやすい)
例
新システムのシステム構成
No | 役割 | 分類 | IPや製品名 |
---|---|---|---|
1 | WEBサーバ#1 | Linux系サーバ | XXXX |
2 | WEBサーバ#2 | Linux系サーバ | XXXX |
3 | APサーバ#1 | Linux系サーバ | XXXX |
4 | APサーバ#2 | Linux系サーバ | XXXX |
5 | DBサーバ | Linux系サーバ | XXXX |
6 | ロードバランサ#1 | 仮想アプライアンス | XXXX |
7 | ロードバランサ#2 | 仮想アプライアンス | XXXX |
8 | 帳票サーバ | Windows系サーバ | XXXX |
アプリケーションの機能ごとに言語やバージョンの違いを載せる。
ライブラリの違いもあるとより良い。
例
1.オンラインアプリケーション 2.クライアントアプリケーション 3.バッチアプリケーション
No | 種別 | 名称 | 言語 | ||||
---|---|---|---|---|---|---|---|
Oracle | C# | Java | |||||
Pro*C | SQLローダ | PLSQL | |||||
1 | オンライン | XXXマスタ登録 | ● | ● | |||
2 | クライアント | XXXマスタ登録 | ● | ● | |||
3 | バッチ | XXXマスタ取込 | ● |
例
No | 名称 | 移行有無 | 移行方法 | スキーマ | 表領域 |
---|---|---|---|---|---|
1 | テーブル | ● | SQL文 | XXXX | TBL |
2 | インデックス | ● | SQL文 | XXXX | IDX |
3 | プロシージャ | - | - | - | - |
4 | パッケージ | - | - | - | - |
5 | シーケンス | ● | SQL文 | XXXX | TBL |
6 | トリガー | - | - | - | - |
7 | シノニム | - | - | - | - |
オブジェクト構成があまり変わらない場合、新旧の比較を載せるのも良い。
例
No | 旧オブジェクト名 | 新オブジェクト名 | 区分 | 概要 | ||
---|---|---|---|---|---|---|
新規 | 変更 | 削除 | ||||
1 | Aテーブル | Aテーブル | ● | カラム追加 | ||
2 | Bテーブル | ● | テーブル追加 | |||
3 | Cテーブル | ● | テーブル削除 |
テーブルのうち、データマッピング、初期データについて載せる。
詳細は外部設計にすることが多い。
例
1.テーブルデータ
No | 旧カラム名 | 新カラム名 | 区分 | 概要 | ||
---|---|---|---|---|---|---|
新規 | 変更 | 削除 | ||||
1 | ID | ID | 変更なし | |||
2 | 氏名漢字 | ● | カラム追加 | |||
3 | 氏名カナ | ● | カラム削除 |
No | テーブル名 | カラム名 | 設定値 |
---|---|---|---|
1 | URLマスタ | ID | 111 |
2 | URLマスタ | URL | z-area.net |
例
1.オンラインアプリケーション 2.クライアントアプリケーション 3.バッチアプリケーション
No | 種別 | 機能名 | 旧機能概要 | 新機能概要 |
---|---|---|---|---|
1 | オンライン | XXXマスタ登録 | 300件まで登録 | 2000件まで登録 |
2 | クライアント | XXXマスタ登録 | 300件まで登録 | 2000件まで登録 |
3 | バッチ | XXXマスタ取込 | 2000件まで登録 | 5000件まで登録 |
例
移行リハーサルについては3回実施する。 <1回目> データベースの移行検証 データベース以外の移行検証 <2回目> 1回目の検証結果を受けた見直し実施 <3回目> 最終的な手順確認
移行時に発生する作業 1.システム移行(システム構築) 2.リリース 3.現行サーバの停止 4.データ移行(DB、ファイル) 5.検証
移行リハスケジュール (ここで年、月のエクセル図があるとイメージがつきやすい)
2017年1月1日(日)に運用にてURLを切り替えていただき、アプリチームにて
アプリケーション観点で動作確認を行う。
他システムとの連携確認は実施しない。
2017年1月2日(月)に顧客に動作確認を実施いただく。
本番検証で現行業務に支障を及ぼすと判断される場合、切り戻しを実施する。
切り戻しについては以下表のシステムを切り戻す。
現時点では移行期間は4日間必要と考える。
再移行期間の候補は以下の通り。
1.2017年1月7日(土)~2017年1月9日(月・祝)と前後1日
2.2017年3月18日(土)~2017年3月20日(月・祝)と前後1日
WBSをエクセルで書くことが多いので、数式や書き方を記載。
' 終了日の自動設定 =IF(開始日セル="","",WORKDAY(開始日セル,ROUNDUP(作業日数セル,0)-1,リスト!祝日設定範囲))
' 曜日の自動設定 ' aaa:「月」、「火」などの曜日1文字を表す ' aaaa:「月曜日」、「火曜日」などの曜日3文字を表す。 =TEXT(X月1日のセル,"aaa")
' タスク行の日ごとのセル ' 作業日が開始日と終了日の間(=作業期間中)の場合、1を設定している。 =IF(OR(作業日数セル="",作業日数セル=0),"",IF(AND(作業日セル>=開始日セル,作業日セル<=終了日セル),1,""))
' 条件付き書式1 ' 作業日が別紙「リスト」シートに設定した祝日範囲に含まれる場合、 ' COUNTIFで1が返るため、条件がTUREとなる。 ' この時、セルの塗りつぶしの色、フォント色を灰色にする。 ' 「条件を満たす場合は停止」チェックをONにする。 =COUNTIF(リスト!祝日設定範囲,作業日セル)=1
' 条件付き書式2 ' 作業日が土曜日の場合、WEEKDAYで7が返るため、条件がTUREとなる。 ' この時、セルの塗りつぶしの色、フォント色を灰色にする。 ' 「条件を満たす場合は停止」チェックをONにする。 =WEEKDAY(作業日セル)=7
' 条件付き書式3 ' 作業日が日曜日の場合、WEEKDAYで1が返るため、条件がTUREとなる。 ' この時、セルの塗りつぶしの色、フォント色を灰色にする。 ' 「条件を満たす場合は停止」チェックをONにする。 =WEEKDAY(作業日セル)=1
' 条件付き書式4 ' 指定の値を含むセルだけを書式設定で ' 「セルの値」「次の値に等しい」「=1」を設定する。 ' この時、セルの塗りつぶしの色、フォント色をオレンジ色にする。
Redmine等のRuby on Railsアプリケーションを
実行するためのApacheモジュールを導入します。
導入することのメリットは以下の通りです。
gem install passenger --no-rdoc --no-ri passenger-install-apache2-module
以下の警告は無視しました。
/usr/include/features.h:330:4: warning: #warning _FORTIFY_SOURCE requires compiling with optimization (-O) [-Wcpp] # warning _FORTIFY_SOURCE requires compiling with optimization (-O)
以下の設定依頼が表示されるので、メモしておきます。
Please edit your Apache configuration file, and add these lines: LoadModule passenger_module /usr/local/share/ruby/gems/2.0/gems/passenger-5.0.27/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/share/ruby/gems/2.0/gems/passenger-5.0.27 PassengerDefaultRuby /usr/bin/ruby2.0 </IfModule> After you restart Apache, you are ready to deploy any number of web applications on Apache, with a minimum amount of configuration!
ここで別のTeraTermを立ち上げ、
Apache2の設定ファイルを作成し、メモしたものを書き込みます。
vi /etc/httpd/conf.d/redmine.conf
# Passengerの基本設定。 LoadModule passenger_module /usr/local/share/ruby/gems/2.0/gems/passenger-5.0.27/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/share/ruby/gems/2.0/gems/passenger-5.0.27 PassengerDefaultRuby /usr/bin/ruby2.0 </IfModule> # サブディレクトリでRedmineを実行するための設定 RackBaseURI /redmine # Passengerが追加するHTTPヘッダを削除するための設定(任意) Header always unset "X-Powered-By" Header always unset "X-Rack-Cache" Header always unset "X-Content-Digest" Header always unset "X-Runtime" # Passengerのチューニングのための設定(任意) PassengerMaxPoolSize 20 PassengerMaxInstancesPerApp 4 PassengerPoolIdleTime 3600 PassengerHighPerformance on PassengerStatThrottleRate 10 PassengerSpawnMethod smart RailsAppSpawnerIdleTime 86400 PassengerMaxPreloaderIdleTime 0 # RedmineのCSSや画像へのアクセスを許可 <Directory "/var/lib/redmine/public"> Require all granted </Directory>
保存後、Apache2を再起動し、元のTeraTermでエンターを押下します。
/etc/rc.d/init.d/httpd restart
Apache上のPassengerでRedmineを実行するため、
Redmineのオーナーを変更します。
今回、AWSではApacheはrootユーザで実行しているため、
変更前のオーナーでも実行は可能です。
chown -R apache:apache /var/lib/redmine
Apacheのドキュメントルートに指定されているディレクトリに
Redmineのpublicディレクトリに対するシンボリックリンクを作成します。
ln -s /var/lib/redmine/public /var/www/html/redmine
再度、Apache2を再起動します。
これにより、全てのRailsアプリケーションも再起動されるようになります。
/etc/rc.d/init.d/httpd restart
コマンド以外のRedmineの初期設定については、
以下のURLを確認しながら画面上で行います。
http://redmine.jp/tech_note/first-step/admin/
cd /var/lib curl -O http://www.redmine.org/releases/redmine-3.2.1.tar.gz tar xvf redmine-3.2.1.tar.gz mv redmine-3.2.1 /var/lib/redmine
vi /var/lib/redmine/config/database.yml
production: adapter: mysql2 database: レッドマイン用DB名 host: localhost username: レッドマイン用ユーザ名 password: "レッドマイン用ユーザパスワード" encoding: utf8
スペースは2つ空けること。
パスワードはダブルクォートをつけること。
この設定がおかしいと後続のbundle処理でハマリます。
「/var/lib/redmine/config/database.yml.example」にサンプルファイルがあります。
vi /var/lib/redmine/config/configuration.yml
今回はお試しで導入することもあり、作成しませんでした。
日本語フォントファイルのパス、アップロードされたファイルの保管場所、
データベースの暗号化等も設定できます。
この設定ファイルも記述をミスると後続のbundle処理でハマリます。
「/var/lib/redmine/config/configuration.yml.example」にサンプルファイルがあります。
cd /var/lib/redmine bundle install --without development test
通常はここで普通に上手くいくようですが、私の環境では以下のエラーが発生しました。
[root@ip-xxx-xxx-xxx-xxx redmine]# bundle install --without development test /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- io/console (LoadError) from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/vendor/thor/lib/thor/shell/basic.rb:2:in `<top (required)>' from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/vendor/thor/lib/thor/shell/color.rb:1:in `<top (required)>' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/vendor/thor/lib/thor/shell.rb:17:in `shell' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/ui/shell.rb:14:in `initialize' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/cli.rb:12:in `new' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/cli.rb:12:in `rescue in start' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/cli.rb:10:in `start' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/exe/bundle:19:in `block in <top (required)>' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/friendly_errors.rb:7:in `with_friendly_errors' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/exe/bundle:17:in `<top (required)>' from /usr/local/bin/bundle:23:in `load' from /usr/local/bin/bundle:23:in `<main>'
「io/console (LoadError)」が存在しないと記載があるので、
以下のコマンドで追加で導入しました。
cd /var/lib/redmine gem install io-console
その後、「/var/lib/redmine」を全部削除し、最初からやり直したところ、上手くいきました。
cd /var/lib/redmine rake generate_secret_token
cd /var/lib/redmine RAILS_ENV=production rake db:migrate
cd /var/lib/redmine RAILS_ENV=production rake redmine:load_default_data
cd /var/lib/redmine chown -R 755 files log tmp public/plugin_assets
RedmineをAWSのEC2の無料版であるAmazon Linuxに導入します。
導入の前提として、WEBサーバ、DBサーバの設定が済んでいること。
WEBサーバにはApache2、DBサーバにはMySQLを利用します。
導入前の準備として、各ツールを揃えます。
yum -y groupinstall "Development Tools" yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel
yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts
yum install ruby-devel
gem install bundler --no-rdoc --no-ri
「–no-rdoc –no-ri」はドキュメントのインストールを省略するためのオプションです。
mysql -uroot -pデータベースパスワード
create database レッドマイン用DB名 default character set utf8; grant all on レッドマイン用DB名.* to レッドマイン用ユーザ名@localhost identified by 'レッドマイン用ユーザパスワード'; flush privileges; exit
yum -y install mysql-server mysql-devel
vi /etc/my.cnf
# 下記内容を追加([mysqld]に) # クライアントの文字コードに依存しない skip-character-set-client-handshake # 文字コード character-set-server=utf8
下記内容を追加 [mysql] default-character-set=utf8
/etc/rc.d/init.d/mysqld start chkconfig mysqld on chkconfig --list mysqld
ランレベルが2~5でonを確認する。
mysql -u root
SET PASSWORD FOR root@localhost=password('データベースパスワード');
character_set_filesystemとcharacter_sets_dir以外がUTF-8であることを確認する。
show variables like 'char%';
mysql -u root -pデータベースパスワード
ユーザ名が空のユーザを確認し、削除する。
SELECT user,host FROM mysql.user;
DELETE FROM mysql.user WHERE user='';
データベースを確認しデータベースtestを削除する。
SHOW DATABASES;
DROP DATABASE test; exit
cd /etc/pki/tls/certs openssl genrsa -aes256 1024 > server.key
Generating RSA private key, 1024 bit long modulus ......................++++++ ............++++++ e is 65537 (0x10001) Enter pass phrase:パスワード入力 Verifying - Enter pass phrase:パスワード再入力
openssl req -new -key server.key > server.csr
Enter pass phrase for server.key:パスワード入力 You are about to be asked to enter information that will be incorporated into your certificate request. 略 Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]:Akihabara Organization Name (eg, company) [Default Company Ltd]:OreOreCA Organizational Unit Name (eg, section) []:z-aws Common Name (eg, your name or your server's hostname) []:z-aws.net Email Address []:空欄 A challenge password []:空欄 An optional company name []:空欄
openssl x509 -in server.csr -days 36500 -req -signkey server.key > server.crt
Enter pass phrase for server.key:パスワード入力
mv server.key server.key.org openssl rsa -in server.key.org > server.key
Enter pass phrase for server.key.org:パスワード入力 writing RSA key
yum install mod_ssl
cp -pi /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.org vi /etc/httpd/conf.d/ssl.conf
下記内容に変更 #DocumentRoot "/var/www/html" ↓ DocumentRoot "/var/www/html" ErrorLog logs/ssl_error_log ↓ ErrorLog /var/log/httpd/ssl_error_log TransferLog logs/ssl_access_log ↓ #TransferLog logs/ssl_access_log CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" ↓ CustomLog /var/log/httpd/ssl_access_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" # POODLE SSLv3.0 脆弱性問題対処 SSLProtocol all -SSLv2 ↓ SSLProtocol all -SSLv2 -SSLv3 SSLCertificateFile /etc/pki/tls/certs/localhost.crt ↓ SSLCertificateFile /etc/pki/tls/certs/server.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key ↓ SSLCertificateKeyFile /etc/pki/tls/certs/server.key
プロトコル:TCP ポート:443
echo '<h1>It works!</h1>' > /var/www/html/index.html /etc/rc.d/init.d/httpd restart
https://xxx.xxx.xxx.xxx/
証明書の確認が表示された後、「It works!」が表示されれば正常です。
rm -f /var/www/html/index.html
vi /etc/httpd/conf/httpd.conf
下記の設定となるように変更(変更部分または重要部分のみ記載) # ドキュメントルート DocumentRoot "/var/www/html" # 最上位の制御 <Directory /> Options FollowSymLinks AllowOverride None </Directory> # ドキュメントルートの制御 <Directory "/var/www/html"> Options -Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> # アクセス制御ファイル名 AccessFileName .htaccess # ファイル名を指定しない場合の検索優先順位(index.html) <Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files> # iconsルートの制御 <Directory "/var/www/icons"> Options -Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> # エラーログ出力先 ErrorLog /var/log/httpd/error_log
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.org
プロトコル:TCP ポート:80
echo '<h1>It works!</h1>' > /var/www/html/index.html /etc/rc.d/init.d/httpd start
http://xxx.xxx.xxx.xxx/
「It works!」が表示されれば正常です。
rm -f /var/www/html/index.html
chkconfig httpd on chkconfig --list httpd
ランレベルが2~5でonを確認する。