INTEGRITY Документация

AWS RDS и Aurora

В этом примере показано, как подключить Hyperdrive к инстансу базы данных Amazon Relational Database Service (Amazon RDS) или Amazon Aurora MySQL.

1. Разрешите доступ к Hyperdrive

Чтобы Hyperdrive мог подключаться к вашей базе данных, убедитесь, что у него есть действительные учётные данные пользователя и сетевой доступ.

AWS Console

При создании или изменении инстанса в консоли AWS:

  1. Настройте кластер базы данных и другие параметры, которые вы хотите настроить.
  2. В разделе Настройки > Credential settings, запишите Главное имя пользователя и Главный пароль (только Aurora).
  3. В разделе Подключение заголовок, убедитесь, что Публичный доступ имеет значение Да.
  4. Выберите Существующая группа безопасности VPC который разрешает публичный доступ из интернета с 0.0.0.0/0 на порт, который прослушивает ваш экземпляр базы данных (по умолчанию: 3306 для инстансов MySQL).
  5. Выберите Create database.

Получите конечную точку базы данных (Aurora)

Чтобы получить конечную точку базы данных (имя хоста), к которой будет подключаться Hyperdrive:

  1. Перейдите в Базы данных представление в разделе RDS в консоли AWS.
  2. Выберите базу данных, к которой должен подключаться Hyperdrive.
  3. В разделе Конечные точки заголовок и запишите Имя конечной точки типом Writer и Порт.

Получите конечную точку базы данных (RDS MySQL)

Для обычных экземпляров RDS (не Aurora) необходимо получить конечную точку и порт базы данных:

  1. Перейдите в Базы данных представление в разделе RDS в консоли AWS.
  2. Выберите базу данных, к которой должен подключаться Hyperdrive.
  3. В разделе Подключение и безопасность заголовок и запишите Конечная точка и Порт.

Конечная точка будет выглядеть примерно так: YOUR_DATABASE_NAME.cpuo5rlli58m.AWS_REGION.rds.amazonaws.com, а порт по умолчанию будет 3306.

2. Создание пользователя

После создания базы данных необходимо создать пользователя, от имени которого будет подключаться Hyperdrive. Хотя вы можете использовать Главное имя пользователя настроенного при первоначальном создании базы данных, рекомендуется создать пользователя с ограниченными правами.

Чтобы создать нового пользователя, войдите в базу данных и используйте CREATE USER команда:

# Log in to the database
mysql -h ENDPOINT_NAME -P PORT -u MASTER_USERNAME -p database_name

Выполните следующие SQL-инструкции:

-- Create a role for Hyperdrive
CREATE ROLE hyperdrive;

-- Allow Hyperdrive to connect
GRANT USAGE ON mysql_db.* TO hyperdrive;

-- Grant database privileges to the hyperdrive role
GRANT ALL PRIVILEGES ON mysql_db.* to hyperdrive;

-- Create a specific user for Hyperdrive to log in as
CREATE USER 'hyperdrive_user'@'%' IDENTIFIED WITH caching_sha2_password BY 'sufficientlyRandomPassword';

-- Grant this new user the hyperdrive role privileges
GRANT hyperdrive to 'hyperdrive_user'@'%';

Ознакомьтесь с документацией AWS документация о ролях пользователей в MySQL ↗ для дополнительных сведений.

Указав пользователя базы данных, пароль, конечную точку базы данных (имя хоста и порт) и имя базы данных, теперь можно настроить Hyperdrive.

3. Создание конфигурации базы данных

Чтобы настроить Hyperdrive, вам потребуется:

Hyperdrive принимает комбинацию этих параметров в стандартном формате строки подключения, который используется драйверами баз данных:

mysql://USERNAME:PASSWORD@HOSTNAME_OR_IP_ADDRESS:PORT/database_name

Большинство провайдеров баз данных предоставляют строку подключения, которую можно скопировать и вставить прямо в Hyperdrive.

Чтобы создать конфигурацию Hyperdrive с помощью Wrangler CLI, откройте терминал и выполните следующую команду.

npx wrangler hyperdrive create <NAME_OF_HYPERDRIVE_CONFIG> --connection-string="mysql://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name"

Эта команда выводит привязку для конфигурационный файл Wrangler:

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "hyperdrive-example",
	"main": "src/index.ts",
	// Set this to today's date
	"compatibility_date": "2026-08-28",
	"compatibility_flags": [
		"nodejs_compat"
	],
	// Pasted from the output of `wrangler hyperdrive create <NAME_OF_HYPERDRIVE_CONFIG> --connection-string=[...]` above.
	"hyperdrive": [
		{
			"binding": "HYPERDRIVE",
			"id": "<ID OF THE CREATED HYPERDRIVE CONFIGURATION>"
		}
	]
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "hyperdrive-example"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-08-28"
compatibility_flags = [ "nodejs_compat" ]

[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<ID OF THE CREATED HYPERDRIVE CONFIGURATION>"

3. Использование Hyperdrive в вашем Worker

Установите mysql2 ↗ драйвер:

npm i mysql2@>3.13.0

Добавьте необходимые флаги совместимости Node.js и привязку Hyperdrive в свой wrangler.jsonc файле:

{
	// required for database drivers to function
	"compatibility_flags": [
		"nodejs_compat"
	],
	// Set this to today's date
	"compatibility_date": "2026-08-28",
	"hyperdrive": [
		{
			"binding": "HYPERDRIVE",
			"id": "<your-hyperdrive-id-here>"
		}
	]
}
compatibility_flags = [ "nodejs_compat" ]
# Set this to today's date
compatibility_date = "2026-08-28"

[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<your-hyperdrive-id-here>"

Создайте новый connection экземпляр и передайте параметры Hyperdrive:

// mysql2 v3.13.0 or later is required
import { createConnection } from "mysql2/promise";

export default {
	async fetch(request, env, ctx): Promise<Response> {
		// Create a new connection on each request. Hyperdrive maintains the underlying
		// database connection pool, so creating a new connection is fast.
		const connection = await createConnection({
			host: env.HYPERDRIVE.host,
			user: env.HYPERDRIVE.user,
			password: env.HYPERDRIVE.password,
			database: env.HYPERDRIVE.database,
			port: env.HYPERDRIVE.port,

			// Required to enable mysql2 compatibility for Workers
			disableEval: true,
		});

		try {
			// Sample query
			const [results, fields] = await connection.query("SHOW tables;");

			// Return result rows as JSON
			return Response.json({ results, fields });
		} catch (e) {
			console.error(e);
			return Response.json(
				{ error: e instanceof Error ? e.message : e },
				{ status: 500 },
			);
		}
	},
} satisfies ExportedHandler<Env>;

Следующие шаги