{"id":1368,"date":"2019-02-26T00:06:19","date_gmt":"2019-02-26T00:06:19","guid":{"rendered":"https:\/\/www.appservgrid.com\/paw93\/?p=1368"},"modified":"2019-03-07T20:29:53","modified_gmt":"2019-03-07T20:29:53","slug":"aws-and-magento-creating-a-magento-cluster-on-aws","status":"publish","type":"post","link":"https:\/\/www.appservgrid.com\/paw93\/index.php\/2019\/02\/26\/aws-and-magento-creating-a-magento-cluster-on-aws\/","title":{"rendered":"AWS and Magento | Creating a Magento Cluster on AWS"},"content":{"rendered":"<p><a href=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/magento-logo2.png\"><img decoding=\"async\" src=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/magento-logo2.png\" alt=\"magento-logo2\" \/><\/a><\/p>\n<p><em>[Usman is a server and infrastructure engineer, with experience in<br \/>\nbuilding large scale distributed services on top of various cloud<br \/>\nplatforms. You can read more of his work at<br \/>\n<a href=\"http:\/\/techtraits.com\/\">techtraits.com<\/a>, or follow him on twitter<br \/>\n<a href=\"https:\/\/twitter.com\/usman_ismail\">@usman_ismail<\/a>or on<br \/>\n<a href=\"https:\/\/github.com\/usmanismail\">GitHub<\/a>.]<\/em><\/p>\n<p><a href=\"http:\/\/magento.com\/\">Magento<\/a> is an open-source content management<br \/>\nsystem (CMS) offering a powerful tool-set for managing eCommerce<br \/>\nweb-sites. Magento is used by thousands of companies including Nike and<br \/>\nOffice Max. Today we are going to walk through the process of setting up<br \/>\na Magento cluster using Docker and Rancher on the Amazon Elastic Compute<br \/>\nCloud (EC2). We use Docker because it makes deployments simple,<br \/>\nrepeatable, and portable across cloud service providers and in-house<br \/>\nhardware. Using Rancher we can extend the Docker primitives across<br \/>\nmultiple servers even if those servers are on different cloud providers.<\/p>\n<p>We will be using the <a href=\"https:\/\/registry.hub.docker.com\/_\/mysql\/\">Official MySQL<br \/>\nimage<\/a>, <a href=\"https:\/\/registry.hub.docker.com\/_\/memcached\/\">Official Memcached<br \/>\nImage<\/a> and<br \/>\na <a href=\"https:\/\/registry.hub.docker.com\/u\/usman\/magento\/\">Magento<\/a> image I<br \/>\ncreated. Despite its many benefits, one area where Docker is still<br \/>\nevolving is managing entire clusters. It is possible to have multi-node<br \/>\ndeployments with Docker installed on each node, but you have to manage<br \/>\nthe containers on each node independently by connecting through ssh.<br \/>\nFurthermore, we lose the ability to connect containers using Docker<br \/>\nlinking. This is where Rancher comes in. Rancher creates a Virtual<br \/>\nPrivate Network (VPN) using IPSec between all Docker containers and<br \/>\nallows us to communicate between containers using standard Docker<br \/>\nprimitives. Additionally, Rancher gives us a nice UI to launch and<br \/>\nmanage containers without having to ssh into individual servers. We are<br \/>\nlaunching all nodes on EC2, however you could use any combination of<br \/>\nservers&#8211;some from EC2 or from in-house hardware or from Digital Ocean<br \/>\nif you choose.<\/p>\n<p>The next sections walk through setting up the Amazon environment,<br \/>\nRancher server, and a array of Rancher compute nodes. We will then use<br \/>\nthose nodes to launch our Magneto deployment.<\/p>\n<h3>Amazon Environment Setup<\/h3>\n<p>We are going to bring up our cluster on top of Amazon EC2, and for this<br \/>\nwe need an <a href=\"http:\/\/aws.amazon.com\/\">Amazon Web Services (AWS)<\/a> account<br \/>\nand some familiarity with the <a href=\"http:\/\/rancher.com\/creating-a-magento-cluster-docker-and-rancher-on-aws\/console.aws.amazon.com\">AWS<br \/>\nConsole<\/a>.<br \/>\nIf you need a refresher you can peruse the <a href=\"http:\/\/docs.aws.amazon.com\/awsconsolehelpdocs\/latest\/gsg\/getting-started.html\">AWS Console<br \/>\nDocumentation<\/a>.<br \/>\nOnce you are signed into the console, click through to the <em>EC2<\/em> service<br \/>\nand from there select the <em>Key Pairs<\/em> menu item in the <em>Network and<br \/>\nSecurity<\/em> section of the side menu. Click <em>Create Key Pair<\/em> and specify<br \/>\na name in the pop-up screen to create a key. When you click <em>Create,<\/em> a<br \/>\npem file will be downloaded to your computer. Keep the key file<br \/>\nsomewhere safe as it is needed to login to your servers and also allows<br \/>\nsomeone to access your servers if they gain access to it. We will also<br \/>\nneed to setup a security group by selecting the <em>Security Groups<\/em> option<br \/>\nin the side menu and clicking the <em>Create Security Group<\/em> button. Select<br \/>\nthe default Virtual Private Cloud (VPC) to create the security group in<br \/>\nand open; port 8080, 9345 and 9346 to the internet. You will also need<br \/>\nto expose port 22 so that you can ssh into your server if necessary. For<br \/>\nthis port, you can select the *My IP *option instead of Anywhere if you<br \/>\nwould like to keep login access to your nodes limited.<\/p>\n<p><a href=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/racher-security-group.png\"><img decoding=\"async\" src=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/racher-security-group.png\" alt=\"racher-security-group\" \/><\/a><\/p>\n<h3>Rancher Server Launch<\/h3>\n<p>We are now ready to launch our Rancher server; for this we will Select<br \/>\nthe <em>Instances<\/em> option from the side menu and then click <em>Launch<br \/>\nInstance<\/em>. This is a 7-step process beginning with Selecting an Amazon<br \/>\nMachine Image (AMI). We will just use the default Amazon Linux AMI. Step<br \/>\ntwo requires us to choose an instance size for the Rancher server. We<br \/>\nwill use the *t2.micro, *the least expensive instance type but recommend<br \/>\nyou use a larger instance type for a real deployment. In step three, we<br \/>\nhave to specify instance details; you can leave most fields set to their<br \/>\ndefaults values but make sure the <em>Auto-assign Public IP<\/em> setting is set<br \/>\nto enabled otherwise you will not be able to access your server.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/instance-details.png\" alt=\"instance-details\" \/><\/p>\n<p>Scroll to the bottom of the page and expand the <em>Advanced<br \/>\nDetails<\/em> section and add the following code into the <em>User data<\/em> text<br \/>\nbox. Amazon uses this as an initializer for your instance and will make<br \/>\nsure that Docker and the Rancher Server is installed and running. Note<br \/>\nthat we are using the package manager yum to install Docker and then<br \/>\noverwriting the binary with the latest one from Docker.com. We do this<br \/>\nbecause Rancher requires Docker version 1.5 or higher but the<br \/>\nrepositories have not been updated past version 1.3 as yet.<\/p>\n<p>#!\/bin\/bash<br \/>\nyum install docker -y<br \/>\nwget https:\/\/get.docker.com\/builds\/Linux\/x86_64\/docker-latest -O docker<br \/>\nchmod +x docker<br \/>\nmv -f .\/docker $(which docker)<br \/>\nservice docker restart<br \/>\ndocker run -d -p 8080:8080 rancher\/server<\/p>\n<p>You may select the defaults for all subsequent options other than<br \/>\nSecurity Group for which you should select the one we created earlier.<br \/>\nSimilarly when asked to select ssh key select the one we created<br \/>\nearlier. A few minutes after you create your instance the Rancher server<br \/>\nshould be up and running. You can find your servers Public IP by<br \/>\nselecting the server in the console and then browse to<br \/>\n<a href=\"http:\/\/RANCHER_SERVER_IP:8080\/\">http:\/\/RANCHER_SERVER_IP:8080\/<\/a> in a browser of your choice and you<br \/>\nwill see the Rancher web console. Also note the Private IP of Rancher<br \/>\nfrom the details section of the Amazon Console; we will need this later<br \/>\non.<\/p>\n<p><a href=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/rancher-server.png\"><img decoding=\"async\" src=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/rancher-server-1024x129.png\" alt=\"rancher-server\" \/><\/a><\/p>\n<h3>Rancher Compute Node Setup<a href=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/rancher-ui.png\"><img decoding=\"async\" src=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/rancher-ui.png\" alt=\"rancher-ui\" \/><\/a><\/h3>\n<p>The first step in creating your Rancher compute nodes is to get the<br \/>\nagent launch command from the Rancher server. To do this, open up your<br \/>\nRancher server in a browser and click <em>Register a new host<\/em>. You will be<br \/>\npresented with a pop window with a Docker run command that you can use<br \/>\nto bring up a Docker agent. Copy that command, and replace the Public IP<br \/>\nof the Rancher Server with its private IP. This is so required because<br \/>\nRancher uses the private network for inter-server communication and<br \/>\nhence is not blocked by the Security Groups. You will also have to<br \/>\nremove the \u2018-it\u2019 switch and replace it with \u2018-d\u2019 to reflect the fact<br \/>\nthat we are running this container in a non-interactive shell. Also note<br \/>\nthat the IP Address (52.1.151.186) and secret (6C97B49FE39413B\u2026) shown<br \/>\nbelow are unique to each setup and will be different for you.<\/p>\n<p>docker run &#8211;rm -it &#8211;privileged -v \/var\/run\/docker.sock:\/var\/run\/docker.sock<br \/>\nrancher\/agent http:\/\/52.1.151.186:8080\/v1\/scripts\/6C97B49FE39413B2B76B:<br \/>\n1424538000000:6UL0o28EXZIkjZbmPOYMGxmM9RU<\/p>\n<p>With this command we can now create our array launch configuration. We<br \/>\ndo this by selecting the <em>Launch Configurations<\/em> item from the side menu<br \/>\nand clicking *Create Launch Configuration. <em>You will then be asked to<br \/>\nfollow the same 7-step form that you followed for the Rancher Server<br \/>\ninstance launch<\/em>. <em>As before<\/em>,* select the Amazon Linux AMI, an instance<br \/>\ntype of your choice, storage size, and the security group and ssh key we<br \/>\ncreated earlier. The only difference for the instance setup form is on<br \/>\nStep 3, <em>Configure Launch Configuration<\/em>. In the Advanced details<br \/>\nsection you must select <em>\u201cAssign a public IP to every instance\u201d<\/em> to<br \/>\nevery instance if you wish for your Docker containers to be publicly<br \/>\naccessible. In addition add the following lines into the User data text<br \/>\nbox. This script is identical to the one we used to launch Rancher<br \/>\nserver other than the last line. We replaced the Docker run for the<br \/>\nRancher server command with the modified Docker run command for the<br \/>\nRancher agent which we copied from the UI.<\/p>\n<p>#!\/bin\/bash<br \/>\nyum install docker -y<br \/>\nwget https:\/\/get.docker.com\/builds\/Linux\/x86_64\/docker-latest -O docker<br \/>\nchmod +x docker<br \/>\nmv -f .\/docker $(which docker)<br \/>\nservice docker restart<br \/>\ndocker run &#8211;rm -d &#8211;privileged -v \/var\/run\/docker.sock:\/var\/run\/docker.sock Rancher\/agent http:\/\/172.30.2.200:8080\/<\/p>\n<p>Now that we have created the launch configuration we can create an<br \/>\nautoscaling array with our configuration. We select the <em>Auto Scaling<br \/>\nGroups<\/em> option of the side menu and click *Create Auto Scaling<br \/>\nGroup. *In the first step we will be asked to specify the launch<br \/>\nconfiguration, select the launch configuration we just created in the<br \/>\nprevious paragraph. In the second step specify a name for this auto<br \/>\nscaling group, set the group size to however many compute nodes you<br \/>\nrequire. Note that this value can be changed later if your needs<br \/>\nincrease or decrease. We will be using two agents to illustrate the<br \/>\nnetwork connectivity features of Rancher.<br \/>\nFor <em>Network<\/em> and <em>Subnet<\/em> choose the default VPC and the same<br \/>\navailability zone you used for the Rancher server. The rest of the steps<br \/>\ncan be left at default settings. Once you have created your auto scaling<br \/>\ngroup wait a few minutes for the instances to be launched and then<br \/>\nbrowse to the Rancher Server URL to see that the new agents have been<br \/>\nregistered. Note that you can always add more agents to your cluster by<br \/>\nediting the Desired Nodes setting in the Auto scaling group<br \/>\nconfiguration. With our launch configuration setup all new nodes will<br \/>\nregister themselves with the Rancher server automatically.<\/p>\n<h3>Magento Setup<\/h3>\n<p>Now that we have our two node Rancher cluster launched we can setup our<br \/>\nMagento containers. However before we launch our Magento Cluster we must<br \/>\nfirst launch a MySQL container to serve as our database and a Memcached<br \/>\ncluster for caching. Let\u2019s launch our MySQL container first on one of<br \/>\nthe compute nodes. We do this by mouse hovering over the server in the<br \/>\nRancher Server UI and clicking the plus icon. In the pop up menu we need<br \/>\nto specify a name for our container and <em>mysql<\/em> as the source image.<br \/>\nSelect the *Command *tab in the menu to the left and add 4 Environment<br \/>\nVariables: mysql root password, mysql user, mysql password, and mysql<br \/>\ndatabase. You may choose any values for these variables except mysql<br \/>\ndatabase which must be set to Magento. After adding all of these<br \/>\nenvironment variables, hit create to create the container. Note that<br \/>\nmysql is official Docker mysql image and details of what is inside this<br \/>\ncontainer can be found on<br \/>\nits <a href=\"https:\/\/registry.hub.docker.com\/_\/mysql\/\">dockerhub<\/a> page.<\/p>\n<p><a href=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/mysql_env.png\"><img decoding=\"async\" src=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/mysql_env.png\" alt=\"mysql_env\" \/><\/a><\/p>\n<p>Next we will create the Memcached container on the empty compute node by<br \/>\nhitting the plus icon. We again give the container a name and specify<br \/>\nits source image as <em>memcached.<\/em> The Memcached container does not<br \/>\nrequire any further configuration and therefore we can just click create<br \/>\nto setup the container. Details of the memcached official container we<br \/>\nuse can be found on<br \/>\nits <a href=\"https:\/\/registry.hub.docker.com\/_\/memcached\/\">dockerhub<\/a> page.<br \/>\nLastly we will create the Magento container from an image I created<br \/>\ncalled <a href=\"https:\/\/registry.hub.docker.com\/u\/usman\/magento\/\">usman\/magento<\/a>.<br \/>\nCreate the Magento container on the same compute node as the cache (so<br \/>\nthat cache is accessible faster). Specify usman\/magento as the source<br \/>\nimage. In the ports section add a mapping from 8080 public to 80 in host<br \/>\nports. Make sure that you select the<em>Managed Network on docker0<\/em> option<br \/>\nfor both mysql and memcached containers so that we can connect to them<br \/>\nfrom our Magento container.<\/p>\n<p><a href=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/links.png\"><img decoding=\"async\" src=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/links.png\" alt=\"links\" \/><\/a><\/p>\n<p>In the links section, add links to the mysql and memcached containers<br \/>\nthat we just setup. It is important the mysql container be named db and<br \/>\nthe memcached container be named cache as shown in the image to the<br \/>\nright. We need to choose these names because Rancher creates environment<br \/>\nvariables in the Magento container telling it where to connect to MySQL<br \/>\nand Memcached. These variables are based on the name of the linked<br \/>\ncontainer and hence we the need the values to remain the same. By<br \/>\nlinking containers through Rancher the containers are able to<br \/>\ncommunicate even though we did not expose their ports. Rancher extends<br \/>\nDocker\u2019s linking concept to support multiple nodes by providing<br \/>\na virtual private network between the hosts using IPsec tunneling. We<br \/>\nwill need to know the IP and Port at which MySQL is available to the<br \/>\nMagento container so that we can use it later when we configure Magento<br \/>\nthrough the web interface. So go head and hit create and wait for the<br \/>\ncontainer to get into the Running state.<\/p>\n<p><a href=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/Screen-Shot-2015-02-25-at-7.43.42-PM.png\"><img decoding=\"async\" src=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/Screen-Shot-2015-02-25-at-7.43.42-PM.png\" alt=\"exec-shell\" \/><\/a><\/p>\n<p>Once the container is running we can use another Rancher feature to open<br \/>\na shell into containers directly from the UI to retrieve the network<br \/>\ninformation we require. Click the inverted chevron next to the Magento<br \/>\ncontainer and select <em>Execute Shell<\/em>. You will be presented with pop up<br \/>\nwindow and an embedded shell connected to the container. In the shell<br \/>\nuse the env command to list the environment variables and grep<br \/>\nfor DB_PORT_3306_TCP_. This will list the IP, Port and Protocol at<br \/>\nwhich the DB is available. As an aside the ADDR will be the IP of the<br \/>\nNetwork Agent on the server that Magento is running. This is because the<br \/>\nnetwork agent will be proxying traffic to the remote container.<\/p>\n<p>env | grep DB_PORT_3306_TCP_<br \/>\nDB_PORT_3306_TCP_PORT=28428<br \/>\nDB_PORT_3306_TCP_PROTO=tcp<br \/>\nDB_PORT_3306_TCP_ADDR=10.42.81.155<\/p>\n<p>The Magento container should be up by now and you can browse to port<br \/>\n8080 on the public interface of the Amazon server running Magento. Note<br \/>\nthat the public IP is not shown inside Rancher as we used the private<br \/>\ninterfaces to setup agents&#8211;you will have to lookup the IP from the<br \/>\nAmazon console. If everything is working correctly you should see the<br \/>\nMagento installation wizard that will guide you through the rest of the<br \/>\nprocess. The initial page will ask you to accept the Terms of Service,<br \/>\nand then subsequent pages will as ask for locale information and<br \/>\ndatabase configuration. For database configuration enter the value of<br \/>\nthe <em>$DB_PORT_3306_TCP_ADDR<\/em> that we looked up earlier followed by<br \/>\na colon and <em>$DB_PORT_3306_TCP_PORT<\/em> in to the Host field. Also<br \/>\nspecify the database name as *magento <em>and username<\/em> *and password to<br \/>\nmatch values you selected for <em>MYSQL_USER<\/em> and <em>MYSQL_PASSWORD<\/em><br \/>\nrespectively. Next you will be asked to create an administrator user and<br \/>\npassword for Magento and with that you are done. You should have a fully<br \/>\nfunctional, albeit empty Magento website.<\/p>\n<p><a href=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/Screen-Shot-2015-02-25-at-7.18.36-PM.png\"><img decoding=\"async\" src=\"http:\/\/cdn.rancher.com\/wp-content\/uploads\/2015\/02\/02162431\/Screen-Shot-2015-02-25-at-7.18.36-PM.png\" alt=\"magento-configruation\" \/><\/a><\/p>\n<p>If you got this far, you have successfully launched a Rancher cluster on<br \/>\nthe Amazon Compute Cloud and created a distributed Magento deployment<br \/>\nusing Docker containers. We have also used two salient features of<br \/>\nRancher&#8211;the VPN that allows private communication between containers<br \/>\nand the ability to manage containers on the entire cluster from a<br \/>\nweb-UI. During this entire tutorial we never had to ssh into any of our<br \/>\nservers. Although the Magento cluster we setup was just meant to be an<br \/>\nexample, with a few modifications such as using a replicated MySQL<br \/>\ndatabase and a larger array of Rancher compute nodes, we could very<br \/>\neasily use Rancher for a production Magento deployment.<\/p>\n<p>A word of caution if you do plan on using Rancher for large-scale<br \/>\ndeployments: Rancher is still in its infancy, and there are some<br \/>\nfeatures that have not been released yet. For example if we were to run<br \/>\nmultiple Magento containers, we would need to setup our own<br \/>\nload-balancing solution to distribute traffic to the containers. Another<br \/>\nissue is that container configuration is stored on the agents where the<br \/>\ncontainers are running and hence losing an agent means not only losing<br \/>\nthe containers running on it but also the configuration used to launch<br \/>\nthem. The containers we launched today are fairly simple but this is not<br \/>\nalways the case. Both ELBs and support for Docker Compose with some form<br \/>\nof templating are on the Rancher roadmap, so hopefully these items will<br \/>\nbe addressed soon. I am not using Rancher on user-facing productions<br \/>\nsystems just yet but it is going to be a larger and larger part of the<br \/>\nDocker based systems I manage.<\/p>\n<p>If you would like to learn more about Rancher, please request a<br \/>\none-on-one demo to get a better understanding of how the platform works.<\/p>\n<p><em>[Usman is a server and infrastructure engineer, with experience in<br \/>\nbuilding large scale distributed services on top of various cloud<br \/>\nplatforms. You can read more of his work at<br \/>\n<a href=\"http:\/\/techtraits.com\/\">techtraits.com<\/a>, or follow him on twitter<br \/>\n<a href=\"https:\/\/twitter.com\/usman_ismail\">@usman_ismail<\/a>or on<br \/>\n<a href=\"https:\/\/github.com\/usmanismail\">GitHub<\/a>.]<\/em><\/p>\n<p><a href=\"https:\/\/rancher.com\/creating-a-magento-cluster-docker-and-rancher-on-aws\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>[Usman is a server and infrastructure engineer, with experience in building large scale distributed services on top of various cloud platforms. You can read more of his work at techtraits.com, or follow him on twitter @usman_ismailor on GitHub.] Magento is an open-source content management system (CMS) offering a powerful tool-set for managing eCommerce web-sites. Magento &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.appservgrid.com\/paw93\/index.php\/2019\/02\/26\/aws-and-magento-creating-a-magento-cluster-on-aws\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;AWS and Magento | Creating a Magento Cluster on AWS&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1368","post","type-post","status-publish","format-standard","hentry","category-kubernetes"],"_links":{"self":[{"href":"https:\/\/www.appservgrid.com\/paw93\/index.php\/wp-json\/wp\/v2\/posts\/1368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appservgrid.com\/paw93\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appservgrid.com\/paw93\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw93\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw93\/index.php\/wp-json\/wp\/v2\/comments?post=1368"}],"version-history":[{"count":1,"href":"https:\/\/www.appservgrid.com\/paw93\/index.php\/wp-json\/wp\/v2\/posts\/1368\/revisions"}],"predecessor-version":[{"id":1443,"href":"https:\/\/www.appservgrid.com\/paw93\/index.php\/wp-json\/wp\/v2\/posts\/1368\/revisions\/1443"}],"wp:attachment":[{"href":"https:\/\/www.appservgrid.com\/paw93\/index.php\/wp-json\/wp\/v2\/media?parent=1368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw93\/index.php\/wp-json\/wp\/v2\/categories?post=1368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw93\/index.php\/wp-json\/wp\/v2\/tags?post=1368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}