AWSSAM

LambdaでPHPが動くので、とりあえずWordPressをいれてみた

Lambdaがカスタムランタイム対応しましたね。PHPのLayerが公開されていましたので、恒例のやつをやってみましょう。 セットアップ LambdaでPHPを使う方法は以下のGitHubが参考になります。 PHP La […]

広告ここから
広告ここまで

Lambdaがカスタムランタイム対応しましたね。PHPのLayerが公開されていましたので、恒例のやつをやってみましょう。

セットアップ

LambdaでPHPを使う方法は以下のGitHubが参考になります。

PHP Layer For AWS Lambda

プロジェクトの準備

SAMでデプロイできます。

$ mkdir my-php-app
$ cd my-php-app
$ touch template.yaml

template.yamlは以下のように書きましょう。

AWSTemplateFormatVersion: 2010-09-09
Description: My PHP Application
Transform: AWS::Serverless-2016-10-31
Resources:
  phpserver:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub ${AWS::StackName}-phpserver
      Description: PHP Webserver
      CodeUri: src/server
      Runtime: provided
      Handler: router.php
      MemorySize: 3008
      Timeout: 30
      Tracing: Active
      Layers:
        - !Sub arn:aws:lambda:${AWS::Region}:887080169480:layer:php71:3
      Events:
        api:
          Type: Api
          Properties:
            Path: /{proxy+}
            Method: ANY

LayersにいれているARNがPHPをLambdaで実行するためのものです。

PHPファイルの準備

続いてLambdaで動かすPHPファイルを用意します。

$ mkdir -p src/server
$ touch src/server/router.php

src/server/router.phpには以下のようにコードを書きます。

<?php
if (is_file($_SERVER['DOCUMENT_ROOT'].'/'.$_SERVER['SCRIPT_NAME'])) {
  // Serve static files directly
  return false;
}

// Run index.php for all requests
$_SERVER['SCRIPT_NAME'] = '/index.php';
require 'index.php';
?>

WordPressをいれてみる

いよいよですね。今回はとりあえずということで、GitHubからzipを落としてきて放り込みます。

https://github.com/WordPress/WordPress/archive/master.zip

$ wget https://github.com/WordPress/WordPress/archive/master.zip
$ unzip master.zip
$ mv WordPress-master/ src/server

ディレクトリ構成はこのようになります。

$ tree -L 3
.
├── src
│   └── server
│       ├── index.php
│       ├── license.txt
│       ├── readme.html
│       ├── router.php
│       ├── wp-activate.php
│       ├── wp-admin
│       ├── wp-blog-header.php
│       ├── wp-comments-post.php
│       ├── wp-config-sample.php
│       ├── wp-content
│       ├── wp-cron.php
│       ├── wp-includes
│       ├── wp-links-opml.php
│       ├── wp-load.php
│       ├── wp-login.php
│       ├── wp-mail.php
│       ├── wp-settings.php
│       ├── wp-signup.php
│       ├── wp-trackback.php
│       └── xmlrpc.php
└── template.yaml

デプロイする

どうせちゃんと動かないというのは見えているので、とりあえずやるだけやってみましょう。

$ sam package \
    --template-file template.yaml \
    --output-template-file serverless-output.yaml \
    --s3-bucket <your SAM deployment bucket created above>

$ sam deploy \
    --template-file serverless-output.yaml \
    --stack-name my-first-serverless-php-service \
    --capabilities CAPABILITY_IAM

サンプルのCloudFormationにはOutputが記載されていませんので、API Gatewayのコンソールからmy-first-serverless-php-serviceというAPIを探して、ダッシュボードからAPI URLを確認しましょう。

あとはAPIにアクセスすればOKです。indexとか適当なパスをつけてアクセスしてみましょう。

もちろん動きません。

Lambdaのログを確認すると、以下のような出力でした。

{
  "multiValueHeaders": {
    "Host": [
      "localhost:8000",
      "localhost:8000"
    ],
    "Date": [
      "Thu, 29 Nov 2018 18:35:22 +0000",
      "Thu, 29 Nov 2018 18:35:22 +0000"
    ],
    "Connection": [
      "close",
      "close"
    ],
    "X-Powered-By": [
      "PHP/7.1.7",
      "PHP/7.1.7"
    ],
    "Location": [
      "https://localhost:8000/index.php/path/to/wp-admin/setup-config.php"
    ],
    "Content-type": [
      "text/html; charset=UTF-8"
    ],
    "Content-Type": [
      "text/html; charset=utf-8"
    ]
  },
  "body": "Your PHP installation appears to be missing the MySQL extension which is required by WordPress.",
  "statusCode": 500
}

Your PHP installation appears to be missing the MySQL extension which is required by WordPress.とのことなので、MySQLエクステンションが必要な様子です。Layerを作るか探していれればいけるかもしれません。

ちなみに以下のように302リダイレクトが走っている様子でした。

[Thu Nov 29 18:35:22 2018] 127.0.0.1:40630 [302]: /path/to/resource
[Thu Nov 29 18:35:22 2018] 127.0.0.1:40632 [500]: /index.php/path/to/wp-admin/setup-config.php

初期化しようと頑張っているところが伺えますね。

まとめ

「ダメだろうな」とは思っていましたが、案の定でした。ただし必要なエクステンションを揃えれば動くようになるかもしれません。

ただ、wp-content/配下をどこに保存させるのかとか、Aurora Serverlessあたりとうまく繋げるのかの調整など、頑張ることは多そうです。

(だれかこの先頑張って)

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts