目次


LAMP アプリケーションを Bluemix にマイグレーションする

mysql サービスと Object Storage サービスを利用してサンプル Drupal アプリケーションをクラウドにマイグレーションする

Comments

LAMP は、動的 Web サイトや Web アプリケーションを実行するためによく使われているオープンソース・スタックです。当初、LAMP という頭字語が表していたのは Linux オペレーティング・システムApache HTTP ServerMySQL データベース、PHP プログラミング言語でしたが、時が経つにつれ、LAMP は PHP アプリケーションのためのより汎用的なオープンソース・ソフトウェア・スタックを表すようになりました。例えば、Apache Web サーバーは nginx で置き換えることができます。また、MySQL データベース・サーバーの代わりに PostgreSQL などを使用することもできます。

LAMP アプリケーションには、Bluemix が理想的なプラットフォームです。LAMP アプリケーションを Bluemix にマイグレーションする上では、以下の主な課題に対処する必要があります。

  • PHP ランタイムの要件 — PHP ビルドパックがアプリケーションの要件 (PHP のバージョン、PHP 拡張モジュールの有効化、その他の関連する設定) を満たす必要があります。
  • データベースのマイグレーション —アプリケーションのデータベース・サーバーの要件を満たしてデータのロードを実装するだけでなく、アプリケーションからデータベースにアクセスする方法をセットアップする必要があります。
  • 非永続型ファイル・システム —Bluemix ランタイムのファイル・システムは永続化されません (アプリケーションの再デプロイメントが行われるとリフレッシュされます)。したがって、そのような動作がマイグレーション対象のアプリケーションに影響するかどうかを考慮し、必要に応じてアプリケーションに対して永続ストレージを実装しなければなりません。

このチュートリアルでは、経験を積んだ PHP 開発者がこれらの課題に対処して、Bluemix のmysql サービスと Object Storage サービスの助けを借りて LAMP アプリケーションを Bluemix にマイグレーションする方法を紹介します。ここでは Drupal アプリケーションを例に、Bluemix 上に単純なブログ・サイトを構築します。Drupal (昔ながらの LAMP アプリケーション) は、よく使われているオープンソースのコンテンツ管理システムです。Drupal は PHP で作成されていて、個人のブログ・サイトから、企業のサイトや、政治関連のサイト、そして政府のサイトに至るまで、非常に多数の Web サイトやアプリケーションで採用されています。皆さんが独自の LAMP アプリケーションを Bluemix にマイグレーションする段階になったら、このチュートリアルの演習を参考にすることができます。

もし皆さんが、LAMP アプリケーションに取り組んでいる多くの開発者の 1 人であり、Bluemix 上でアプリケーションを試してみたいとしたら、このチュートリアルの例を参考にすれば、Bluemix へのアプリケーションのマイグレーションは難しくありません。

アプリケーションを作成するために必要となるもの

必須:

  • A Bluemix アカウントと DevOps Services アカウント (両方とも IBM ID に関連付けられていること)
  • PHP プログラミング言語の知識

オプション:

アプリを実行するコードを入手する

ステップ 1. Bluemix アプリケーションを作成し、サービスを追加し、環境変数を収集する

  1. Bluemix アカウントにログインします。
  2. カタログの「Runtimes (ランタイム)」セクションで、「PHP」をクリックして選択します。
  3. 「Start with a runtime (ランタイムから開始)」ダイアログ・ボックスの「Name (名前)」フィールドに、作成するアプリケーションの名前を指定します (私のアプリケーションは、「bluedrupal」という名前に設定しています)。「CREATE (作成)」をクリックして、アプリケーションのプロビジョニングが完了するまで待ちます。
  4. Bluemix のダッシュボードにアクセスし、新しく作成されたアプリケーションをクリックしてから、「ADD A SERVICE OR API (サービスまたは API の追加)」をクリックします。
  5. Bluemix カタログの一番下までスクロールダウンし、「Bluemix Labs Catalog」リンクをクリックします。
  6. Bluemix Labs Catalog の「Data & Analytics (データおよび分析)」セクションで「mysql」試験サービスを選択し、「CREATE (作成)」をクリックします。アプリケーションを再ステージングするよう促されたら、再ステージングします。
  7. ダッシュボードに戻ってアプリケーションをクリックし、再び「ADD A SERVICE OR API (サービスまたは API の追加)」をクリックします。
  8. 「Data & Analytics (データおよび分析)」セクションで、「Object Storage」サービス (名前に v2 が入っていないバージョン) をクリックします。
  9. 「Add Service (サービスの追加)」ダイアログ・ボックスで、「CREATE (作成)」をクリックします。アプリケーションを再ステージングするよう促されたら、再ステージングします。
  10. ダッシュボードでアプリケーションをクリックし、アプリケーションの概要ページを開くと、追加した 2 つのサービスが表示されます。アプリケーションの概要を示す画面のスクリーンショット
    アプリケーションの概要を示す画面のスクリーンショット
  11. 概要ページで、「Object Storage」サービス・タイルに示された「Show Credentials (資格情報の表示)」リンクをクリックして、このサービスに関係する環境変数 (auth_uriusernamepassword など) を表示します。後で使用できるように、これらの変数をテキスト・ファイルにコピーします。

ステップ 2. コードの変更内容を確認する

このステップでは、vanilla Drupal 7.36 ソース・コード (Drupal サイトから ZIP ファイルを入手できます) を、Bluemix に対応するように更新した後の Drupal ソース・コードと比較します。DevOps Services の bluedrupal プロジェクトに含まれている更新後の Drupal ソース・コードを表示するには、このチュートリアルのページをスクロールアップして「コードを入手する」ボタンをクリックしてください。Bluemix 対応にした Drupal コードは、プロジェクトの drupal-7.36 フォルダーにあります。

PHP ランタイムの要件

Drupal 7 で推奨されている PHP 環境は、バージョン 5.4 以降です。機能を完全に揃えるためには、さらに mbstringgdpdo などの拡張モジュールも必要です (詳しくは、Drupal のシステム要件を参照してください)。

現在、公式の Bluemix PHP ビルドパックでは、Drupal 7 の要件をすべてサポートしています。PHP 環境のバージョンに関する要件を満たすために、私はアプリケーション・コードの drupal-7.36 ディレクトリーに composer.json という名前の構成ファイルを作成しました。

{
    "require": {
        "php": ">=5.4.0"
    }
}

drupal-7.36/.bp-config/options.json ファイルが、PHP ビルドパックを構成します。このファイルに私が加えた変更は、関係する拡張モジュールを有効にするための変更だけです。

{
    "PHP_EXTENSIONS": ["bz2", "pdo", "zlib", "curl", "mcrypt", "mbstring", "mysqli",
                             "gd", "zip", "pdo_mysql", "pgsql", "pdo_pgsql"]
}

データベースのマイグレーション

Drupal 7 には、MySQL 5 またはそれ以降のバージョン、あるいは PostgreSQL 8.3 またはそれ以降のバージョンが必要です。Bluemix Labs Catalog の Bluemix mysql サービスは、この要件を満たします (メイン・カタログの ClearDB MySQL Database サービスと ElephantSQL サービスも、同様にこの要件を満たします)。データベースは Drupal のインストール時に初期化されるため、初期化を行うための SQL スクリプトを実行する必要はありません。ただし、将来皆さんがマイグレーションする LAMP アプリケーションでは、データベースのマイグレーション・タスク (テーブル・スキーマの作成、データのロードなど) を手作業で行う必要があるかもしれません。

PHP コードでデータベースにアクセスするには、接続プロパティー (urluserpassworddbname など) をハードコーディングするのが簡単な方法ですが、柔軟性があるのは、接続プロパティーをハードコーディングするのではなく VCAP_SERVICES環境変数から読み取る方法です。

Drupal 7 をインストールする前に、Drupal 7 に付属のサンプル構成ファイル (sites/default/default.settings.php) を settings.php という名前の新しいファイルとしてコピーする必要があります。このファイルには、データベース接続情報や、その他の構成の詳細が含まれています。以下のコード・スニペットは、Bluemix 対応のソース・コードに含まれる drupal-7.36/sites/default/settings.php から抜粋したものです。このファイルが mysql サービス (あるいは ClearDB MySQL Database サービスか、ElephantSQL サービス) の VCAP_SERVICES から接続プロパティーを読み取るので、インストール時に手作業でデータベース接続情報を入力する必要はありません。

//Check VCAP Services
$services = getenv("VCAP_SERVICES");
$services_json = json_decode($services, true);
    
//mysql service from Bluemix Lab Catalog?
if (isset($services_json["mysql-5.5"])) {
    $mysql_config = $services_json["mysql-5.5"][0]["credentials"];
    $databases = array(
        'default' => array(
            'default' => array(
                'database' => $mysql_config["name"],
                'username' => $mysql_config["username"],
                'password' => $mysql_config["password"],
                'host' => $mysql_config["hostname"],
                'port' => $mysql_config["port"],
                'driver' => 'mysql',
                'prefix' => 'main_',
            ) ,
        ) ,
    );
}   
//ClearDB MySQL service?
else if (isset($services_json["cleardb"])) {
    $mysql_config = $services_json["cleardb"][0]["credentials"];
    $databases = array(
        'default' => array(
            'default' => array(
                'database' => $mysql_config["name"],
                'username' => $mysql_config["username"],
                'password' => $mysql_config["password"],
                'host' => $mysql_config["hostname"],
                'port' => $mysql_config["port"],
                'driver' => 'mysql',
                'prefix' => 'main_',
            ) ,
        ) ,
    );
}   
//ElephantSQL (PostgresSQL) service?
else if (isset($services_json["elephantsql"])) {
    $elephanturi = $services_json["elephantsql"][0]["credentials"]["uri"];
    if (preg_match("/^postgres:\/\/([^:]+):([^:@]+)@([^:]+):([0-9]+)\/([^:]+)$/",
                             $elephanturi, $matches))     {   
        $databases = array(
            'default' => array(
                'default' => array(
                    'database' => $matches[5],
                    'username' => $matches[1],
                    'password' => $matches[2],
                    'host' => $matches[3],
                    'port' => $matches[4],
                    'driver' => 'pgsql',
                    'prefix' => 'main_',
                ) ,
            ) ,
        );
    } else {
        $databases = array();
    }
} else {
    $databases = array();
}

ファイル・システムの存続期間

Bluemix ランタイムのファイル・システムは長期間存続しません。アプリケーションによってファイル・システム上に生成されたファイルは、そのアプリケーションの再デプロイメントが行われるとクリアされます。一部のアプリケーションでは、データがデータベース・サーバーに保存されて永続化されるため、この動作は許容できます。その場合、ファイル・システム上に生成されるのは特定の一時ファイル (例えば、ログなど) だけで、それらのファイルが消えても重大な影響はありません。けれども、それ以外のアプリケーションでは、この課題に対処しなければなりません。Drupal も、そのうちの1 つです。

Drupal 7 はモジュール方式で設計されているため、コミュニティーから提供されるモジュールを、任意に選んでインストールすることができます。Drupal をインストールしてからモジュールをインストールすると、モジュールはローカル・ファイル・システムに保存されるため、アプリケーションの再デプロイメント後にそれらのモジュールを再インストールしなければなりません。再インストールの必要をなくすための 1 つの方法は、モジュールを sites/all/modules フォルダー内に保管することです。bluedrupal ソース・コードの drupal-7.36/sites/all/modules を見ると、いくつかのモジュールが保管されているのがわかります。

作成する単純なブログ・サイトにアップロードされた画像ファイルやその他のファイルも、再デプロイメント後に消失する可能性があります。これらのファイルは、デフォルトでローカル・ファイル・システムに保存されるためです。アプリケーションではこの問題に対処するために、Bluemix 上の Object Storage サービスを利用してファイルを永続化しています。

私が見つけた OpenStack Object Storage という名前の Drupal モジュールは、Drupal ファイルをローカル・ファイル・システムではなくオブジェクト・ストアに保存するのに役立ちます。このモジュールに元から用意されている認証方式は Bluemix の Object Storage サービスには対応していませんが、このサービスに対応して動作するようにモジュールを変更することができました。変更後のバージョンは、bluedrupal ソース・コードの drupal-7.36/sites/all/modules/openstack_storage にあります。

drupal-7.36/sites/all/modules/openstack_storage/vendor/rackspace/php-opencloud/lib/OpenCloud/OpenStack.php から抜粋した以下のスニペットに、Bluemix の Object Storage サービスに対して PHP で認証を行う方法が示されています。

/**

 * Authenticate the tenant using the supplied credentials
 *
 * @return void
 * @throws AuthenticationError
 */
public function authenticate()
{
$identity = IdentityService::factory($this);
        
        $authField= 'Basic '.base64_encode($this->secret['username'].':'.
                                             $this->secret['password']);  
        $authHeader = array(
    'Authorization' => $authField,
);
$response = $identity->generateToken($this->getCredentials(), $authHeader);
        
        $sUrl=$response->getHeader('X-Storage-Url');
        $aToken=$response->getHeader('X-Auth-Token');
        $uname=$this->secret['username'];
        $dRegion="DummyRegion";
        $dType="DummyCloudFile";
        
        //Use a dummy body to be compatible with OpenCloud library
        $body=json_decode(
        '{
        "access": {
"token": {
    "id": "'.$aToken.'",
    "tenant": {
        "description": null,
        "enabled": true,
        "id": "'.$uname.'",
        "name": "'.$uname.'"
    }
},
"serviceCatalog": [
    {
        "endpoints": [
            {
                "adminURL": "'.$sUrl.'",
                "region": "'.$dRegion.'",
                "internalURL": "'.$sUrl.'",
                "id": "'.$uname.'",
                "publicURL": "'.$sUrl.'"
            }
        ],
        "endpoints_links": [],
        "type": "object-store",
        "name": "'.$dType.'"
    }
],
"user": {
    "username": "'.$uname.'",
    "roles_links": [],
    "id": "'.$uname.'",
    "roles": [
        {
            "name": "Member"
        },
        {
            "name": "anotherrole"
        }
    ],
    "name": "'.$uname.'"
}
}
}');
        

//$body = Formatter::decode($response);

$this->setCatalog($body->access->serviceCatalog);
$this->setTokenObject($identity->resource('Token', $body->access->token));
$this->setUser($identity->resource('User', $body->access->user));

if (isset($body->access->token->tenant)) {
    $this->setTenantObject($identity->resource('Tenant', $body->access->token->tenant));
}

// Set X-Auth-Token HTTP request header
$this->updateTokenHeader();
}

ファイルをオブジェクト・ストアに保存するように Drupal が構成される前に、drupal-7.36/sites/all/modules/openstack_storage/initObjectStore.php から抜粋した以下のスニペットが Bluemix の Object Storage サービスを初期化してコンテナーを作成します (コンテナーは、フォルダーのことだと考えてください)。

<;?php
require_once './vendor/autoload.php';
    
use OpenCloud\OpenStack;
use OpenCloud\ObjectStore\Resource\DataObject;
    
$services = getenv("VCAP_SERVICES");
$services_json = json_decode($services,true);
$obj_config = $services_json["objectstorage"][0]["credentials"];
    
echo "Try to authenticate Bluemix Object Store... <;/br>";
$endpoint = $obj_config["auth_uri"];
$credentials = array(
    'username' => $obj_config["username"],
    'password' => $obj_config["password"]
);
    
$openstack = new OpenStack($endpoint, $credentials);
$openstack->Authenticate();
echo "Bluemix Object Store authenticated <;/br>";
    
$objectStoreService = $openstack->objectStoreService('DummyCloudFile', 'DummyRegion', 'tenant');
echo "Try to create Container drupalObjectStore... <;/br>";
$objectStoreService->createContainer('drupalObjectStore');
$containers=$objectStoreService->listContainers();
$con=FALSE;
foreach ($containers as $container) {
    if($container->getName()=='drupalObjectStore')
    {
        $con=$container;
        break;
    }
}
    
if($con)
{
    $container->setReadPublic();
    echo "Container drupalObjectStore created.<;/br>";
}
else
{
    echo "Fail to create Container drupalObjectStore <;/br>";
}
    
?>

ステップ 3. アプリケーションを Bluemix にデプロイする

  1. このページをスクロールアップして「コードを入手する」ボタンをクリックし、DevOps Services の bluedrupal プロジェクトの概要ページにアクセスします。
  2. 「Fork Project (プロジェクトのフォーク)」をクリックします (ここで IBM ID を入力するよう促されたら、IBM ID を入力して Bluemix DevOps Services にログインします)。要求に従って、作成するプロジェクトの名前を入力します。「Make this a Bluemix Project (Bluemix プロジェクトにする)」チェック・ボックスを選択し、Bluemix の「Region (地域)」、「Organization (組織)」、「Space (スペース)」に正しい値が設定されていることを確認してから、「CREATE (作成)」をクリックしてリポジトリーをフォークします。
  3. 新しく作成されたプロジェクトで、「EDIT CODE (コードの編集)」をクリックします。ページの一番上で、「Tools (ツール)」メニュー右側のプロジェクト名が示されたドロップダウンをクリックし、鉛筆アイコンをクリックして、Bluemix にデプロイするための「Edit Launch Configuration (起動構成の編集)」ダイアログ・ボックスを開きます。「Edit Launch Configuration (起動構成の編集)」ダイアログ・ボックスを開くためにクリックするアイコンのスクリーンショット
    「Edit Launch Configuration (起動構成の編集)」ダイアログ・ボックスを開くためにクリックするアイコンのスクリーンショット
  4. 「Application Name (アプリケーション名)」フィールドと、「Host (ホスト)」フィールドを、ステップ 1 で作成した Bluemix アプリケーションの名前になるように更新します。他のフィールド (「Target (ターゲット)」、「Organization (組織)」、「Space (スペース)」、「Domain (ドメイン)」) が正しく設定されていることを確認してから、「Save (保存)」をクリックします。 「Edit Launch Configuration (起動構成の編集)」ダイアログ・ボックスのスクリーンショット
    「Edit Launch Configuration (起動構成の編集)」ダイアログ・ボックスのスクリーンショット
  5. 右矢印アイコンをクリックして、アプリケーションをデプロイします。1、2 分待ってから、デプロイの状況を確認します。デプロイ・ボタンのスクリーンショット
    デプロイ・ボタンのスクリーンショット

あるいは、ローカルのコマンドラインから cf コマンドを使用してプロジェクトをデプロイする方法を選ぶ場合は、以下の手順に従ってください。

  1. bluedrupal ソース・コードをローカルに複製します。
  2. manifest.yml ファイルを更新して、<your_app_name> を Bluemix アプリケーションの名前に変更します。要求するメモリーのサイズを変更することもできます (デフォルト・メモリー・サイズは、128 MB に設定されています)。
    ---
    applications:
    - name: <your_app_name>
    memory: 128M
    instances: 1
    host: <your_app_name>
    path: ./drupal-7.36
  3. cf push コマンドを実行してアプリケーションをデプロイします。

ステップ 4. Drupal をインストールして構成する

  1. アプリケーションのインストール先 URL (http://<アプリケーション名>.mybluemix.net/install.php) にブラウザーでアクセスします。
  2. インストールのプロファイル・ページで「Standard (標準)」を選択してから、「Save and continue (保存して続行)」をクリックします。
  3. 言語として「English (英語)」を選択してから、「Save and continue (保存して続行)」をクリックします。モジュールがインストールされるまで、2、3 分かかります。
  4. サイト構成ページで、関連する情報 (管理者アカウントとパスワードを含む) を入力してから、「Save and continue (保存して続行)」をクリックして続行し、インストールを完了します。
  5. アプリケーションの URL (http://<アプリケーション名>.mybluemix.net) にブラウザーでアクセスします。必要に応じて、上記で設定した管理者のユーザー名とパスワードを使用してログインします。
  6. 「Add content (コンテンツの追加)」 > 「Article (記事)」の順に選択します。「Title (タイトル)」フィールドにタイトルを入力し、コンテンツと画像を追加して、新しいブログ・エントリーを作成します。Drupal アプリケーションは正常に機能するはずです。ただし、アップロードした画像ファイルは、ローカル・ファイル・システムに保管されるので、再デプロイメント後にクリアされます。

Bluemix の Object Storage サービスを初期化する

  1. Bluemix の Object Storage サービスを初期化するために、ブラウザーで http://your_app_name.mybluemix.net/sites/all/modules/openstack_storage/initObjectStore.php にアクセスします。
  2. すると、「Container drupalObjectStore created (コンテナー drupalObjectStore が作成されました)」というメッセージが表示されます。これは、Bluemix の Object Storage サービスが初期化されたことを示しています。コンテナーが作成されたことを確認するメッセージのスクリーンショット
    コンテナーが作成されたことを確認するメッセージのスクリーンショット

    作成されたコンテナーは、この後のステップで使用します。

Drupal 用 OpenStack Storage プラグインを構成する

  1. アプリケーションのメイン・ページ (http://<アプリケーション名>.mybluemix.net) にブラウザーでアクセスします。必要に応じてログインします。
  2. メイン・メニューで「Modules (モジュール)」をクリックします。「FILE MANAGEMENT (ファイル管理)」セクションで「OpenStack Storage」チェック・ボックスを選択し、「Save configuration (構成の保存)」をクリックして Drupal 用 OpenStack Storage プラグインを有効にします。
  3. メイン・メニューで「Configuration (構成)」をクリックし、「WEB SERVICES (Web サービス)」セクションで「OpenStack Storage」をクリックします。
  4. 「Endpoint URL (エンドポイント URL)」フィールドに、Object Storage 資格情報からコピーしたauth_uri 値を入力します。「Tenant ID (テナント ID)」フィールドには「tenant」と入力します。保存した資格情報に含まれる username 値と password 値を、それぞれ「Username (ユーザー名)」フィールドと「Password (パスワード)」フィールドに入力します。「Save configuration (構成の保存)」をクリックします。
  5. 「OPENSTACK SETTINGS (OpenStack 設定)」セクションでは、「OpenStack Object Store type (OpenStack オブジェクト・ストアのタイプ)」の値が DummyCloudFile になっているのがわかります。「Password (パスワード)」フィールドに再入力してから、「Save configuration (構成の保存)」をクリックします。
  6. 「OpenStack Object Store Region (OpenStack オブジェクト・ストア領域)」の値が DummyRegion として表示されます。「Password (パスワード)」フィールドに再入力してから、「Save configuration (構成の保存)」をクリックします。「Configuration (構成)」ページのスクリーンショット
    「Configuration (構成)」ページのスクリーンショット
  7. 「OBJECT STORE (オブジェクト・ストア)」タブをクリックします。「OPENSTACK STORAGE (OpenStack ストレージ)」セクションで、「Map to Container (コンテナーへのマッピング)」ドロップダウン・リストから「drupalObjectStore」(初期化ステップで作成されたコンテナー) を選択します。他の 2 つのセクションは更新せずに、そのままにします。「Save configuration (構成の保存)」をクリックします。

OpenStack Storage プラグインが正常に構成されました。

デフォルトのダウンロード方法を設定する

  1. メイン・メニューで「Configuration (構成)」をクリックし、「MEDIA (メディア)」セクションで「File system (ファイル・システム)」をクリックします。
  2. デフォルトのダウンロード方法として「Store files as objects on OpenStack object storage (ファイルをオブジェクトとして OpenStack オブジェクト・ストレージに保管する)」を選択して、「Save configuration (構成の保存)」をクリックします。

アップロード先を Object Storage サービスに設定する

  1. メイン・メニューで「Structure (構造)」をクリックし、「Content types (コンテンツ・タイプ)」をクリックします。
  2. 「Article (記事)」行の「manage fields (フィールドの管理)」をクリックします。
  3. 「Image (画像)」行の「edit (編集)」をクリックします。
  4. IMAGE FIELD SETTINGS (画像フィールドの設定)」セクションで、アップロード先として「OpenStack Storage」を選択して、「Save settings (設定の保存)」をクリックします。

これで、画像ファイルはローカル・ファイル・システムにではなく、オブジェクト・ストアにアップロードされるようになります。

ステップ 5. アプリケーションを実行する

ここまでで、アプリケーションが正常にデプロイされて構成されたので、アプリケーションをテストする準備が整いました。

  1. アプリケーションのメイン・ページ (http://your_app_name.mybluemix.net) にブラウザーでアクセスし、必要に応じてログインします。
  2. Select 「Add content (コンテンツの追加)」 > 「Article (記事)」の順に選択します。「Title (タイトル)」フィールドにタイトルを入力し、新しいブログ・エントリーを作成するためのコンテンツを入力した後、画像を添付します。
  3. アップロードされた画像は、Bluemix の Object Storage サービスに保管されます。それを確認するには、Firefox を使用している場合は画像を右クリックして「Inspect Element (要素を調査)」を選択します。これによって表示される画像の URL は、https://dal05.objectstorage.softlayer.net/v1/AUTH_6e9c4fb9-d3eb-4ea1-9dcf-14ebb6f14087/drupalObjectStore/styles/medium/openstack/field/image/Tulips_0.jpg?itok=NYQrDL3D のようなものになっているはずです。サンプル Drupal アプリケーションのホーム・ページと画像要素の詳細のスクリーンショット
    サンプル Drupal アプリケーションのホーム・ページと画像要素の詳細のスクリーンショット

まとめ

IBM Bluemix はその性質からして、LAMP アプリケーションにとって理想的なプラットフォームです。このチュートリアルでは Drupal アプリケーションを例に、LAMP Web アプリケーションを Bluemix にマイグレーションするプロセスをステップバイステップで説明しました。もし皆さんが、LAMP アプリケーションに取り組んでいる多くの開発者の 1 人であり、Bluemix 上でアプリケーションを試してみたいとしたら、このチュートリアルの例を参考にすれば、Bluemix へのアプリケーションのマイグレーションは難しくありません。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Web development, Open source, Cloud computing, Linux
ArticleID=1020080
ArticleTitle=LAMP アプリケーションを Bluemix にマイグレーションする
publish-date=11122015