ラベル AWS の投稿を表示しています。 すべての投稿を表示
ラベル AWS の投稿を表示しています。 すべての投稿を表示

2017年3月11日土曜日

JAWS DAYS 2017 セッション1 「AWSでアプリ開発するなら知っておくべきこと」

初めてのJAWS DAYS参加です。
1発目のセッションは事前申し込みした「管理者に送る処方箋」ではなく、
「AWSでアプリ開発するなら知っておくべきこと」に出ました。


スケーラビリティ
水平・垂直

アーキテクチャのベストプラクティス
Design for failure
Build Security in Every Layer
Leverage Many Storage Options
Implement Elasticity
Think Parallel
Loose Coupling
Don't Fear Constraints

Everything fails, all the time.
by Wanner Vegl???

Design for failure
WebサーバとDBを分ける。
EC2とRDS

次にフェールオーバーや冗長性を考える
冗長構成にするなど。

Build Security in Every Layer
全てのレイヤーでセキュリティを確保

Leverage Many Storage Options
4種類のストレージを使い分けろ
  • S3
  • Glacier
  • EFS
  • EBS
4種類のDBを使い分けろ
  • RDS
  • Redshift
  • DynamoDB
  • ElastiCache

Implement Elasticity
動的な構成を前提とすること

Think Parallel
並列アーキテクチャを試すこと

Loose Coupling
疎結合
コンポーネントの中身を参照しないようにする

コンポーネントを結合した処理の場合、
キューにすることで一から再処理する必要はなくなる。

Asynchronous Integration
本当に即座にレスポンスが必要かを考える。
非同期処理のメリット
・アプリケーションがブロックされない(ユーザ体感の向上) ・よりスケーラブルになる

Don't Fear Constraints
スケールアップの他に、負荷分散やキャッシュも検討できる

The Twelve-Factor App
Herokuのエンジニアが公開したWebアプリ開発の方法論

Codebase
アプリトコードベースは1:1にしろ

Dependencies
特定の環境に依存しないようにする。
アプリと必要なモジュールを同梱してリリースする。

Config
環境によって異なる設定はOSレベルの環境変数によって注入されるべき

Backing Services
?

Build, Release, Run
上記3つのステージを厳密に区分すべき
各リリースに一意のIDを振るべき

Process
プロセス間共有をなくすべき
永続化するデータは外部領域にだす(DBなど)
ファイルやメモリはあくまでキャッシュとして扱い、永続化には用いないこと

Port binding
???

Dev/prod parity
本番環境と開発環境は一致させるべき
CI/CDは環境が同じであることが前提

ステートレスにするためのセッション情報の扱い
セッション情報はec2インスタンスで持たずに、
DynamoDBに外だしなどをする

DevOps
背景は、不確実性とスピード性が加速していること
Culture + Practice + Tool

Build → Test → Release Feadback ← ???

AWSのDocker管理サービス
ECS

自動ロールバック
失敗時の最も早いリカバリ

2017年1月21日土曜日

Servlet / JSP 再入門とAWSやLinuxの雑記

枯れた技術ですが必要があり復習。全然入門レベルから抜け出せてないですが。

前提:
デプロイ予定:amzn-ami-hvm-2016.09.1.20161221-x86_64-gp2(CentOS6ベース)
開発環境:
Mac OSX
Spring Tool Suite 3.8.3(Eclipse Neon.2(4.6.2)ベース)


メモ

AWSの初期設定
  • locale変更(/etc/sysconfig/i18n)
  • NICの設定(/etc/sysconfig/network)
  • 固定IPの場合(/etc/sysconfig/network)
  • 一般ユーザでsudoしたい場合
  • sshのパスワード認証を禁止する
参考:お便利サーバー.com サーバーを前提としたネットワーク設定

locale変更
$ vim /etc/sysconfig/i18n
LANG="ja_JP.utf8"
LC_CTYPE="ja_JP.utf8"
参考:
Qiita sshでログインした時、localeまわりでエラーが出た場合の対処法
CentOS(6.0)でロケール関係の設定

固定IPの場合
/etc/sysconfig/networkにホストのIPアドレスとサブネットマスクを記載する
IPADDR=xx.xx.xx.xx NETMASK=xx.xx.xx.xx

一般ユーザでsudoしたい場合
$ usermod -aG wheel <USER> ←G=補助グループの設定。a=追加(ないと置き換え)
# groups <USER> ← 確認
# visudo
# %wheel  ALL=(ALL)       ALL  ←コメント(#)を外す
参考:
Qiita Linuxでユーザーをグループに追加する Qiita Linuxコマンドでユーザーのグループ確認・変更。

sshのパスワード認証を禁止する
# vi /etc/ssh/sshd_config
PasswordAuthentication no
参考:sshでパスワード認証を禁止するには

/etc/sysconfig/network
centosのネットワーク設定ファイル
HOSTNAMEの変更時に設定を忘れないこと
参考:
CentOS6.0でホスト名を書き換える

ZeroConf
ITプロ Linuxキーワード Zeroconf
DNSやhostsファイルを使用せずに、ホスト名だけでホストを特定する仕組み。
ということで、通常サーバには不要
$ cat /etc/sysconfig/network
NOZEROCONF=yes

Java8の"JDK"を入れる
java-1.8.0-openjdk.x86_64はJREなんですね。ややこしい。
どこかのwebサイトに載っていたおかげで知りました。
まぁyum searchのパッケージの説明にも書いてはあるんですが。。。
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment
いち開発者としてはjavac入りのJDKを入れます。
$ yum update -y
$ yum install -y java-1.8.0-openjdk-devel.x86_64


システムJava(1.7)のままだったので、1.8にふりかえます。
$ alternatives --config java
2 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
   2           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2


# java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-b15)
OpenJDK 64-Bit Server VM (build 25.111-b15, mixed mode)
# javac -version
javac 1.8.0_111
参考:Task Notes CentOSのalternativesでJavaのバージョン管理

tomcatの対応Javaバージョン表
公式Apache Tomcat Versions
まだalpha版だけどtomcat9も出ている。これはJava8が必要。
tomcat7/8.0/8.5はJava7で対応(tomcat7はWebSocket以外はJava6で問題なし)

service登録周り
/etc/rc.d/init.dに起動・停止スクリプトを置かないとサービス登録できません。
置いたら、
$ sudo chkconfig --add <service name>
$ sudo chkconfig <service name> on

SELinuxの確認
$ getenforce Disabled

IntelliJ CE(Community Editin)は Java EE非対応
大人の事情で、Eclipseを使うことにします。

Spring Tool SuiteにTomcatプラグインを入れる
今回はMarketplaceから入れました。Tomcat Manager Plugin 9.1.2

Mac OSXでEclipseを使うときは、¥ではなく\
¥だとEclipseがエスケープだと認識してくれない。。。

<html lang="ja">
「ダブルクォートいるっけ?」ググった。
改めて思うと、文字列をダブルクォートくくらないのは、Linuxのシェルくらいかな。

HTMLのテンプレート(Eclipse on Max OSX)
Preference → Web → HTML files → Templates → new HTML File(5) → Edit

cyberduckでAWS接続
FTPでなくSFTPでした。「pemどこに設定すんだろ」と思わず調べる
こちらのQiita記事(【AWS】cyberduckからファイルのアップロード、ダウンロードができない)に感謝です。

jarのデプロイ
参考:
迷走男子!! [Tomcat] Tomcatへのwebアプリのデプロイ方法(jarファイル編)
(tomcat_base)/webapps # tree hoge
hoge
`-- WEB-INF
    |-- lib
    |   `--(deploy jar file)
    `-- web.xml
というふうに、webappsにディレクトリ分けた上で、下記を配備
  • libディレクトリ
  • deploy jar file
  • web.xml

2017年1月4日水曜日

AWS / bitnamiを試す

何をやってもハマります
AWSのEC2インスタンスにlaravel用bitnamiパッケージを展開します。


メモ

bitnami
LAMP用のlaravelパッケージを使ってみました。

localeの設定に失敗する
/home/ec2-user/lampstack-5.6.29-0/mysql "****": perl: warning: Setting locale 
failed.
perl: warning: Please check that your locale settings:
 LANGUAGE = (unset),
 LC_ALL = (unset),
 LC_NUMERIC = "C",
 LC_CTYPE = "UTF-8",
 LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
デフォルトのままだからなのか?
jpの設定にしたらこのlocaleエラーは無くなりました。

export LC_ALL=ja_JP.UTF-8
シェル変数・環境変数を共にjaに変更

/etc/sysconfig/i18n
国際化用ファイルもenのままだったので"ja_JP.utf8"で上書きました。
こちらのQiitaの記事を参照にして、インスタンスを再起動しました。

Perl Module Data::Dumperを入れても、入っていないって言われる
Error: Error running /opt/lampstack-5.6.29-0/mysql/scripts/myscript.sh 
/opt/lampstack-5.6.29-0/mysql "****": FATAL ERROR: please install the following 
Perl modules before executing scripts/mysql_install_db:
Data::Dumper
makeでインストールした(パスを通してなかった?)せいでData::Dumperを実行できていなかったみたいで、
yumでインストールしたところ問題なく実行できた。
参考:orenoblog エンジニアになりたいExcel方眼紙erの物語 /usr/bin/mysql_install_db実行時にFATAL ERROR: please install the following Perl modules before executing /usr/bin/mysql_install_db:

perl -e 'use モジュール名;'
モジュールがインストールされているかのチェックに使える。
Data::Dumperですが、Dumperだけの指定でよかった
また、当たり前のような話ですが、パス通ってなかったら直下で実行する。 参照:Perlモジュールのインストール方法

上のゴタゴタが片付いてもまだエラーが出る
/opt/lampstack-5.6.29-0/php/bin/fixreg.php 
/opt/lampstack-5.6.29-0/php/lib/php/.registry @@BITROCK_PHP_ROOT@@ 
/opt/lampstack-5.6.29-0/php
Press [Enter] to continue:

Error: Unknown error while running /opt/lampstack-5.6.29-0/php/bin/php -q 
/opt/lampstack-5.6.29-0/php/bin/fixreg.php 
/opt/lampstack-5.6.29-0/php/lib/php/.registry/.channel.pear.amazonwebservices.com
 @@BITROCK_PHP_ROOT@@ /opt/lampstack-5.6.29-0/php
Press [Enter] to continue:

Error: Unknown error while running /opt/lampstack-5.6.29-0/php/bin/php -q 
/opt/lampstack-5.6.29-0/php/bin/fixreg.php 
/opt/lampstack-5.6.29-0/php/lib/php/.registry @@BITROCK_APACHE_ROOTDIR@@ 
/opt/lampstack-5.6.29-0/apache2
Press [Enter] to continue:

Error: Unknown error while running /opt/lampstack-5.6.29-0/php/bin/php -q 
/opt/lampstack-5.6.29-0/php/bin/fixreg.php /opt/lampstack-5.6.29-0/php/etc 
@@BITROCK_PHP_ROOT@@ /opt/lampstack-5.6.29-0/php
Press [Enter] to continue:
Warning: Problem running post-install step. Installation may not complete 
correctly
 Unknown error while running chown -R root:daemon 
/opt/lampstack-5.6.29-0/frameworks/laravel/storage
Press [Enter] to continue:

Error: Unknown error while running /opt/lampstack-5.6.29-0/ctlscript.sh start 
apache & > /dev/null

結論
手動で設定しよ!