Azure Web AppにデプロイしたPHPからHTTPSサイトにアクセスする

cUrlGuzzleで外部のAPIを利用するアプリケーションをAzure WebAppで動かした場合、証明書が見つからずAPIにHTTPSで接続できない問題が発生します。

HTTPSアクセスする際のSSL証明書の場所は、php.iniのcurl.cainfoに設定しますが、Azure Web Appではd:\home\site\ini/settings.iniファイルで設定できます。

公式ドキュメントは、Azure App Service Web Apps での PHP の構成方法
「PHP_INI_SYSTEM 構成設定の変更」を参照ください。

settings.iniの場所をアプリ設定で指定

[アプリケーション設定] > [アプリの設定]に、キー PHP_INI_SCAN_DIR、値 d:\home\site\ini を追加します。

guzzle-on-azure-webapp
“Azure Web AppにデプロイしたPHPから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にデプロイ” の続きを読む

Laravel Angular Material Starter API認証周りの構成についてのメモ

Laravel Augnlar Material Starterは、フロントエンドにAngular Material、バックエンドAPIにLaravelを利用したシングルページアプリケーションを開発するためのスターターパッケージです。

Laravelは、Laravel ElixirというJavascriptやCSSなどのアセットをビルドするためのgulpタスクがフレームワークに予め含まれていますが、Laravel Angular Material Starterは、AngularJSとAngularJSベースのUIコンポーネントフレームワーク Angular MaterialをビルドするためにLaravel Elixirが予め構成されたLaravelプロジェクトと言った構成になっています。
また、フロントエンドのAngularJSから呼び出されるLaravel側のAPIに対する認証はJWTを利用します。

この記事では、主にフロントエンドのAPIの呼び出しと、バックエンドのJWT生成、検証に利用されるパッケージの構成について調べたことをまとめていきます。

含まれるパッケージ

Laravel Angular Material Starterには、2016.7時点でLaravel 5.2とAngularJS 1.5をベースに以下のパッケージが含まれています。

公式ドキュメントでは「Libraries involved」に載っています。

Composerパッケージ

Laravel側のパッケージは、バックエンドAPIおよび認証をサポートする以下のようなパッケージを含んでいます。

  • dingo/api: Laravel、LumenでRestful APIを管理するミドルウェアを提供するパッケージ
  • tymon/jwt-auth: Laravel、Lumen用のJWTの生成、認証の仕組みを提供するパッケージ
  • barryvdh/laravel-cors: Laravel、Lumen用のCross-Origin Resource Sharingを提供するパッケージ

“Laravel Angular Material Starter API認証周りの構成についてのメモ” の続きを読む

Swagger-PHPについてLaravel 5.2で確認したメモ

SwaggerのPHP実装であるSwagger-PHPの使い方についてLaravelプロジェクトで確認し、Swaggerとはどんなものか調査したメモになります。

Swaggerの全体像については、「RESTful APIの記述標準化を担うSwaggerとは? | NTT Communications Developer Portal」が参考になりました。

Swaggerを利用したアプリケーション開発は、まずSwaggerドキュメントを作成して、サーバーのスタブとクライアントライブラリを生成し、APIロジックとクライアントUIなどを実装していくような流れになるといったところのようです。
Laravelはありませんが、コード生成ツール swagger-codegen には、Laravelの軽量版であるLumen用のサーバースタブは生成可能です。

この記事では、Laravel 5.2プロジェクトでAPIを作成して、Swagger-PHPのアノテーションからSwaggerドキュメントを生成してSwagger-UIでテストするまでを解説します。
つまり、APIの開発とSwaggerドキュメントの開発は平行して行っていく手順を想定しています。

前提条件

この記事内容を試すにあたって必要な準備は、以下のとおりです。

  • Laravelの動作するPHPバージョンがインストール済み
  • Composerがグローバルにインストール済み
  • Laravel 5.2プロジェクトを生成済み

Laravelの実行環境をすぐに作るにはVagrant Homesteadが便利です。
Laravel homesteadを利用したLaravel 5 ローカル開発環境の構築」も参考にしてください。

Laravel プロジェクトに Swagger-PHP をインストール

Swagger-PHPを、ComposerでLaravelプロジェクトに追加します。

$ composer require zircote/swagger-php

“Swagger-PHPについてLaravel 5.2で確認したメモ” の続きを読む

HerokuのPHPアプリからRedis To Goを利用するには

HerokuのPHPアプリケーションから、Redis To Goを利用する手順について確認したメモになります。

前提条件

Redis To GoにはFreeプランがありますが、Heroku Add-onsを利用するには、アカウントのBillingにクレジットカードを登録する必要があります。

アドオンの追加

herokuコマンドで、RedisToGoを追加できます。

$ heroku addons:add redistogo

PhpRedisのインストール

PHPのRedis拡張 phpredis/phpredis をComposerでインストールします。

$ composer require ext-redis

“HerokuのPHPアプリからRedis To Goを利用するには” の続きを読む

Azure ADに登録されているAPI用のアクセストークンをJWTで取得するには

Office 365 Rest APIに対してJWT Bearer Tokenフローで利用するアプリケーションを作るにあたって、まずは、ADAL(Active Directory Authentication Library)を利用したチュートリアルAuthenticating to Azure AD in daemon apps with certificatesを試してみました。

このチュートリアルは、Azure ADの認証シナリオのうち、「クライアント資格情報を使用したサービス間の呼び出し」を実装しています。
このシナリオでは、Azure ADは、OAuthの以下の仕様をサポートします。

ADALを利用すると、設定と秘密鍵を指定するだけで、JWT(Json Web Token)を使ってAPIのアクセストークンを取得するリクエストの実装はライブラリにおまかせできますが、ライブラリが内部でやっていることを図にしてみると以下のようになります。
authenticating-to-azure-ad-with-certificates
(クライアント資格情報を使用したサービス間の呼び出しの図と同じです)
“Azure ADに登録されているAPI用のアクセストークンをJWTで取得するには” の続きを読む

Google Calendar API Client Javaを使ったアプリでサービスアカウントで認証するには

Google Calendar APIの認証はOAuth 2.0を利用しており、Webアプリケーション、クライアント・アプリケーションなどのシナリオをサポートしています。
(参照: Using OAuth 2.0 to Access Google APIs)

Google Appsを利用していて、企業向けのサービスや社内システムとGoogle Calendarを連携したい場合、システム単位でユーザーにアクセス許可を求めずに、ドメイン単位でGoogle Appsへのアクセスを設定したいところです。
このようなサーバー間およびバッチ(デーモン)アプリケーションのシナリオでは、JWT(Json Web Token)でサーバー用のアクセストークンを取得する方法が利用できます(2 Legged OAuthとも言う)。

サーバー間用のアクセストークンは、Google Appsのドメイン全体の委任を有効にしたサービス アカウントを作成し、サービス アカウントの秘密鍵を使って生成した署名を含むJWTをhttps://www.googleapis.com/oauth2/v4/tokenにPOSTすることで取得できます。
(参照: Using OAuth 2.0 for Server to Server Applications)

この記事は、サービス アカウントでGoogle Calendar APIへアクセスするシナリオでのJava API クライアント ライブラリの使い方について説明していきます。
簡単に流れは説明しましたが、クライアント ライブラリを利用するので、JWTの作成およびアクセストークンの取得についてはライブラリにおまかせです。
(参照: Calendar API Client Library for Java)

説明用のコードは、以下のJava API クライアントのサンプルのcalendar-cmdline-sampleを使います。
google/google-api-java-client-samples
このサンプルは、ユーザーに認可を求めるクライアント・アプリケーションです。
まずは元の動作を確認し、その後、サービスアカウント認証へ実装を変更していく流れで説明していきます。
“Google Calendar API Client Javaを使ったアプリでサービスアカウントで認証するには” の続きを読む

Office 365 REST APIを利用したRuby on Railsアプリの作成

Office 365は、Outlook(Exchagne)、OneDriveおよびVideoにREST APIが用意されています。
この記事では、Office 365 REST APIを利用してOutlookのリソースにアクセスする手順について確認した内容をまとめてみました。

API関連の情報ソース

APIを利用を始めるにあたって、以下のようなドキュメントを参考にしました。

REST API全体のリファレンスについては、Office 365 API reference、利用可能なOutlookのリソースについては、Resource reference for the Mail, Calendar, Contacts, and Task REST APIsで確認できます。

日本語版は、Office 365 API リファレンスがあります。

その他の参考情報としては

以下の公式ブログなどが参考になります。

“Office 365 REST APIを利用したRuby on Railsアプリの作成” の続きを読む