Let’s encryptでUbuntu 16.04のApacheをhttps化するには

Let’s encryptとは

無料で使えるSSL認証局で、Internet Security Research Group (ISRG)という団体が提供しています。

ISRGには、Current Sponsors – Let’s Encrypt – Free SSL/TLS Certificatesを見ると、しっかりスポンサーがついているので安心して使えそうです。
SAKURA Internetなど日本の企業もスポンサーも居ます。

証明書の発行とセットアップは、公式に提供されている Certbot コマンドで行います。

証明書の期限は90日で、エージェントが自動更新を行ってくれます。
ということは、AWSのELBのように、Let’s encrypt非対応のミドルウェアを利用している場合は、更新の仕組みを自分で用意する必要があります。

また、さくらのレンタルサーバなどLet’s encryptに対応していてるホスティングサービスの場合、サービスのコントロールパネルで設定が可能でセットアップが簡単にできたりするそうです。

さくらインターネットの「さくらのレンタルサーバ」、コントロールパネル上の簡単操作で無料SSL証明書「Let’s Encrypt」を設定可能に~「Let’s Encrypt」のシルバースポンサーとして参画し、常時SSL化推進に貢献~
提供は、10/17からのようです。

“Let’s encryptでUbuntu 16.04のApacheをhttps化するには” の続きを読む

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にデプロイ” の続きを読む

Azure WebアプリにNode.js expressアプリをGitからデプロイ

Azureにデプロイするアプリの開発は.Net以外でもVisual StudioのAzure統合ぶりがとても便利そうですが、Node.jsアプリの開発となると、私も含め普通はMacで開発している人がほとんどかと思います。
Build 2016で発表があったBotFrameworkを試していて、BotをAzure WebAppにデプロイするために、Azure向けのNode.jsアプリをMac OS X上で開発・デプロイする手順について調べてみたことをまとめてみます。

割りと驚いたのは、いつのまにかHerokuの様にgitと連携したデプロイができるようになっているんですね。非常にこれは便利です。
今回は、Bitbucketにpushしたらデプロイする手順を試しています。

Azureは、2,3年前にWebSitesを試して以来ですがとても進化してますね。
以前の記事は「Windows Azure WebサイトでFuelPHPアプリを動かす」の時は旧ポータルでした。

Node.jsの開発については、改めてまとめずとも公式ドキュメントにもちゃんと日本語で説明があります。
Azure App Service での Node.js Web アプリの作成

Hello Worldまでは、この説明のみで必要十分なので、npmでパッケージを管理する例としてexpressを利用する例についてもまとめてみました。
“Azure WebアプリにNode.js expressアプリをGitからデプロイ” の続きを読む

Zabbix 3.0 サーバーをUbuntu 14.04にインストール

前回の記事「Zabbix 2.4 サーバー/エージェントをUbuntu 14.04にインストール」の後、Zabbix 3.0がリリースされたので、改めてUbuntu 14.04にインストールする手順を確認してみました。

3.0で新たに追加された機能や主な変更点は、Zabbix 3.0 新機能にまとまっています。
スクリーンショットを見ただけでも、今風なデザインに刷新されており期待が持てそうです。

では、早速インストールの手順 3 Installation from packages From distribution packagesDebian / Ubuntu を追ってみます。

Zabbixサーバーのインストール

Zabbix 3.0は、インストールパッケージをRHEL、CentOS 7系とDebian 7,8、Ubuntu 14.04向けに用意されています。

今回は、Ubuntu 14.04向け、リポジトリにMySQLを利用するバージョンのパッケージをインストールします。
“Zabbix 3.0 サーバーをUbuntu 14.04にインストール” の続きを読む

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リソースを作成するには” の続きを読む

次の行の開始日から終了日を計算するSQL

時価で変動する商品の値段のように、期間で管理されるデータ管理する場合のテーブルの持ち方とSQLについての考察です。

例えば、以下のように通貨変換レートが適用されるようなケースがあるとします。

sql-currency-enable-period

各期間には適用開始日と終了日がありますが、現在進行系の期間は終了日が無いですし、次の期間の開始日から前の期間の終了日は計算できるので、テーブルには開始日のみ管理すれば良さそうです。

開始日のみを管理するメリットとしては、余分な値「終了日」を保持しなくてよいのでカラムが減らせることと、終了日をプログラム(プロシージャ)やトリガーなどでセットしないのでバグりにくいことなどがあります。

この場合に、次の期間のレコードから計算した終了日を含むレコードを取得するSQLを作成してみます。

サンプルのテーブル

CREATE TABLE `currency_rates` (
  `from_currency_code` char(3) NOT NULL,
  `to_currency_code` char(3) NOT NULL,
  `enabled_at` date NOT NULL,
  `rate` decimal(12,2) NOT NULL,
  PRIMARY KEY (`from_currency_code`,`to_currency_code`,`enabled_at`)
);

“次の行の開始日から終了日を計算するSQL” の続きを読む

Docker入門 – Docker Toolboxで公開されているイメージの動作を確認する

Mac OS XにDocker開発環境を構築し、Dockerイメージの取得とコンテナの起動・停止、イメージの作成方法およびレジストリへのアップなどdockerを利用し始めるにあたって、これだけは抑えておくべきという基本的な内容についてまとめてみました。

Dockerは「Build, Ship, and Run Any App, Anywhere」と謳っているように、Dockerの仕組みでビルドされたアプリケーションは、Docker対応のプラットフォームであればどこでも簡単にデプロイできるようになります。

PHPのWebアプリの場合を例にすると、gitによるソース・サブモジュールの管理、Composeによるパッケージ管理、さらにフロントまわりのパッケージはnpmで管理していたりとビルド、デプロイのプロセスはかなり複雑になっています。そこに、Dockerを利用すると、Java EEの世界でアプリをWarファイルに固めてアプリケーション・サーバーにデプロイするような感覚で、開発環境でビルドしたものをテストし本番へデプロイすることが可能になります。

さらに、デプロイのプロセスが簡単になると、PaaSを利用する際に、PaaSごとの違いをDockerが吸収してくれるので、新しいPaaSを試す時などは、固有の仕組みを覚えるコストが小さく済みそうです。

Dockerそのものの概要については、公式には「What is Docker」に説明があります。
またアーキテクチャと各種用語については「Understand the architecture」にまとまっています。

周辺ツールも増えてきて、なかなか全体像を説明するのも大変なので、ここではDockerそのものの説明は飛ばし、dockerコマンドを打つとDockerイメージを作ったり、自分で作ったイメージや公開されているイメージをコンテナとして起動して簡単にアプリが起動できるものだくらいにまずは抑えておいて、DockerHubに公開されている公式イメージを利用したDockerの使い方についてまとめました。
“Docker入門 – Docker Toolboxで公開されているイメージの動作を確認する” の続きを読む