AnsibleでUbuntu 14.04にLAMPをセットアップ

管理ホスト、対象ホスト共にUbuntu 14.04の環境でAnsibleを利用する手順について調べたことをまとめました。

インストール、動作確認、LAMP環境構築の順に解説しています。

LAMP環境を構築するPlaybookについてはGithubに公開していますので、全体のコードはこちらを参照ください:
https://github.com/hrendoh/ansible-lamp-simple

動作確認は、Ansibleの実行をVagrant上で、環境構築の対象サーバーはAWS EC2インスタンスで行っています。
Ansibleを実行する管理ホスト用のVagrantfileもGithubプロジェクトにいれてあるので、プロジェクトをClone後、この記事の内容をすぐに試せるようにしています。

また、LAMP構築のPlaybookは、公式のサンプル集 ansible/ansible-examples のLAMPサンプル lamp_simple をUbuntu 14.04用に修正したものになります。
CentOS、RHELを利用の場合は、公式のPlaybookが利用できます。

インストール

Ubuntu 14.04にAnsibleをインストールします。

デフォルトのAptリポジトリからインストールすると古い1.5.xがインストールされてしまうので、公式のPPAリポジトリを追加してインストールします。

$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible

“AnsibleでUbuntu 14.04にLAMPをセットアップ” の続きを読む

AWS API GatewayのバックエンドAPIをLaravel 5x Swagger-PHPで構成するには

Laravel 5で作成したAPIをAWS Elastic Beanstalkにデプロイし、AWS API GatewayのHTTPプロキシのバックエンドとする構成について確認したメモになります。

Swagger-PHPを利用して生成したSwaggerドキュメントをAPI Gatewayにインポートする場合、API Gateway固有の設定をSwaggerドキュメントに追加する必要があります。

ここでは、前の記事「Swagger-PHPについてLaravel 5.2で確認したメモ」で実装したAPIに、API GatewayのSwagger拡張を追加してSwaggerドキュメントを生成しなおしAPI Gatewayにインポートする流れで解説していきます。

システム構成

この記事の目的は、バックエンドのAPIをLaravelで実装した場合に、API Gatewayに統合するにはどんな感じか概要をつかむことです。

LaravelやRailsのような、フレームワークを利用してAPIのデプロイ先としては、AWSでは、マネジメントサービスを利用する場合、ElasticBeanstalkかContainer Serviceが選択肢となるかと思いますが、ここではより構成手順が少ないElastic Beanstalkを選択します。

それを踏まえ、簡単に図にすると以下のようになります。

api-gateway-and-laravel-api-on-elastic-beanstalk
“AWS API GatewayのバックエンドAPIをLaravel 5x Swagger-PHPで構成するには” の続きを読む

Laravel 5プロジェクトをElastic Beanstalkにデプロイ

Laravel 5で作成したWeb APIのswagger.jsonをAWS API Gatewayにインポートして動作を確認するにあたって、Laravel 5 APIの動作環境はElastic Beanstalkで簡単に用意してしまいたいと思い、Laravel 5 プロジェクトをAWS Elastic Beanstalkで動作させる手順について調べてみました。

LaravelをBeanstalkにデプロイする手順については、公式ドキュメント「Elastic Beanstalk への Laravel アプリケーションのデプロイ」にも説明があります。
こちらの内容は、Zipアーカイブを作成してアップロードする手順になっています。
この記事では「Symfony2 アプリケーションを Elastic Beanstalk にデプロイする」を参考に、Gitとebコマンドを使ってデプロイする手順を確認し、その内容をまとめています。

EB CLIのインストール

Elastic Beanstalk コマンドラインインターフェイス(EB CLI)のインストールを参考にインストールします。

pipコマンドが使える環境であれば以下のコマンドでインストールできます。

$ sudo pip install awsebcli

“Laravel 5プロジェクトをElastic Beanstalkにデプロイ” の続きを読む

AWS Lambda (Node.js) からRDS PostgresqlまたはRedShiftへ接続するには

Node.jsのLambda関数からデータベースにアクセスするには、Postgresqlの場合はnpm pgパッケージが利用できます。
npmパッケージはプロジェクトにローカルインストールするとnode_modulesディレクトリに保存されるので、それを一緒にZipするとLambda関数のJSで読み込めるようになります。

Node.jsのLambda関数をnpmでパッケージ管理して開発する手順について調べてみたことを手順化してまとめてみました。
前提条件として、Node.JSとAWS CLIが利用できる環境が必要です。
“AWS Lambda (Node.js) からRDS PostgresqlまたはRedShiftへ接続するには” の続きを読む

HashiCorp TerraformでAWSリソースを作成するには

Terraformを使う機会が会ったので、概要をまとめてみました。

TerraformはCloudFormationよりも定義ファイルが簡潔で、驚くほど習得しやすいツールです。
また、Chefやシェルによるプロビジョニングの仕組みも用意されているためミドルウェアまでささっと構築するようなユースケースにも使えそうです。

CloudFormationと比較した特徴については、「HashiCorpの新オーケストレーションツールTerraformを試してみた」の「CloudFormationの弱いところはカバー済み」が参考になります。

以下は、ほぼGETTING STARTEDを確認した内容になります

また、各リソースはデフォルトVPCに構築しています。

セットアップ

INSTALL TERRAFORMの手順に従ってインストール

バイナリパッケージがあるので、DOWNLOAD TERRAFORMよりダウンロードして適当なディレクトリに解凍して、パスを通すだけ

Mac OS Xの場合は、.bash_profileあたりに設定しておく
以下 /opt/terraform_0.6.6に解凍した場合

# .bash_profile
export PATH=$PATH:/opt/terraform_0.6.6

“HashiCorp TerraformでAWSリソースを作成するには” の続きを読む

Office 365 カスタムドメインを追加しRoute 53に各種レコードを設定する

Office 365にカスタムドメインを追加して、AWS Route 53にDNS設定を追加する手順をまとめてみました

Office 365へのドメインの追加については、公式ドキュメント「Office 365 にユーザーとドメインを追加する」に記載されています

メモは、ドメインを取得後、Route 53のHosted Zoneを作成し、ドメインの移管は済んでいるところからになります
お名前.comで取得したドメインの移管については、前回の記事「お名前.comで取得したドメインをRoute 53に移管」を参考にしてください

ドメイン周りの設定に若干苦労したので、そこを中心に説明しています
説明で追加するドメインは、適当に取得した”trial365.xyz”というドメインを使っています

  1. [Office 365 管理者センター]を開き、左のメニューより[ドメイン]を開く
  2. [ドメインの追加]をクリックすると[手順1 ドメインの確認]が始まる

  3. [ドメインと DNS について理解しておくべきこと]で[始めましょう]をクリック

  4. [どのドメインを使用しますか?] テキストボックスにドメインを入力して [次へ]をクリック

  5. [独自の trial365.xyz を表示するためにこの TXT レコードを追加します] のページでは、TXTレコードをDNSサーバーに追加することを要求されます

Office365_AddCustomDomain_ConfirmOwnDomainTXTRecord
“Office 365 カスタムドメインを追加しRoute 53に各種レコードを設定する” の続きを読む

お名前.comで取得したドメインをRoute 53に移管

AWSのDNSサービス Route 53を使ってみたので、お名前.comで取得したドメインをRoute 53に移管する手順をメモしてみました

Route 53にてHosted Zoneを作成
Route53_CreateHostedZone

Type = NSがネームサーバー名になります
Route53_CreatedHostedZone

お名前.comにログインし、[ドメイン設定]タブを開き、メニューから[ネームサーバーの変更]を開きます
[他のネームサーバーを使用]タブを開きます(以下の画面)。
OnamaeDotCom_ChangeNameServers

Type = NSのValueに表示されているネームサーバー名を入力します
OnamaeDotCom_SetNameServers

確認して[設定する]をクリック
OnamaeDotCom_ConfirmChangeNameServers

移管の設定が開始され、少し待つと完了します

詳細な説明: お名前.comからAmazon Route 53へドメインを移管する

Amazon Linuxにjdk 1.8をインストール

Java SE Development Kit 8 Downloads
からrpmをダウンロードして対象サーバーにアップロード
[bash gutter=”false”]
$ scp -i xxxxx.pem Downloads/jdk-8u40-linux-i586.rpm ec2-user@hostname:/home/ec2-user
[/bash]

対象サーバーにsshログインしてrpmをインストール
[bash gutter=”false”]
$ sudo rpm -ivh jdk-8u40-linux-i586.rpm
準備しています… ################################# [100%]
更新中 / インストール中…
1:jdk1.8.0_40-2000:1.8.0_40-fcs ################################# [100%]
Unpacking JAR files…
rt.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/rt.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
jsse.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/jsse.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
charsets.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/charsets.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
tools.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/lib/tools.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
localedata.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/ext/localedata.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
jfxrt.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/ext/jfxrt.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
plugin.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/plugin.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
javaws.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/javaws.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
deploy.jar…
/var/tmp/rpm-tmp.6br3Js: /usr/java/jdk1.8.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: そのようなファイルやディレクトリはありません
Error: unpack could not create JAR file:

/usr/java/jdk1.8.0_40/jre/lib/deploy.jar

Please refer to the Troubleshooting section of the Installation Instructions
on the download page.
[/bash]
エラー発生

対処方法: GCE上のCentOSインスタンスにOracleのjdkをインストールするまで。

[bash gutter=”false”]
$ sudo yum install ld-linux.so.2 libgcc_s.so.1
[/bash]

インストール再実行、一旦rpmパッケージを削除する必要あり
[bash gutter=”false”]
$ sudo rpm -e jdk1.8.0_40
$ sudo rpm -ivh jdk-8u40-linux-i586.rpm
準備しています… ################################# [100%]
更新中 / インストール中…
1:jdk1.8.0_40-2000:1.8.0_40-fcs ################################# [100%]
Unpacking JAR files…
rt.jar…
jsse.jar…
charsets.jar…
tools.jar…
localedata.jar…
jfxrt.jar…
plugin.jar…
javaws.jar…
deploy.jar…
[/bash]

インストールを確認
[bash gutter=”false”]
$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode, sharing)
[/bash]

Talendを使ってSQL ServerへCSVデータを追加するには

Microsoft SQL ServerにCSVのデータをTalendを使って追加する方法についてまとめました。

SQL Serverの管理はSQL Server Management Studioを利用しています。

SQL Server Mangement Studioの使い方はこちらが参考になりました。
【初級編③】Management Studio を使った SQL Server の基本的な操作方法(1/2) | SQLServer2008虎の巻

Talendの基本的な使い方については、以前の記事 オープンソースETLツールTalendでExcelのデータをデータベースにロードしてみた も参考にしてみてください。

では、さっそく

インポートするCSVを設定

読み込むCSVはEメールと名前のみのシンプルなものです。
[text]
E-Mail,Name
suzuki@example.com,鈴木一郎
satoh@example.com,佐藤太郎
[/text]
CSVのファイルの読み込みは[メタデータ] > [区切り記号付きフィアル] > [区切り記号付きファイルの作成]を選択します。
Talend-csv-1
[Name]を入力して[次へ]
Talend-csv-2
[ファイル]に入力CSVファイルを指定します。
Talend-csv-3
Mac上でTalendを動かしているので、UTF8のCSVファイルを入力として扱っています。Shift_JISだと文字化けします。
クライアントのJavaのデフォルトエンコーディングしだいだと思われるので、Windows上ならJavaのデフォルトエンコーディングがShift_JISなので、Shift_JISのCSVファイルで問題ないはず。未確認ですが。
しかし、[次へ]をクリックして、次のダイアログの[ファイル設定]の[エンコーディング]はWindows-31JやSfhit_JSが無いのでやっぱりCSVでShift_JISはNGかも。
ここでは、見出し付きのCSVなので[スキップする行]の[Header]にチェックをいれて”1″をセットします。
[プレビュー]で[列名として先頭業を指定]にチェックを入れて[プレビューのリフレッシュ]をクリックするとプレビューで先頭行が列名として設定されたことを確認できます。
Talend-csv-4
このダイアログは、内容を確認して[終了]します。
Talend-csv-6

出力先としてSQL Serverを設定

SQL Serverのデータベース”sqldb”に定義した”Users”テーブルにCSVから読み込んだ行を追加します。

[メタデータ] > [DB接続] > [DB接続の作成]を選択します。
SQLServer-users-table

Talend-SQLServer-1

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

接続情報を入力して[チェック]をクリックし接続に成功したら[終了]します。
Talend-SQLServer-3

追加された[Users]から[スキーマ情報の取得]を選択します。
Talend-SQLServer-4

ここはそのまま[次へ]
Talend-SQLServer-5

“dbo”を開き”Users”を選択して、[次へ]
Talend-SQLServer-6

内容をか確認して[終了]します。
Talend-SQLServer-7

補足: RDSのSQL Serverで日本語を使えるようにする

今回ためした出力先のSQL ServerはAWS RDSのSQL Serverを利用しています。
RDSのSQL Serverはデフォルトでは英語設定になっているので日本語が扱えるように設定する必要があります。
照合順を日本語に設定します。

SQL Server Management Studioでデータベースのメニューから[プロパティ]を選択します。
SQLServer-properties
[オプション]を選択して[照合順序]で”Japanese_XJIS_100_BIN”を選択します。
SQLServer-set-japanese
参考: RDSにSQL Serverのセットアップ
補足の補足: 他のプロセスが対象のデータベース、ここでは”sqldb”を利用していると5030エラーが発生します。その際はプロセスをKillしてあげると設定を反映することが出来ます。参考: 照合順序の変更について

マッピングの作成

[メタデータ] > [DB接続] > [Users 0.1] > [テーブル] > [Users]をドロップして、コンポーネントダイアログでは[tMSSqlOutput]を選択します。
Talend-mapping-1

[メタデータ] > [区切り記号付きファイル] > [UserList 0.1] > [metadata]をドロップして、コンポーネントダイアログから[tFileInputDelimited]を選択します。
Talend-mapping-2

[パレット]から[tMap]をドロップします。
Talend-mapping-3

[CSV]から[tMap]、[tMap]から[SQLServer]へと入出力をつなげます。
Talend-mapping-4
[tMap]から[SQLServer]への出力をつなげた後に、スキーマの取得しますか?と聞かれるので[はい]を選択します。

[tMap]をクリックしてマッピングを以下のように定義します。
Talend-mapping-5

ジョブを実行
ジョブが作成できたので、実行してみます。
Talend-run-job

CSVから正しくデータをインポートされたかManagement Studioで確認。
SQLServer-select

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*