BreadcrumbHomeResourcesBlog AWS PHP Guide For Developers April 19, 2016 AWS PHP Guide for DevelopersAWSZend ServerEarlier this month we hosted an AWS 101 webinar in which we did a live walk-through showing you how easy it is to get up and running with your PHP applications on the enterprise cloud platform AWS.In this article, we'll walk you through getting started with AWS using a Zend PHP server. But first, let's clear up a common question.Does AWS Support PHP?Yes, there are many options for deploying PHP applications on AWS. These options ranging from using a minimal OS image to spin up an instance and then install LAMP stack on top of it, or use images that come with everything needed to run web application pre-installed.Easy Steps to Host a PHP Website on AWSOne of the quickest ways to get your PHP app into an AWS machine is to use Zend Server AWS machine images (AMI) which comes with Zend Server pre-installed (but without MySQL server). If your application requires a MySQL server (and many PHP apps do), we recommend using AWS RDS which supplies MySQL as a service.Aside from regular PHP and Apache stack, Zend Server also provides additional value with the following components:Z-Ray: allows displaying all information about requests processed by PHP in real timeDeployment: automates deployment of PHP applicationsMonitoring: centralized interface to PHP eventsData cache: PHP extension that allows caching data in memory or on diskPage cache: cache full page that was generated by PHPJob queue: background execution of requests to any URLSession clustering: allows sharing of PHP sessions between cluster nodesZend Server images on AWS Marketplace provide a choice of the following options:Operating system: RHEL7 or Ubuntu 14.04 (CentOS is on our roadmap)PHP versions: 5.5 or 5.6 (there are a few images with PHP 5.3/5.4 as an LTS version and PHP 7 will be supported soon)Zend Server editions: developer, professional, and enterpriseZend Server for AWS PHP + MySQLReady to get started with AWS PHP + MySQL?As a follow-on to the webinar, we have pulled together this step-by-step guide covering how to start a simple instance of Zend Server on AWS, add RDS MySQL service and connect to it, and launch WordPress using Zend Server deployment.Step 0 - AWS Vocabulary and Security BasicsLet’s start with a simple vocabulary of common terms that are used when discussing AWS:AWS (Amazon Web Services)EC2 (Elastic Compute Cloud): an AWS service that provides computing resourcesAMI (Amazon Machine Image): a filesystem image with some metadata like type of OS in image and type of virtualization to use when starting new serverInstance: a Virtual Machine running on EC2 using some AMIInstance type: a combination of CPU, memory, storage, and networking capacityRDS (Relational Database Service): an AWS service that provides many relational databases (supports, but not limited to, MySQL)To help you understand the different AWS security settings, these security terms will become handy:VPC (Virtual Private Networking): allows you to define one or more networks which is composed of one or more VPC SubnetsVPC Subnet: similar to regular network subnetSecurity Group: a set of network rules. Resources on AWS can belong to one or more Security Groups.Key pair: regular SSH key pair. Must be specified when starting EC2 Instance to allow SSH access.Step 1 - Launching Zend Server on AWSThere are two ways to launch Zend Server on AWS. First is to use AWS Marketplace website (option A) and launch Zend Server from there. Second is to use Marketplace inside AWS Console (option B). We will cover both ways here.Option A: Launch Zend Server using AWS Marketplace websiteOpen AWS Marketplace websiteSign in or create AWS account by clicking relevant link on top of pageType ‘Zend Server’ in the search bar and press EnterIn the search result locate Zend Server with relevant PHP version, edition, and operating system. For this guide please select 'PHP 5.6 - Zend Server Developer Edition (Ubuntu)'.On the product page click on "Continue" button located on the rightConfigure and customize the launch settings of Zend Server instance. Version: version of Zend Server AMI to use. It’s recommended to always use latest versionRegion: which region Zend Server instance should be startedInstance type: how much CPU/memory/Storage you want for your instanceVPC settings: which VPC and subnet instance is startedSecurity group: security group for instance, you can select existing security group or let AWS create new security group with default rules for Zend Server (recommended)Key pair: which SSH key pair should be installed on this instanceReview the launch settings and click on "Accept Software Terms & Launch with 1-Click" button, After the first launch this button will be named "Launch with 1-Click".Login to AWS Console to see the new instance and get its’ detailsOption B: Launch Zend Server using AWS ConsoleLogin to AWS ConsoleOpen EC2 ConsoleOn dashboard click on "Launch Instance"buttonIn the wizard presented select AWS Marketplace tab on the leftEnter 'Zend Server' in the search barSelect relevant Zend Server product with relevant PHP version, edition, and operating system and click Continue button in product summary that is shown. For this guide please select 'PHP 5.6 - Zend Server Developer Edition (Ubuntu)'.Select instance typeOn steps 3, 4, 5 various instance settings can be configured. For this guide, skip them by clicking “5. Tag Instance” link on top.Enter friendly name for your instance that will be used to identify it and click on "Review and Launch" buttonReview new instance settings and click "Launch"Either select an existing key pair (and acknowledge you have access to it) or create a new one and click "Launch Instances"Wait while the instance is created and then click on "View Instances" button at the bottom of a page Launch StatusBootstrap Zend Server to get Zend Server ready for workOnce you have finished either option A or B, you need to make Zend Server ready for work. We have to bootstrap it using very simple wizard. To do this we open the Zend Server UI which is accessible using a web browser on port 10081 of the instance we just started.We need to find out either the public DNS (what we use in this guide) or public IP of the instance. We will also need the instance ID to enter Zend Server UI. By default Zend Server UI is protected so you have to enter instance ID as login and password, but once you bootstrap Zend Server and set admin password you won’t have to use it again.Follow these steps to find “Public DNS” and “Instance ID” of your instance:Open AWS ConsoleEnter EC2 ConsoleIn the menu on the left click on “Instances” linkLocate your instance in the list of instances and click on itOn the bottom pane you will see information about the instance shown in 2 columns “Public DNS” field is on top of right column“Instance ID” field is on top of left columnNow that we have public DNS name of instance we can open our browser and enter the following address to access Zend Server UI: http://<Public DNS>:10081/Once you open Zend Server UI you will first be asked to authenticate. Enter “Instance ID” you found earlier as both login and password.You will then be presented a wizard that will guide you to setup Zend Server in a few very simple steps. Upon finishing wizard and successfully bootstrapping your Zend Server is fully ready to work.Note: bootstrap process can be fully automated by providing user data to instance. Step 2 – Launching RDS for MySQLWe have Zend Server, which means that we have fully working and configured web server with PHP. To go on and launch WordPress, we are still need to add a MySQL database server. We, of course, could install and configure it on the same instance with Zend Server, but it’s much simpler to use AWS RDS. RDS provides many database services including MySQL. So let’s setup an RDS instance and configure Security Group to allow access to it:Open AWS ConsoleOpen RDS ConsoleClick “Launch a DB Instance” buttonSelect “MySQL” tab on the left and click “Select” buttonSelect “MySQL” under Dev/Test section and click “Next Step” buttonConfigure all options you see on screen (once you select some option, it’s description is presented on the right), for our example fill following details: DB Engine Version: 5.6.27 or laterDB Instance Class: db.m3.mediumMulti-AZ Deployment: NoStorage Type: General Purpose (SSD)Allocated Storage: 5GBDB Instance Identifier: unique name for your DB InstanceMaster Username: rootMaster Password: your password>Confirm Password: must be same as Master PasswordClick “Next Step” buttonAdvanced Settings step - as in previous step, clicking any option shows its description on the right. For this guide change only the following settings: VPC: select your default VPCSubnet Group: select any subnet groupPublicly Accessible: yesAvailability Zone: No preferenceVPC Security Group: select same Security Group as Security Group of EC2 instance you created (if you do not remember it, you can find it in EC2 console on details pane where you found “Instance ID” and “Public DNS” fields)Database Name: leave emptyBackup Retention Period: if you do not want to backup this RDS, select 0Click “Launch DB Instance”Now we have to wait till our new DB instance is launched and ready for use. While waiting we can configure our Security Group rules to allow communication between web server and MySQL DB server.Configure Security GroupThere are two options for configuration here: either allow communication only between web server and MySQL server (more suitable for production environments), or allow anyone to connect to MySQL DB server (more suitable for development environments). In this guide we will cover only second option.Allow anyone to connect to MySQL serverOpen AWS ConsoleOpen EC2 ConsoleClick on “Security Groups” link in the menu on the leftSelect relevant Security GroupIn the details pane on bottom click on tab “Inbound”Click on “Edit” buttonIn the dialog shown click “Add Rule”Fll values of new rule as following: Type - Custom TCP RuleProtocol - TCPPort Range - 3306Source - Custom IP and enter 0.0.0.0/0 as IPClick “Save” buttonTo find MySQL server DNS see how to find endpoint (which is also MySQL DNS) in next step.Step 3 - Deploy WordPressOnce RDS has finished starting (it can take 10 minutes or even more), you have to find its endpoint. For this follow these steps:Open AWS ConsoleOpen RDS ConsoleClick on “Instances” link in the menu on the leftClick on your RDS instanceLocate “Endpoint” field and save itOnce we have MySQL endpoint we can deploy the WordPress application. For this do the following:Open Zend Server UI (reminder - http://<instance public DNS>:10081/)Login to Zend Server (if needed)Click on “Getting Started” menu on the leftClick on WordPress icon located under “Deploy sample apps” sectionWait till WordPress application is downloaded and click “Next” buttonNext you will be presented “README” section with details about WordPress package, you can read them and then press “Next”Here you can fill application details: Display name: name that this application will have in applications listVirtual Host: on which virtual host application should be deployed (leave “default server”)Path: path under which application will be deployed (leave empty)Click “Next” to proceedRead EULA, check checkbox under it and click “Next”On next screen you will see prerequisites validation statusClick “Next” to continueNow the important part - user parameters, fill them as following: Site URL: must be http://<Instance Public DNS>/Blog Name: fill as you likeDatabase host: must be set to endpoint of RDS instanceDatabase username: rootDatabase password: password you entered when you created RDS instanceDatabase name: name of database for WordPress (change only if needed)WordPress admin username: username for admin user of WordPressWordPress admin password: password for admin user of WordPressWordPress admin email: email for admin user of WordPressTable prefix: prefix for tables created in database (change only if needed)Click “Next” buttonReview deployment summary and click “Deploy”Once you click “Deploy” application deployment will be started. It should take up to a few minutes to finish (but most of time it finishes in tens of seconds). Once the application status on applications list page changes to “Deployed”, you can access WordPress on http://<Instance Public IP>/Using Z-RayMost interesting and impressive feature of Zend Server for developers is Z-Ray. It can show comprehensive information about how page was generated by PHP, what resources were used, timing of any function, and even more custom and specific information using plugins. Since we already deployed WordPress on our Zend Server, let’s see what Z-Ray can show us. Z-Ray is displayed as a bar at bottom of web page in browser (this bar is injected by Z-Ray PHP extension in Zend Server). So open your WordPress website and you will see a bar on bottom similar to this:Note that Z-Ray is enabled by default only in Zend Server Developer Edition, or when you choose “Development” profile during bootstrap process of Zend Server Professional Edition and Zend Server Enterprise Edition. Additionally you can configure Z-Ray to be shown only for requests coming from specific IP addresses or when URL has Z-Ray token. This is very useful if you want to use Z-Ray in production, but do not want to show it to anyone visiting your website.Getting StartedYou can start using Zend Server on AWS today. You can also start a free 30-day trial.START FREE TRIALAdditional Resources101 Guide: Developing Web Applications with PHPBlog: PHP Development: Using PHP ExtensionsTechnical Guide: Writing PHP ExtensionsBlog: PHP Encryption with Libsodium