オープンソースETLツールTalendでExcelのデータをデータベースにロードしてみた

オープンソースのETLツールTalendの使い方についてインストールから基本的な使い方までをまとめてみました。

Talendとは

TalendはオープンソースのData Integrationツールです。
利用用途としては主にETLという認識でしたが、HPをさっとみただけでは全容が把握できないほど多機能です。

HP: http://www.talend.com/
HP(日本):http://jp.talend.com/

有償版もあるので企業導入の際にも支障がありません。
コミュニティ版と企業版の違いは http://jp.talend.com/products/ の各ページに比較表があります。
表中で「Talend Open Studio for Data Integration」が無償のコミュニティ版、「Talend Enterprise Data Integration」と「Talend Platform for Data Management」が有償版です。

では、セットアップしてタイトルの通りExcelのデータをデータベースMySQLにロードしてみます。

セットアップ

1. コミュニティ版を入手

http://www.talend.com/download
にアクセスして[Data Integration]タブを開き[Talend Open Studio for Data Integration]の[Download Free Tool »]をクリックし、OSを選択するとDLが始まる。
コミュニティ版もサイズが450Mほどあるので時間がかかります。

2. 実行環境の準備

Talendは、Javaで動きますのでJava実行環境をインストールしておきます。

3. Talend Open Studio for Data Integration の起動

Talendの開発ツール Talend Open Studio for Data Integration は、Macの場合はインストール不要で、ダウンロードしたファイルを解凍して、すぐに利用できます。
TOS_DI-macosx-cocoa を開きます。

(Windowsはインストーラexeでインストールします)

4. ライセンスの承諾

初回起動時は、LGPL3ライセンスの承諾を要求されますので[承諾]をクリックしておきます。

プロジェクトの作成

Talend-create-project-1
新規プロジェクトの作成に「ExcelToMySQL」と入力して[作成]ボタンをクリックします。

Talend-create-project
[終了]をクリックするとプロジェクトが作成されます。

Talend-create-project-2
右上の[開く]をクリックします。

Talend-registration-to-cummunity
TalendForgeの登録は[スキップ]しておきます。

Talend-welcome
EclipseベースのTalend Open Studioが開きます。

ジョブの作成
[ようこそ]の画面中央の[新規作成…] > [Job]をクリックするか、 [ようこそ]を閉じて画面左の[ジョブ]の右クリックメニューから[ジョブの作成を]をクリックして新しいJobを作成していきます。

Talend-create-job
[Name]に適当なジョブ名(ここでは「FirstJob」)を入れて[終了]をクリックすると作成したジョブの編集画面が開きます。
なお、ジョブ名には空白や日本語は使えません。

Talend-create-job-2

Excelをデータソースとして定義

入力ファイルは以下のようなメールアドレスと名前のみを含むユーザリストのExcelデータです。
Talend-ExcelData

[メタデータ]を開き[Excelファイル]で右クリックし、メニューから[Excelファイルを作成]をクリックします。
Talend-Excel-1

[Name]のみが必須なので、[Name]を適当い入れて[次へ]をクリック
Talend-Excel-2

入力のExcelファイルを選択して、[シートパラメータの設定]で、入力のシートを選択します。ここでは”ユーザリスト”シートを選択しています。
Talend-Excel-3
[次へ]をクリックします。

[列名として先頭行を設定]にチェックをいれて[プレビューのリフレッシュ]ボタンをクリックすると、1行目が列名として設定されます。
Talend-Excel-4
Talendは日本語の扱いが微妙でExcelの先頭行が日本語だと”Cloumns1″の様な自動的に振られた名前になってしまいます。

[スキーマの説明]で[COLUMN]に1行目が列名として設定されていることを確認したら[終了]をクリックしてダイアログを閉じます。
Talend-Excel-5

MySQLのテーブルをデータソースとして追加

出力先のMySQLのテーブルは以下の通りです。
[SQL]
CREATE TABLE `users` (
`email` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`email`)
);
[/SQL]

MySQLのデータソースは、[メタデータ] > [DB接続]から[DB接続の作成]をクリックします。
Talend-MySQL-1

[Name]を入力して[次へ]
Talend-MySQL-2

[DB Type]で”MySQL”を選択肢、接続情報を入力していきます。
データベースはUTF-8なので、[追加パラメータ]には”&useUnicode=YES&characterEncoding=utf8″を追加します。
Talend-MySQL-3

接続のチェックのために[チェック]をクリックすると、接続にMySQLのJDBCドライバーが必要なためインストール用ダイアログが表示されます。
Talend-install-jdbc-1
[Download and install all module available]をクリックして、ライセンスを承諾するとモジュールのダウンロードが始まります。
インストールが終わると自動でダイアログが閉じ接続がチェックされます。
Talend-check-connection
[OK]をクリックして[次へ]をクリックします。

[次へ]が有効にならない場合は[終了]をクリックします。
データベース接続”users”が追加されているので、右クリックメニューを開き[スキーマ情報の取得]をクリックします。
Talend-get-scheme-info

すべてデフォルトのまま[次へ]をクリック
Talend-MySQL-4

[テーブル] “users”にチェックを入れて[次へ]
Talend-MySQL-5

内容を確認して[終了]
Talend-MySQL-6

ジョブを定義

Excelファイルを入力として定義します。
上で定義したExcelファイル”ユーザーリスト 0.1″をドロップするとExcelの入出力を選択するダイアログが表示されるので [tFileInputExcel]を選択します。
Talend-job-drop-Excel

DB接続を出力として定義します。
上で定義したDB接続”users”をドロップすると同様にダイアログが表示されるので[tMysqlOutput]を選択します。
Talend-job-drop-MySQL

これで、入出力が用意できました。
次に、入出力をつなげるマッピングを定義していきます。
マッピングを処理は右ペインから[tMap]をドロップします。ステンシルはたくさんあるので、検索を使っても探せます。
Talend-job-drop-tMap

Excel入力を[tMap]につなげるには、Excel入力上で右クリックメニューから[Row] > [メイン]を選択します。
Talend-mapping-1

選択するとExcel入力からの線が表示されるので、それを[tMap]にドロップします。
Talend-mapping-2

次に、[tMap]からMySQL出力へ接続します。
同様に、[tMap]の右クリックメニューから[Row] > [*New Output*(メイン)]を選択します。
Talend-mapping-3

出力名を入力して[OK]をクリック
Talend-mapping-4

[はい]をクリック
Talend-mapping-5

以下のように入出力がつながりました。
Talend-mapping-6

まだ、Excelの各列とMySQLのカラムがマッピングされていない状態なので、次にマッピングを定義します。
[tMap]をダブルクリックするとマッピングを定義用のウィンドウが表示されます。
Talend-mapping-7
[自動マップ]をクリックすると自動でExcelの列とMySQLのカラムを適当にマッピングしてくれます。
Talend-mapping-8

ジョブを実行

ジョブの実行は、下の[実行(ジョブFirstJob)]タブの中の[実行]ボタンをクリックすると開始します。
Talend-run-job

実行結果が表示されます。
Talend-run-result

MySQLのテーブルに追加されたことも確認できました。
Talend-select-result

以下、参考情報

Talend Open Studio for DI_v5「2つのテーブルスキーマを統合して集計」
DB等利用のJava自動生成 Talend Open Studio その5-1:DB入力表示
DB等利用のJava自動生成 Talend Open Studio 5-2.CSV書き出し
Talend Open Studio でジョブを作成する(CSVからデータベースへ)

JDBC を使用して Windows Azure SQL データベースに接続する方法

AWSCLIを利用してMySQLをS3へ定期バックアップする

1. AWSCLIのセットアップ

[bash gutter=”false”]
$ wget https://s3.amazonaws.com/aws-cli/awscli-bundle.zip
$ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
[/bash]

公式サイトの説明はこちら Getting Set Up with the AWS Command Line Interface – AWS Command Line Interface

インストールの確認

[bash gutter=”false”]
$ /usr/local/bin/aws –version
aws-cli/1.3.12 Python/2.6.6 Linux/2.6.32-279.5.1.el6.x86_64
[/bash]

AWSのアクセス情報などを設定

[bash gutter=”false”]
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: ap-northeast-1
Default output format [None]: json
[/bash]

デフォルトのリージョンは東京を指定しています。

コマンドを実行して設定を確認

[bash gutter=”false”]
# aws s3 ls
2014-04-04 13:13:07 mysql-app-backup
2014-05-21 13:13:07 wp-backup
[/bash]

上記は、s3のバケット一覧を取得するコマンドです。

バックアップスクリプトを作成

以下は、cronに登録するシェルスクリプト。
mysqldumpで対象データベースのバックアップを作成し、S3バケットにsyncします。

[bash title=”backup.sh”]
#!/bin/sh

THEDB="DATABASE-NAME"
THEDBUSER="DATABASE-USER"
THEDBPW="DATABASE-USER-PASSWORD"
THEDATE=`date +%d%m%y%H%M`

mysqldump -u $THEDBUSER -p${THEDBPW} $THEDB | gzip > /var/www/_backups/dbbackup_${THEDB}_${THEDATE}.bak.gz

find /var/www/_backups/db* -mtime +5 -exec rm {} \;

/usr/local/bin/aws s3 sync /var/www/_backups s3://BUCKET-NAME –delete
[/bash]

Cronにシェルスクリプトを登録

[bash gutter=”false”]
$ crontab -e
[/bash]

[text gutter=”false”]
0 3 * * * /path/to/backup.sh > /dev/null 2>&1
[/text]

以上で完了です。

参考: Automating Backups to Amazon S3 | trepmal*

elasticsearch 1.1をubuntu12.04にセットアップ

elasticsearchは、Solrと同じくApache Luceneをエンジンにしたオープンソースの検索システムですが、Kibanaなどのツールとの連携など、応用されている範囲が広く、ただの全文検索システム以上なツールです。

公式サイトの説明: http://www.elasticsearch.org/overview/elasticsearch/

全文検索システムを自分のシステムに組み込みたい場合は、elasticsearchの他に、SolrやAWSのCloudSearchが比較対象になるかと思いますが、対応しているツールの多さや、どのブログを見ても今から使うなら、前出のSolrよりもelasticsearchを選択するのが良さそうな印象。
参照: 全文検索システムの比較 – Elasticsearch vs Solr vs Amazon CloudSearch

何はともあれ、使ってみないと解らないのでインストールしてみました。

Javaのインストール

elasticsearchの実行には、Java 1.6以上が必要です。

$ sudo apt-get install openjdk-6-jdk

elasticsearchのインストール(参照: setup)

aptリポジトリが用意されているのでapt-getで入れてみます。
参照: repositories

$ wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -

/etc/apt/sources.listに、バージョン1.1のリポジトリを追加します

deb http://packages.elasticsearch.org/elasticsearch/1.1/debian stable main

apt-getでインストールして起動します。

$ sudo apt-get update
$ sudo apt-get install elastic search

起動と動作確認

$ sudo service elasticsearch start
 * Starting Elasticsearch Server                                                                [ OK ] 

$ curl -X GET http://localhost:9200/
{
  "status" : 200,
  "name" : "Fred Myers",
  "version" : {
    "number" : "1.1.0",
    "build_hash" : "2181e113dea80b4a9e31e58e9686658a2d46e363",
    "build_timestamp" : "2014-03-25T15:59:51Z",
    "build_snapshot" : false,
    "lucene_version" : "4.7"
  },
  "tagline" : "You Know, for Search"
}

データの追加と検索

curlでコマンドを直接データの追加や検索を実行する手順については、Elasticsearch.org Elasticsearch | Elasticsearchの一番下にあるムービーで説明されています。
ElasticSearch – Introduction on Vimeo

このムービーを見れば、後はReference [1.x]を参照しながら動作を確認できるようになります。

日本語検索、形態素解析プラグインの導入

デフォルトのセットアップだと、日本語の検索が正しく動作しません。
例えば、47都道府県のデータに対して「島根」で検索すると「島根」「福島」「広島」「徳島」「鹿児島」がヒットしてしまいます。参照: elasticsearchとkuromojiプラグインで日本語の全文検索 – yuhei.kagaya

そこで、日本語形態素エンジンを導入します。検索するとkuromojiがメジャーなようなのでkuromojiを入れてみます。(Github | elasticsearch/elasticsearch-analysis-kuromoji)

kuromojiは、プラグインとしてインストールします。
(apt-getでインストールした場合は/usr/shareの下にpluginコマンドがあります。)

$ sudo /usr/share/elasticsearch/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/2.0.0
-> Installing elasticsearch/elasticsearch-analysis-kuromoji/2.0.0...
Trying http://download.elasticsearch.org/elasticsearch/elasticsearch-analysis-kuromoji/elasticsearch-analysis-kuromoji-2.0.0.zip...
Downloading ............................................................................................................................................................................................................................................................................................................................................................................DONE
Installed elasticsearch/elasticsearch-analysis-kuromoji/2.0.0 into /usr/share/elasticsearch/plugins/analysis-kuromoji
~~~~

インストールしたらelasticsearchを再起動する必要があります。

~~~bash
$ sudo service elasticsearch restart

プラグインが有効になったかどうかは以下のコマンドで確認できます。

$ curl -XGET 'http://localhost:9200/_nodes?plugin=true&pretty'
...
      },
      "plugins" : [ {
        "name" : "analysis-kuromoji",
        "version" : "NA",
        "description" : "Kuromoji analysis support",
        "jvm" : true,
        "site" : false
      } ]
    }
  }
}

デフォルトのアナライザーとして登録するために、/etc/elasticsearch/elasticsearch.ymlに以下の設定を追加します。

index.analysis.analyzer.default.type: custom
index.analysis.analyzer.default.tokenizer: kuromoji_tokenizer

再起動で適用されます。

$ sudo service elasticsearch restart

以上が、全文検索にelasticsearchを利用するための最低限のセットアップ手順になります。

S3+CloudFrontでWebサイトを公開するには

S3に置いたファイルをCloudFrontでWebサイトとして公開する手順を調べたメモです。

調べた背景は、S3だけでスタティックなWebサイトを公開を試した場合に、S3だけだとバケット名とドメイン名が同じである必要がある。
しかし、S3のバケット名はAWS全ユーザでユニークである必要があるので、ドメイン名がすでに使われていたりする可能性もある。
その場合は、CloudFrontを利用するとバケット名に依存せずドメインを当てることができるということで、その手順を確認しました。

1. Static Website Hosting >> Enable website hosting を有効にする

Webサイト用のファイルを含むS3バケットのプロパティを開いて Static Website Hosting の Enable website hosting を選択して Index Document を指定し保存します。
s3-bucket-properties

2. CloudFront Distributionを作成

CloudFrontを開いて、[Create Distribution]ボタンから作成します。

Web を選択
cloudfront-create-distribution-1

Origin Settings >> Origin Domain Name でバゲットを選択すると Origin ID もセットされます。
cloudfront-create-distribution-2

Default Cache Behavior Settings はひとまず今回はデフォルト設定で次に進みます。

Distribution Settings の項目は、Alternate Domain Names (CNAMEs) にDNSに設定するCNAMEレコード名を、Default Root Object にindex.htmlを指定します。
cloudfront-create-distribution-3
保存して作成完了。

3. DNSレコードを追加

cloudfront-distoribution
Alternate Domain Names (CNAMEs) の値 “cf.co-meeting.com” をレコード名に、Domain Name をCNAMEの値として設定します。以下の設定画面は Dozens の例です。
dozens

CloudFrontのデプロイにはしばらく時間がかかります。しばらく待って設定した cf.co-meeting.com にアクセスすると、S3に保存されている index.html が表示されることを確認できます。

参考:
Using Alternate Domain Names (CNAMEs) – Amazon CloudFront

Windows Azure WebサイトでFuelPHPアプリを動かす

  1. WEBサイトを作成します。

新規Webサイトの作成

  1. Webサイトの作成-ウィザード1 – 名前とリージョンとデータベースにMySQLを選択

FuelPHP-Azure-2

  1. Webサイトの作成-ウィザード2 – データベースの確認

FuelPHP-Azure-3

  1. Webサイトの作成-ウィザード3 – リポジトリの選択

FuelPHP-Azure-4

  1. Bitbucketとの接続を許可します

FuelPHP-Azure-5

  1. リポジトリを選択します
    今回はbitbucketのリポジトリを利用しました。

FuelPHP-Azure-6

チェックボタンをクリックするとWebサイトの作成が始まります。

  1. 新しいWebサイトが追加されました

FuelPHP-Azure-7

  1. デプロイを確認
    fuelblogを選択し[デプロイ]タブを開くと、gitからcloneされたことを確認できます。

FuelPHP-Azure-8

デプロイはされていますが、まだデータベースの設定やmigrationはされていないので動きません。

  1. データベースの設定
    データベースのホスト名、データベース名、接続ユーザの情報は[構成]タブの[接続文字列]で確認できます。

FuelPHP-Azure-9
接続情報を db.php に指定します。

<?php
// fuel/app/config/production/db.php
/**
 * The production database settings. These get merged with the global settings.
 */
return array(
    'default' => array(
        'connection'  => array(
            'dsn'        => 'mysql:host=ja-cdbr-azure-east-a.cloudapp.net;dbname=fuelphpAC9JPSbeW',
            'username'   => 'b075b5148a0559',
            'password'   => 'f4f0edcd',
        ),
    ),
);

編集した db.php はコミットしておきます。

  1. production環境に設定する
    [構成]タブの[アプリケーション設定]に FUEL_ENV を追加します。

FuelPHP-Azure-10

  1. デプロイスクリプトの準備
    デプロイ時に、Composer updateとマイグレーションを実行するように設定します。

deploymentscriptの作成するために、Winsows Azure SDKを http://www.windowsazure.com/ja-jp/downloads/ からPHP / Mac のインストール を選択してダウンロードし、インストールします。
以下のコマンドでスクリプトを生成します。

$ azure site deploymentscript --php
info:    Executing command site deploymentscript
info:    Generating deployment script for Web Site
info:    Generated deployment script files
info:    site deploymentscript command OK

以下の2つのファイルができます

  • .deployment
  • deploy.sh

deploy.shの最後にComporserとマイグレーションの処理を記述します。

...
echo Running Composer.
cd $DEPLOYMENT_TARGET
"D:\Program Files (x86)\PHP\v5.4\php.exe" composer.phar update --prefer-dist -v

echo Running FuelPHP migration.
"D:\Program Files (x86)\PHP\v5.4\php.exe" oil refine migrate
cd $DEPLOYMENT_SOURCE

echo "Finished successfully."

oilの実行は、FUEL_ENV=productionを指定しなくても、[アプリケーション設定]が適用されます。

git add してpushします。

$ git add .deployment deploy.sh
$ git commit -m "deployment script"
$ git push origin master

新たにデプロイが実行されます。

FuelPHP-Azure-11

[Running deployment command…]のログを表示してみるとComposer updateとマイグレーションが正しく実行されたことが確認できます。

Command: bash deploy.sh

Handling Basic Web Site deployment.

KuduSync.NET from: 'D:\home\site\repository' to: 'D:\home\site\wwwroot'

Copying file: 'fuel\app\config\development\db.php'

Running Composer.

Loading composer repositories with package information

Updating dependencies (including require-dev)

  - Installing psr/log (dev-master a78d650)

    Downloading: connection...    Downloading: 0%               Downloading: 15%    Downloading: 30%    Downloading: 45%    Downloading: 60%    Downloading: 75%    Downloading: 100%

    Extracting archive

  - Installing monolog/monolog (1.5.0)

    Downloading: connection...    Downloading: 100%         

    Extracting archive

  - Installing fuelphp/upload (2.0.1)

    Downloading: connection...    Downloading: 100%         

    Extracting archive

monolog/monolog suggests installing mlehner/gelf-php (Allow sending log messages to a GrayLog2 server)

monolog/monolog suggests installing raven/raven (Allow sending log messages to a Sentry server)

monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)

monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))

monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)

Writing lock file

Generating autoload files

Running FuelPHP migration.

Performed migrations for app:default:

001_create_posts

Finished successfully.
  1. 動作確認
    動いた。

FuelPHP-Azure-12

  1. publicフォルダをルートディレクトリに設定する
    上記の動作確認は、http://fuelblog.azurewebsites.net/public/posts にアクセスしていたので、publicディレクトリをルートディレクトリとして指定し直します。
    プロジェクト直下に、以下のWeb.configを作成して、pushするとpublicなしでアクセスできるようになります。
<?xml version="1.0" encoding="utf-8"?>
<!-- Web.config -->
<!--
  For more information on how to configure your ASP.NET application, please visit
  [url=http://go.microsoft.com/fwlink/?LinkId=169433]http://go.microsoft.com/fwlink/?LinkId=169433[/url]
  -->
<configuration>
  <system.diagnostics>
   <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
  <appSettings>
    <add key="EMULATED" value="true" />
  </appSettings>
  <system.webServer>
      <httpErrors errorMode="Detailed"/>
      <defaultDocument>
      <files>
        <clear />
        <add value="index.php" />
        <add value="index.htm" />
        <add value="index.html" />
      </files>
    </defaultDocument>
      <rewrite>
          <rules>
            <rule name="Redir Subdir" stopProcessing="false">
                <match url="(.*)" ignoreCase="false" />
                <conditions>
                    <add input="{URL}" pattern="^/public" ignoreCase="false" negate="true" />
                </conditions>
                <action type="Rewrite" url="/public/{R:1}" appendQueryString="true" />
            </rule>
            <rule name="RegleFichierPublic" stopProcessing="true">
                <match url="^\/public\/(.*)$" ignoreCase="false" />
                <conditions>
                    <add input="{URL}" pattern="^/public" ignoreCase="false" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                </conditions>
                <action type="Rewrite" url="/public/index.php/{R:1}" appendQueryString="true" />
            </rule>
          </rules>
      </rewrite>
  </system.webServer>
</configuration>

補足

SDKのアンインストール手順メモ。

This package will install the Windows Azure SDK into /usr/local/bin/azure/

To use the command line interface after installation, type `azure` in the Terminal.

To uninstall, type `azure-uninstall` in the Terminal.

.gitmodulesは、Windowsのパス区切り文字に置き換えなくても動く。

submodule updateが失敗する(かなり頻発)が、そのときは何回か再試行または同期しなおすと正常実行される。
FuelPHP関連のsubmoduleは、FuelPHP自体をアップデートするとき以外はsubmoduleを外しておいた方が良さそう。
git submoduleの解除方法

参考

PHP and MySQL on Windows Azure: Getting Started and Deploying with Git – site point
Azure Web site で FuelPHP を動かして migration までやってみた
無料で使えるWindows Azure Webサイトの新モードを試す
[IIS][Azure]Configure FuelPHP – FuelPHP Forums
Getting started on Windows Azure with PHP on Mac OS. (youtube)

VagrantをMac OSXにセットアップ

バーチャルボックスのインストール

[bash gutter=”false”]
Vagrant has detected that you have a version of VirtualBox installed
that is not supported. Please install one of the supported versions
listed below to use Vagrant:

4.0, 4.1, 4.2
[/bash]

2014.2.3現在VagrantはVirtualBoxの最新4.3をサポートしていないので、Download VirtualBox (Old Builds): VirtualBox 4.2 よりインストーラをダウンロードしてインストールしました。

vagrantのインストール

[bash gutter=”false”]
$ gem install vagrant
Fetching: archive-tar-minitar-0.5.2.gem (100%)
archive-tar-minitar’s executable "minitar" conflicts with minitar
Overwrite the executable? [yN] y

Done installing documentation for archive-tar-minitar, childprocess, log4r, net-scp, net-ssh, vagrant after 7 seconds
6 gems installed
[/bash]

OS イメージ “box” の追加

以下のコマンドでOSイメージを追加できる
[bash gutter=”false”]
vagrant box add {title} {url}
[/bash]

通常利用するようなOSのboxイメージは http://www.vagrantbox.es に公開されています。

Ubuntu 12.04を選択して起動してみます。
[bash gutter=”false”]
$ vagrant box add Ubuntu1204 http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box
[/bash]
title にデフォルトの “base” 以外を指定した場合は Vagrantfile に設定が必要です。
[ruby title=”Vagrantfile”]
Vagrant::Config.run do |config|

# Every Vagrant virtual environment requires a box to build off of.
# config.vm.box = "base"
config.vm.box = "Ubuntu1204"

end
[/ruby]
設定後 init して upします。
[bash gutter=”false”]
$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
$ vagrant up
[default] Importing base box ‘Ubuntu1204’…
[default] Matching MAC address for NAT networking…
[default] Clearing any previously set forwarded ports…
[default] Forwarding ports…
[default] — 22 => 2222 (adapter 1)
[default] Creating shared folders metadata…
[default] Clearing any previously set network interfaces…
[default] Booting VM…
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] The guest additions on this VM do not match the install version of
VirtualBox! This may cause things such as forwarded ports, shared
folders, and more to not work properly. If any of those things fail on
this machine, please update the guest additions and repackage the
box.

Guest Additions Version: 4.1.12
VirtualBox Version: 4.2.22
[default] Mounting shared folders…
[default] — v-root: /vagrant
[/bash]
ssh で起動したboxにアクセスします。
[bash gutter=”false”]
$ vagrant ssh
[/bash]

追記 2014/4/21

久しぶりにboxを追加しようとしたら以下のエラーになった
[bash gutter=”false”]
$ vagrant box add CentOS_6_5 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box
[vagrant] Downloading with Vagrant::Downloaders::HTTP…
[vagrant] Downloading box: https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box
[vagrant] Downloading box: https://s3.amazonaws.com/github-cloud/releases/9086871/062c1990-5dbe-11e3-8636-484e1779fc04.box?response-content-disposition=attachment%3B%20filename%3Dcentos65-x86_64-20131205.box&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1398065366&Signature=9l7%2BBA06F7tX0NYrP3ydB%2FGgNYY%3D
[vagrant] Extracting box…
[vagrant] Cleaning up downloaded box…
Failed to untar the box file. This is usually because you’re
attempting to add a box that isn’t a valid box file. Please
double check that the box file is properly packaged.
[/bash]
そこで、vagrantをupdateしたところ、RubyGem版はもうサポートしないのでインストーラからインストールしろとのこと
[bash gutter=”false”]
$ gem update vagrant
Vagrant version 1.0.7
localhost@hrendoh:~ $ gem update vagrant
Updating installed gems
Updating vagrant
Fetching: vagrant-1.5.0.gem (100%)
Thanks for wanting to use Vagrant! Unfortunately, this is not the way
to install Vagrant anymore. We now make installers for the various operating
systems Vagrant supports.

Vagrant is no longer distributed as a RubyGem. Please download the latest
version for your operating system from the URL below. If you still wish
to use the RubyGem version, you can manually install version 1.0.7. Note that
the RubyGem version hasn’t been updated in over a year and will no longer
receive any updates.

Prior to installing Vagrant using the installer, make sure you uninstall
all your Vagrant gems, since they sometimes conflict.

http://www.vagrantup.com

If you want to learn more about why we don’t distribute using RubyGems
anymore, please read this: http://mitchellh.com/abandoning-rubygems
Successfully installed vagrant-1.5.0
Parsing documentation for vagrant-1.5.0
Installing ri documentation for vagrant-1.5.0
Installing darkfish documentation for vagrant-1.5.0
Done installing documentation for vagrant after 0 seconds
Gems updated: vagrant
[/bash]

RubyGemのVagrantをアンインストールして
[bash gutter=”false”]
$ gem uninstall vagrant

Select gem to uninstall:
1. vagrant-1.0.7
2. vagrant-1.5.0
3. All versions
> 3
Successfully uninstalled vagrant-1.0.7
Remove executables:
vagrant

in addition to the gem? [Yn] y
Removing vagrant
Successfully uninstalled vagrant-1.5.0
[/bash]

http://www.vagrantup.com/downloads.html
からインストーラ(vagrant_1.5.3.dmg)をダウンロードしてインストール

boxを追加してみると成功
[bash gutter=”false”]
$ vagrant box add CentOS6.5_64 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box
==> box: Adding box ‘CentOS6.5_64’ (v0) for provider:
box: Downloading: https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box
==> box: Successfully added box ‘CentOS6.5_64’ (v0) for ‘virtualbox’!
[/bash]
追加したboxをVagrantfileに指定して
[ruby title=”Vagrantfile”]
# config.vm.box = "hashicorp/precise32"
config.vm.box = "CentOS6.5_64"
[/ruby]
起動
[bash gutter=”false”]
$ vagrant up
[/bash]

[Bookmark]Gitを使い始めたらやっておきたい便利な設定いろいろ

Gitを使い始めたらやっておきたい便利な設定いろいろ : アシアルブログ
Gitのセットアップで大変お世話になりました。

homebrew の git に変えたら「bashのプロンプトにGitのbranch名を表示させる。」が動かなかったので、
bash_completionで「-bash: __git_ps1: command not found」となった時の対処法 を参考に .bashrc に以下を追加したらOKでした。
[text]
source /usr/local/etc/bash_completion.d/git-prompt.sh
source /usr/local/etc/bash_completion.d/git-completion.bash
PS1="\h@\u:\W\$(__git_ps1) \$ "
[/text]

ちなみにmacportsのgitの場合は
[text]
source /opt/local/share/git-core/git-prompt.sh
source /opt/local/share/git-core//contrib/completion/git-completion.bash
PS1="\h@\u:\W\$(__git_ps1) \$ "
[/text]


Githubにsshキー登録

[bash]
$ ssh-keygen -t rsa -C hrendoh@gmail.com
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hrendoh/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/hrendoh/.ssh/id_rsa.
Your public key has been saved in /Users/hrendoh/.ssh/id_rsa.pub.
The key fingerprint is:
f6:f6:24:b8:6d:3a:e6:73:2c:7d:d9:9d:29:3a:ce:21 hrendoh@gmail.com
The key’s randomart image is:
+–[ RSA 2048]—-+
| |
| |
| |
| |
| S |
| . o |
| .E+..o .o|
| =+B=+..o.|
| o+Bo=+ . |
+—————–+
[/bash]
~/.ssh/id_rsa.pubの内容を Key テキストボックスに貼付けて保存
SSH Keys

AWS CLIをmacOS Sierra 10.12.6にインストール

AWS CLIを macOS Sierra 10.12.6 にpipでインストールする手順のメモです。

この記事は、Yosemite用に書いてあったものを再確認して更新しました(2017.9.30)。

公式ドキュメント: AWS Command Line Interface のインストール – AWS Command Line Interface

Pythonのバージョンを確認

$ python --version
Python 2.7.13

Pythonのバージョンは「Python 2 version 2.6.5+ or Python 3 version 3.3+」ですので問題ありません。

pipはeasy_installでインストールできます。

$ sudo easy_install pip

pipでawscliをインストールします。

$ sudo pip install awscli

インストール完了、aws打つとヘルプが表示されます。

$ aws
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help
aws: error: too few arguments

アクセスキー・シークレットの設定は、aws configureコマンドで設定できます。

$ aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: YYYYYYYYYYYYYYYYYYYYYYYYY
Default region name [None]: us-east-1
Default output format [None]: 

また、以下のようにaws.cfgファイルを作成し、それをコマンド実行時の環境変数で指定することもできます。

[default]
aws_access_key_id=XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYY
region=us-east-1

例えば、S3のバケットの一覧をしてみる場合は以下のように指定できます。

$ export AWS_CONFIG_FILE=./aws.cf
$ aws s3 ls
2011-04-06 01:15:49 redmine_backup
2014-01-05 23:14:22 wp-backup-hrendoh

AWS CLIの各種コマンドのリファレンスは、AWS CLIを参照できます。

CentOS 6.3でRsyslog ommailを利用してシステムアラートを送信するには

ommail はrsyslogで特定のエラーが発生した場合、メールアラートを送信するモジュールです。
CentOS 5系でommailを使用する場合は、rsyslogをコンパイル・インストールし直す必要がありましたが、CentOS 6以降では、デフォルトでommail.soを含むrsyslogがインストールされていますので設定だけで利用することができます。

/etc/rsyslog.d/ommail.conf

[text]
$ModLoad ommail

$ActionMailSMTPServer 192.168.1.2
$ActionMailFrom alert@example.com
$ActionMailTo admin@example.com
$template mail_subject,"Syslog Warning"
$template mail_body,"%fromhost%\r\n%msg%"
$ActionMailSubject mail_subject
$ActionExecOnlyOnceEveryInterval 15

*.error :ommail:;mail_body
[/text]
主な設定は以下のとおり

  • $ActionMailSMTPServer: SMTPサーバーのホスト名/IPアドレス
  • $ActionMailFrom: アラートメールの送信者アドレス
  • $ActionMailTo: アラートメールの送信先アドレス
  • $ActionMailSubject: メールタイトル
  • $template mail_subject: メールタイトルのテンプレート
  • $template mail_body: メール本文のテンプレート
    ール本文のテンプレート
  • ActionExecOnlyOnceEveryInterval: メール送信間隔

SELinuxの設定

SELinuxが有効な場合は、rsyslogからメールを送信できないように制限されています。
setseboolコマンドでlogging_syslogd_can_sendmailを有効にします。
[bash]
setsebool -P logging_syslogd_can_sendmail 1
[/bash]
getseboolで確認
[bash]
# getsebool -a | grep logging
logging_syslogd_can_sendmail –> on
[/bash]

iperfコマンドを利用してサーバー間のネットワーク速度を測る

One both machines run:
[bash]
sudo apt-get install iperf
[/bash]

Then on Computer A:
[bash]
iperf -s
[/bash]

And on Computer B:
[bash]
iperf -c <address of Computer A>
[/bash]
On the client machine, you’ll see something like this:
[bash]
oli@bert:~$ iperf -c tim
————————————————————
Client connecting to tim, TCP port 5001
TCP window size: 16.0 KByte (default)
————————————————————
[ 3] local 192.168.0.4 port 37248 connected with 192.168.0.5 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1.04 GBytes 893 Mbits/sec
[/bash]

参考: How do you test the network speed betwen two boxes?