Acquia
Drupal-based enterprise cloud platform. Supports building, operating, and optimizing Drupal sites.
CMS
Acquia
Overview
Acquia is a Drupal-based enterprise cloud platform that comprehensively supports the building, operation, and optimization of Drupal sites.
Details
Acquia is an enterprise-grade cloud platform specialized for Drupal. It combines Drupal core with advanced features developed by Acquia to support the building and operation of large-scale websites and applications. Acquia Cloud Platform provides an integrated offering of Drupal-optimized hosting environment, CI/CD, security management, and performance monitoring. Widely adopted especially by government agencies, universities, and non-profit organizations, it is the only FedRAMP-certified Drupal platform. In 2024, it began supporting Drupal 11 and provides innovative tools such as Acquia Code Studio (full-stack development platform), Acquia Cloud IDE (Web IDE), and Acquia Site Studio (low-code site builder). It is the largest contributor to the Drupal community and the only Drupal certification provider.
Pros and Cons
Pros
- Drupal expertise: Deep specialization and support focused on Drupal
- High-performance hosting: 7 global regions, 99.99% SLA
- Comprehensive DevOps tools: Integrated CI/CD, Git integration, environment management
- Enterprise security: FedRAMP, HIPAA, PCI, SOC compliance
- Automated operations: Optimized deployment and scaling
- 24/7 expert support: Continuous support from Drupal specialists
- Integrated development environment: Code Studio, Cloud IDE, Site Studio
Cons
- Drupal-only: Does not support other CMS platforms
- High cost: Starting from $175/month, enterprise plans cost hundreds of thousands of yen or more
- Vendor lock-in: Dependency on Acquia platform
- Technical complexity: High learning curve for Drupal
- Customization limitations: Constraints due to managed service
- Scale-based costs: Cost increases with traffic growth
Key Links
- Acquia Official Site
- Acquia Documentation
- Acquia Cloud Platform
- Acquia Academy
- Acquia Support
- Drupal.org
Usage Examples
Acquia Cloud Environment Setup
# Install Acquia CLI
curl -OL https://github.com/acquia/cli/releases/latest/download/acli.phar
chmod +x acli.phar
sudo mv acli.phar /usr/local/bin/acli
# Authentication setup
acli auth:login
# Create new Drupal project
composer create-project acquia/drupal-recommended-project my-drupal-site
cd my-drupal-site
# Initialize Acquia environment
acli app:new
# Git repository setup
git init
git remote add acquia <acquia-git-url>
git add -A
git commit -m "Initial commit"
git push acquia master
Drupal Module Development
// modules/custom/my_module/my_module.info.yml
name: 'My Custom Module'
type: module
description: 'Custom functionality for Acquia Drupal site'
core_version_requirement: ^9 || ^10 || ^11
package: Custom
dependencies:
- drupal:node
- drupal:views
- drupal:taxonomy
// modules/custom/my_module/src/Controller/MyController.php
<?php
namespace Drupal\my_module\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Cache\CacheableMetadata;
class MyController extends ControllerBase {
protected $entityTypeManager;
public function __construct(EntityTypeManagerInterface $entity_type_manager) {
$this->entityTypeManager = $entity_type_manager;
}
public static function create(ContainerInterface $container) {
return new static(
$container->get('entity_type.manager')
);
}
public function content() {
// Utilizing Acquia cache tags
$node_storage = $this->entityTypeManager->getStorage('node');
$nodes = $node_storage->loadByProperties(['status' => 1, 'type' => 'article']);
$build = [
'#theme' => 'item_list',
'#items' => [],
'#title' => $this->t('Latest Articles'),
];
foreach ($nodes as $node) {
$build['#items'][] = [
'#type' => 'link',
'#title' => $node->getTitle(),
'#url' => $node->toUrl(),
];
}
// Acquia cache optimization
$cache_metadata = new CacheableMetadata();
$cache_metadata->addCacheTags(['node_list:article']);
$cache_metadata->addCacheContexts(['url.path', 'user.permissions']);
$cache_metadata->applyTo($build);
return $build;
}
}
Acquia Cloud Hooks
#!/bin/bash
# hooks/common/post-code-deploy/update.sh
# Post-code deploy automatic execution script
site="$1"
target_env="$2"
source_branch="$3"
deployed_tag="$4"
repo_url="$5"
repo_type="$6"
# Enable Drupal maintenance mode
drush @$site.$target_env state:set system.maintenance_mode 1 --input-format=integer
# Execute database updates
drush @$site.$target_env updatedb -y
# Import configuration
drush @$site.$target_env config:import -y
# Clear cache
drush @$site.$target_env cache:rebuild
# Disable maintenance mode
drush @$site.$target_env state:set system.maintenance_mode 0 --input-format=integer
# Cache invalidation via Acquia Purge
drush @$site.$target_env ap:purge-all
echo "Deployment completed successfully"
Performance Optimization
// Acquia optimization settings in settings.php
<?php
// Detect Acquia environment
if (isset($_ENV['AH_SITE_ENVIRONMENT'])) {
// Memcache configuration
$settings['cache']['default'] = 'cache.backend.memcache';
$settings['memcache']['servers'] = ['memcached:11211' => 'default'];
// Redis configuration (if available)
if (extension_loaded('redis')) {
$settings['redis.connection']['interface'] = 'PhpRedis';
$settings['redis.connection']['host'] = 'redis';
$settings['cache']['default'] = 'cache.backend.redis';
}
// Acquia Search configuration
$config['search_api.server.acquia_search_server'] = [
'backend_config' => [
'connector' => 'standard',
'connector_config' => [
'host' => $_ENV['ACQUIA_SEARCH_HOST'],
'core' => $_ENV['ACQUIA_SEARCH_CORE'],
],
],
];
// CDN configuration
$config['acquia_purge.settings']['domains'] = [
$_ENV['AH_SITE_NAME'] . '.prod.acquia-sites.com',
'www.example.com',
];
}
// Performance tuning
$config['system.performance']['cache']['page']['max_age'] = 3600;
$config['system.performance']['css']['preprocess'] = TRUE;
$config['system.performance']['js']['preprocess'] = TRUE;
Site Studio Component Creation
# site_studio/components/hero/hero.yml
name: Hero Component
category: Layout
preview_image: hero.png
fields:
title:
type: text
label: Title
default: "Welcome to our site"
subtitle:
type: textarea
label: Subtitle
background_image:
type: image
label: Background Image
cta_text:
type: text
label: CTA Button Text
cta_link:
type: link
label: CTA Link
{# site_studio/templates/hero.html.twig #}
<section class="hero-component" style="background-image: url('{{ background_image.url }}')">
<div class="hero-content">
<h1>{{ title }}</h1>
{% if subtitle %}
<p class="hero-subtitle">{{ subtitle }}</p>
{% endif %}
{% if cta_text and cta_link %}
<a href="{{ cta_link.url }}" class="btn btn-primary">
{{ cta_text }}
</a>
{% endif %}
</div>
</section>
Security and Compliance
// Custom security module
<?php
namespace Drupal\acquia_security\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class SecurityHeadersSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return [
KernelEvents::REQUEST => ['onRequest', 100],
];
}
public function onRequest(RequestEvent $event) {
$response = $event->getResponse();
if (!$response) {
return;
}
// Add security headers
$response->headers->set('X-Content-Type-Options', 'nosniff');
$response->headers->set('X-Frame-Options', 'SAMEORIGIN');
$response->headers->set('X-XSS-Protection', '1; mode=block');
$response->headers->set('Referrer-Policy', 'strict-origin-when-cross-origin');
// Additional settings for HIPAA compliance
if (getenv('ACQUIA_HIPAA_ENABLED')) {
$response->headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
$response->headers->set('Content-Security-Policy', "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';");
}
}
}