LoginSignup
23
25

More than 5 years have passed since last update.

AWS LambdaでPHPを動かしてRDS(MySQL)へ接続する

Last updated at Posted at 2016-02-21

以前は、LambdaからRDSへ接続するには、RDSをパブリックアクセス可能に設定し、LambdaのIPアドレスを通すようなセキュリティグループの設定も必要でした。
しかし、LambdaからVPCアクセスが可能となった今、スマートかつセキュアに接続をすることができます。

LAMP環境を作る

AWS LambdaのVPC対応によって、LAMP環境の構築が容易になりました。
LAMP環境とは、LAmbda, MySQL, PHP で構成されるアプリケーションの実行環境のことです。
(Python?知らない子ですね)

AWS Lambdaで動かすPHP

AWS LambdaにはPHPが入っていません。
なので、PHPを動かすためには、Node.jsなどのAWS Lambdaでサポートされている言語経由で、自分で用意したPHPの実行ファイルを起動する必要があります。

AWS LambdaでPHPを動かす方法については、こちらにまとめてあります。
以下のPHPのスクリプトなどは、こちらの記事の「PHP CLIを動かした話」で紹介しているものを、一部修正したものです。

用意したPHP実行ファイル

MySQLにアクセスするので、そのためのオプションを忘れないようにします。

git clone git@github.com:php/php-src.git
cd php-src
git checkout -b php-7.0.3 php-7.0.3
./buildconf --force
./configure \
--prefix=/var/task/php \
--disable-all \
--with-openssl \
--enable-pdo \
--with-mysqli \
--with-pdo-mysql \
--with-mysql 
make

スクリプト

script.sh
#!/bin/sh
export LD_LIBRARY_PATH=`pwd`'/lib:'$LD_LIBRARY_PATH
./php/php app.php

app.php
<?php
$schema = 'test';
$dbhost = 'test.*********.ap-northeast-1.rds.amazonaws.com';
$dbport = 3306;
$charset = 'utf8';
$dbuser = 'test';
$dbpass = 'test';
$dsn = "mysql:dbname={$schema};host={$dbhost};port={$dbport};charset={$charset}";
$pdo = new \PDO($dsn, $dbuser, $dbpass);

$statement = $pdo->query('SELECT id,name FROM gloriana;');

while ($data = $statement->fetch(\PDO::FETCH_ASSOC)) {
    echo "{$data['id']}, {$data['name']}\n";
}

RDS

Aurora, MySQL, MariaDBのいずれかのRDSインスタンスを立てておきます。

テスト用に、下記のテーブル、データを用意しました。

ddl-dml.sql
CREATE TABLE `gloriana` (
  `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` varchar(10) NOT NULL
  ) ENGINE='InnoDB';

INSERT INTO gloriana (name) values
('ダージリン'),
('アッサム'),
('オレンジペコ'),
('ローズヒップ');

AWS Lambda

設定

上記で作成したPHP本体やスクリプトをまとめたファイルをS3経由でLambdaファンクションにコードとしてアップロード。
下記のように設定します。
Screen Shot 2016-02-21 at 3.59.59 PM.png

実行結果

Screen Shot 2016-02-21 at 2.57.55 PM.png

参考

(祝)AWS LambdaのVPC利用が可能になりました
AWS LambdaのVPCアクセスに関して少しだけ解説
AWS LambdaでPHPなどを動かした話

23
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
25