新米インフラエンジニアの研修日記

とある会社で研修させて頂いたことを書いてます。

ローカルPC上で、DynamoDBのコマンドテスト環境作成

DynamoDBについて全く知らなかったので、コマンドテストができる環境を作成します。

docs.aws.amazon.com

Java Runtime Engine (JRE) バージョン 6.x 以上をインストールしてあること

私の環境がWindows7なので、Windows7でやってみます。


http://dynamodb-local.s3-website-us-west-2.amazonaws.com/dynamodb_local_latest.zip

置きたい場所にフォルダ作って、上記URLからzipファイルをダウンロードして、解凍します。

コマンドプロンプトで、解凍したフォルダの中に入り、下記を実行します。

java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb

f:id:the-casket-of-star:20160502160641p:plain

上記の状態になったら、ブラウザで下記URLへ
http://localhost:8000/shell/

すると下図のような画面に飛びます。 左側にjavascriptを入力して、真ん中の▶をクリックすると右側に実行結果が出ます。

f:id:the-casket-of-star:20160502155434p:plain

いろいろ試していきます~

Solr Cloud (ver.5.5.0) ~サーバ3台~

目次

  • 概要

  • 作成手順

  • 確認


概要

サーバ3台構成で、Zookeeper(3.4.8)とSolr Cloud(5.5.0)を使い、分散冗長構成の作り方をまとめます。
OSは、CentOS6.7です。

作成手順

まず、Zookeeperを用意します。
設定はこちらに記載してます。

the-casket-of-star.hatenablog.com

/opt/zookeeper/bin/zkServer.sh start
まで行った前提です。

Solrの設定を行います。

こちらを参考にさせて頂きました。

Tutorial – Deploying Solrcloud 5 on Amazon EC2 | Blog of France Labs on Search technologies

cd /tmp
wget http://ftp.tsukuba.wide.ad.jp/software/apache/lucene/solr/5.5.0/solr-5.5.0.tgz
tar -zxvf solr-5.5.0.tgz
mv /tmp/solr-5.5.0 /opt/
ln -s /opt/solr-5.5.0 /opt/solr

cd /opt/solr/
vi ./bin/solr.in.sh ※変更箇所
================================================
ZK_HOST="<Server1のIP>:2181,<Server2のIP>:2181,<Server3のIP>:2181"
ZK_CLIENT_TIMEOUT="150000"
SOLR_HOME=/var/solr/data
SOLR_PORT=8983
SOLR_MODE=solrcloud
================================================

mkidr -p /var/solr/data
chmod 777 /var/solr/data

cp -ap /opt/solr/server/solr/solr.xml /var/solr/data/
vi /var/solr/data/solr.xml
   <str name="host"><Server1のIPを記載></str>

solrを起動します。
オプションの -cはクラウドモードで起動するのに必要です。

./bin/solr start -c
Waiting up to 30 seconds to see Solr running on port 8983 [\]  
Started Solr server on port 8983 (pid=6299). Happy searching!

coreを作ります。

 ./bin/solr create -c test

※testはcore名なので、任意のcore名を指定して下さい。

ls /var/solr/data

testフォルダがあることを確認します。

間違えた時は、deleteコマンド

./bin/solr delete -c test

ブラウザで、

http://xxx.xxx.xxx.xxx:8983/solr/#/
にアクセスすると、下図のように表示されるはずです。

f:id:the-casket-of-star:20160427132120p:plain

左側のCore Adminをクリックすると、先ほど作ったcoreがあります。
f:id:the-casket-of-star:20160427115526p:plain

 cd /opt/solr/server/scripts/cloud-scripts/
./zkcli.sh -zkhost <Server1のIP>:2181,<Server2のIP>:2888,<Server3のIP>:2888 -cmd upconfig -confdir /opt/solr/server/solr/configsets/basic_configs/conf -confname solrconfig

上記までを、 残り2台のサーバ上で実行します。
IPアドレスは適宜変更して下さい。


ブラウザの アドレスバーで以下を実行すると、

http://xxx.xxx.xxx.xxx:8983/solr/admin/collections?action=CREATE&name=test&numShards=1&replicationFactor=3&collection.configName=solrconfig&maxShardsPerNode=3

各値について

  • name: collectionの名前

  • numShards: Shardsの数

  • replicationFactor: shards毎のレプリケーションの数。サーバーの台数と同じ必要がある。

  • collection.configName: /var/solr/data/test/conf/ の中の設定ファイル。初期はsolrconfig.xml

  • maxShardsPerNode: NodeあたりのShardsの最大数。

以下のようなXMLが返ってきます。

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">8649</int>
  </lst>
  <lst name="success">
  <lst>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">7170</int>
    </lst>
    <str name="core">test_shard1_replica1</str>
  </lst>
  <lst>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">7891</int>
  </lst>
  <str name="core">test_shard1_replica2</str>
  </lst>
  <lst>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">7903</int>
  </lst>
  <str name="core">test_shard1_replica3</str>
  </lst>
  </lst>
</response>


確認

ブラウザで確認したら、Recoverring状態でした。 f:id:the-casket-of-star:20160427140636p:plain

LeaderのSolrを再起動したら、全てActiveになり、再度Server1のSolrをstopしたら、leaderが変更されたのを確認しました。 f:id:the-casket-of-star:20160427141255p:plain

各サーバーのデータディレクトリの中に、
test_shard1_replica1
test_shard1_replica2
test_shard1_replica3

がそれぞれ作られました。

データを入れた検証はまた今度。

Solr Cloud 調査編 Ⅱ

前回に引き続き、Solr Cloudでわかったことを記録しておきます。
メモレベルですので、あまり詳しくはありません。

bin/solr startすると

bin/solr.in.shを読んで起動してます。

下記のリンクの方の構成はAWSのEC2で作られていますが、設定ファイル以降は似たようなものなので、間違いではなさそうかなぁと。

Tutorial – Deploying Solrcloud 5 on Amazon EC2 | Blog of France Labs on Search technologies

bin/solr.in.shで編集するとこ。

ZK_HOST= "<Solr1_IP>:2181, <Solr2_IP>:2181, <Solr3_IP>:2181" 
SOLR_HOME='Solr ホームディレクトリのパス'
SOLR_PORT=8983</br>
SOLR_MODE=solrcloud</br>


あとは、zkcli.sh を実行するように書いてあるので、下記のホスト名を自分の環境に合わせて、変更したら行けるのではないかと思ってますが、まだできてません。

cd server/scripts/cloud-scripts

./zkcli.sh -zkhost <Solr1_IP>:2181,<Solr2_IP>:2888,<Solr3_IP>:2888 -cmd upconfig -confdir /home/admin/solr-5.1.0/server/solr/configsets/basic_configs/conf -confname myconfig


coreとなるフォルダと設定ファイルを全てのサーバーに用意すれば、行けるのではないかという現状の推測です。

AWSのセキュリティ対策

AWSのセキュリティ対策について

  • ISO7階層モデル

  • 各階層でのAWS対策



まず、ISO7階層モデルというものがあります。

L7:アプリケーション
L6:プレゼンテーション
L5:セッション
L4:トランスポート
L3:ネットワーク
L2:データリンク
L1:物理

ソフトウェアでの制御がL4より上
ハードウェアとネットワークでの制御がL3より下
になります。

■L1、L2はユーザは何もしなくていいのです。
これはAWSのデータセンターで働いてる人がなんとかしてくれてます。

■L3の領域は
VPCで対策ができます。

  • サブネット(プライベートネットワーク)を作る

  • ネットワークACL(AccessControlList)で制限する
    ネットワークACLは基本許可なので、拒否する設定を書きます。

■L4の領域は
セキュリティグループで守ります。
サブネット同士間のファイアーウォールのみ許可したりします。

■L5の領域は
SSL サーバー証明書を設置する対策です。

管理方法は2つ
①CertificateManger
②IAM

設定箇所は3つ
①CloudFront
②EC2
③ELB

ELBにSSLを設置する項目として2つあります。
①証明書
SSL Ciphers
Ciphersとは、どのような暗号アルゴリズムを使うかを決めます。
バージョンはSSLv2を使います。
SSLv3があったけど、脆弱性があったので使用しません。

  • 基本EC2に繋ぎたいならパブリックIPは付与せず、ELB経由で繋ぐこと。

  • どうしてもEC2にGlobalで繋ぎたかったらVPN接続をすること。

というルールを守るとかなりセキュアになります。

AWSの4/19リリースについて

シカゴであったAWS SUMMITで発表があったそうなので、リリースノートに書いてあった内容をまとめます。


AWS SDK for Java 1.10.70 : Release Notes : Amazon Web Services
1. S3

リージョンをまたいだ転送速度が早くなりました。
例えば、東京リージョンで運用しているデータを、シンガポールリージョンに転送することでDR対策とすることがスムーズに行えるようになります。

AWS Storage Update – Amazon S3 Transfer Acceleration + Larger Snowballs in More Regions | AWS Blog


2. Snowball

 ケースに入れて安全に運ぶサービスですが、今まで50TBだったのが80TBに変わりました。  US East (N. Virginia), US West (Oregon, N. California), EU (Ireland), Asia Pacific (Sydney), and AWS GovCloud (US) のりージョンで利用開始しました。
 他のリージョンも今年中らしいです。

Shipping Considerations for AWS Snowball - AWS Import/Export

www.publickey1.jp

  1. CodePipeline

Codecommitと繋げれるようになり、
→Cl→codepipelineという流れで実装できるようになりました。

  1. Beanstalk

yum updateみたいなものが自動的に実行されるようになり、脆弱性についての問題の為にユーザがメンテナンスする時間を減らせます。
セキュリティ対策を自動で行ってくれるのはいいですね
www.publickey1.jp


  1. Inspector

    リージョンが増えました。
    eu-west-1, us-east-1, ap-northeast-1

東京リージョン来ました!

6. EBS



  1. Cognite

今までGoogleFacebookのアカウントを使用して、スマホアプリからのログイン認証(シングルサインオン)を行ってましたが、
Cognite単体でログイン認証ができるようになりました。


OktaやAzureの認証との競争になりそうです。
[New] Amazon Cognito 向け User Pools | Amazon Web Services ブログ

8. Kinesis firehorce


今までlambdaに実行スクリプトを書いてDBにデータを入れてましたが、
Kinesisから直接 ElasticSearchに送れるようになりました。
IoTとして各デバイスからKinesis→ElasticSearchという流れをくめるので、データの可視化がすごく簡単になります。
Amazon S3 | Amazon Web Services ブログ

Poderosaで複数のターミナルに対して同じコマンドを同時に実行する方法

僕はWindows使ってるんですけど、
Macの人が複数のターミナルに同時にコマンド打ってるのを見て、
WindowsPoderosaでもできないか調べたら、

ありました!


http://tiida.cocolog-nifty.com/netblog/download/rmainte358.zip

こいつを解凍して、インストールフォルダに入れるだけ。
これは便利だ!

Poderosaで開いている複数のターミナルに対して同じコマンドを同時に実行する方法
kakakikikekeのブログ: Poderosaで開いている複数のターミナルに対して同じコマンドを同時に実行する方法

Solr Cloud 調査編 Ⅰ

Solr Cloudがうまく動作出来てませんが、設定ファイルややってみたことを書いていきます。


ver.4.10.4です。
前回作ろうとしてできなかったレプリカを設定できるようにするため、設定ファイルを修正します。


Solrの設定ファイルは、
solrのホームディレクトリ直下の
solr.xml

中身はこちら

<solr persistent="false">
  <cores adminPath="/admin/cores" host="${host:}" hostPort="${jetty.port:8983}" hostContext="${hostContext:solr}">
    <core name="core0" instanceDir="core0" />
    <core name="core1" instanceDir="core1" />
  </cores>
</solr>

Solrを起動して、Add Coreした場合、
coreタグのところに追加されていきます。


ちなみにver.5.5.0の場合は、

<solr>

  <solrcloud>

    <str name="host">${host:}</str>
    <int name="hostPort">${jetty.port:8983}</int>
    <str name="hostContext">${hostContext:solr}</str>

    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>

    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
    <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>

  </solrcloud>

  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:600000}</int>
    <int name="connTimeout">${connTimeout:60000}</int>
  </shardHandlerFactory>
</solr>

全然違います。(・へ・)


あと、データ用ディレクトリの
各coreディレクトリ/conf/
の中に
solrconfig.xml
があります。
長いので載せませんが、

dataDirは指定すること

あとはまだよくわかってません。
curlでsolrに対して叩けば、solrconfig.xmlが変更されていくのかなという感じです。
このファイルが重要な気がします・・・。


5.5.0やってみた

coreを作ります
bin/solr create -c test1 -d /opt/solr-5.5.0/server/solr/configsets/basic_configs/conf/

実行結果

Copying configuration to new core instance directory:
/opt/solr-5.5.0/server/solr/test1

Creating new core 'test1' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=test1&instanceDir=test1

{
  "responseHeader":{
    "status":0,
    "QTime":2642},
  "core":"test1"}

coreを削除するとき

bin/solr delete -c new_core                                                                                                                                                                    

Deleting core 'new_core' using command:
http://localhost:8983/solr/admin/cores?action=UNLOAD&core=new_core&deleteIndex=true&deleteDataDir=true&deleteInstanceDir=true

{"responseHeader":{
    "status":0,
    "QTime":0}}

d.hatena.ne.jp

bin/solr create -help
とすると、
createにhelpオプションないから、
create_core -help
create_collection -help
にしてねって怒られます。

ブラウザでcoreができたのを確認しました。