AivenとQoveryによるエンド・ツー・エンドのマネージド開発パイプライン

<font color="Grey">*[End to end managed development pipelines with Aiven and Qovery](https://aiven.io/blog/end-to-end-managed-development-pipelines-with-aiven-and-qovery)の翻訳です。*</font>

2023年3月30日

# AivenとQoveryによるエンド・ツー・エンドのマネージド開発パイプライン

AivenとQoveryを使って、再現性のあるセキュアな方法で環境をデプロイしましょう！

こんにちは！[Qovery](https://www.qovery.com/)のRomaricです。AivenのSébastien Blancと共同執筆したこの記事をお届けできることを嬉しく思います。この記事では、Aiven for PostgreSQL®とQoveryがどのように連携し、AWS上でのアプリ開発とデプロイを効率化するかをご紹介します。しかし、詳細に入る前に、AivenとQoveryを別々に詳しく見てみましょう。


## Aiven x Qovery


AivenとQoveryは2つの強力なツールで、併用することでモダンなアプリケーション開発に最適なソリューションを提供します。Aivenは、[PostgreSQL®](https://aiven.io/postgresql)、[Redis®](https://aiven.io/redis)、[Apache Kafka®](https://aiven.io/kafka)のようなオープンソースのデータインフラをシンプルかつ迅速に立ち上げる方法を提供し、Qoveryは、開発者がアプリケーションを簡単にデプロイ、管理、拡張できるプラットフォームを提供します。


最新のアプリケーションを開発するには、高速で信頼性が高く、管理が容易なデータベースが重要です。そこでAiven for PostgreSQL®の登場です。Aivenは、完全に管理され、数分でセットアップと設定が可能なクラウドベースのデータベースサービスを提供します。Aivenを利用することで、高可用性、データ安全性、データセキュリティを確保しながら、お客様のニーズに合わせて拡張できるように設計されたフルマネージドPostgreSQLデータベースをご利用いただけます。


一方、Qoveryは、開発者がアプリケーションをデプロイおよび管理するための最新のプラットフォームを提供します。Qovery を使用すれば、開発者は複数の環境を簡単に作成し、本番環境へのデプロイ前にアプリケーションのテストやプレビューを行うことができます。またQoveryでは、Aiven for PostgreSQLのような外部サービスをアプリケーションに簡単に統合できます。


AivenとQoveryを組み合わせることで、最新のアプリケーション開発のための強力なソリューションが実現します。開発者はAiven for PostgreSQLインスタンスを簡単に立ち上げ、Qoveryアプリケーションと統合することができます。AivenとQoveryがあれば、開発者は基盤となるインフラを気にすることなく、優れたアプリケーションの構築に専念できます。


AivenとQoveryの利点について説明しましたが、アプリ開発プロセスをさらに効率化するために両者がどのように連携しているのか、詳しく見ていきましょう。


## AivenとQoveryの連携方法


AivenとQoveryの統合を実証するために、Javaで書かれたサンプル・アプリケーションを使用します。アプリケーションはシンプルなToDoリストで、QoveryとAiven for PostgreSQL®をバックエンドデータベースとしてAWS上にデプロイします。


すでにQoveryとAivenにある程度慣れていることを前提に話を進めますが、もし使い始めるのに助けが必要であれば、QoveryとAivenのドキュメントをぜひご覧ください。


使い始めるには、AivenとQoveryの両方のアカウントが必要です。Aivenアカウントをお持ちでない場合は、無料トライアルにご登録ください。Qoveryにも素晴らしい無料プランがあります。


AivenとQoveryを統合するには、Qoveryのライフサイクル・ジョブ機能を使います。ライフサイクルジョブとは、デプロイ前やシャットダウン後など、環境のライフサイクルの特定の時点で実行されるスクリプトです。ライフサイクルジョブを使用すると、Aiven Postgresインスタンスを自動的に作成および設定し、アプリケーションの起動時に使用できるようにすることができます。


![Qoveryがアプリの環境を管理していることを示す図。アプリはAWS上でホストされている](https://cdn.sanity.io/images/sczeoy4w/production/f4df061c355c6ccde035f3aa79e4b828fa21134a-3840x2160.png?q=80&fit=min&auto=format&dpr=1.5)


上の図では、3つの主要コンポーネントがあります：Qovery、Aiven、そしてAWSアカウントだ。Qoveryは、コンテナ化されたアプリを別のホスティング・プラットフォーム上ではなく、AWSアカウント上にデプロイすることが重要です（AWSアカウントの作成方法をお読みください）。一方、Aivenは提供するPostgreSQLインスタンスのデプロイと管理に独自のAWSアカウントを使用します。


Qovery環境では、2つのサービスを定義します。Aiven for PostgreSQLインスタンスはTerraformスクリプトで、ToDoアプリはDockerファイルで定義します。これらのサービスはどちらもGitHubリポジトリから提供され、Qoveryはそれらを正しい順序でビルドして実行することができます。Aiven for PostgreSQLサービスが最初にデプロイされ、次にToDoアプリサービスがデプロイされます。


Qoveryのウェブ・インターフェイスからはこのように見える：


![Qoveryウェブ・インターフェースのスクリーンショット](https://cdn.sanity.io/images/sczeoy4w/production/3301bf9e3bc0f0a4924fc9d73ea23e490ef6a753-1976x1280.png?q=80&fit=min&auto=format&dpr=1.5)


これが私たちの[Terraformスクリプト](https://github.com/evoxmusic/aiven-qovery-lifecycle/blob/main/main.tf)です：



```
#main.tf

terraform {
  required_providers {
    aiven = {
      source  = "aiven/aiven"
      version = "~> 3.9.0"
    }
  }

  backend "s3" {}
}

provider "aiven" {
  api_token = var.aiven_api_token
}

resource "aiven_pg" "pg_instance" {
  project                 = var.aiven_project_name
  cloud_name              = "aws-us-east-2"
  plan                    = "startup-4"
  # make the service name unique by adding a suffix based on the first digit of the Qovery environment ID
  service_name            = "pg-${split("-", var.qovery_environment_id)[0]}"
  maintenance_window_dow  = "monday"
  maintenance_window_time = "10:00:00"
}

resource "aiven_pg_database" "pg_database" {
  database_name = var.aiven_database_name
  project       = var.aiven_project_name
  service_name  = aiven_pg.pg_instance.service_name
} 
```

これは[Aiven Provider](https://registry.terraform.io/providers/aiven/aiven/latest/docs)モジュールを使ったバニラTerraformスクリプトで、なかなか素敵で簡単に使えることがわかると思います。


この時点で、どうやってToDoアプリをAiven for PostgreSQLに接続するのか疑問に思うかもしれません。Terraformに詳しい方なら、マニフェストの実行後にしかわからない変数があることをご存知でしょう。QoveryはTerraformの出力値をすぐにサポートします。


以下は私たちの[outputs](https://github.com/evoxmusic/aiven-qovery-lifecycle/blob/main/outputs.tf)です：



```
output "postgres_host" {
  description = "The Aiven PG connection host"
  value       = aiven_pg.pg_instance.service_host
}

output "postgres_port" {
  description = "The Aiven PG connection port"
  value       = tostring(aiven_pg.pg_instance.service_port)
}

output "postgres_user" {
  description = "The Aiven PG username"
  value       = aiven_pg.pg_instance.service_username
}

output "postgres_db_name" {
  description = "The Aiven PG database name"
  value       = aiven_pg_database.pg_database.database_name
}

output "postgres_password" {
  description = "The Aiven PG password"
  value       = aiven_pg.pg_instance.service_password
  sensitive   = true
}
```

Qoveryは、これらの値を環境変数としてToDoアプリケーションに注入することができます。


![Qoveryによって管理される新しいセットアップを示す図](https://cdn.sanity.io/images/sczeoy4w/production/2cde657dede080bd448c0faec22ad437d5a7c416-3840x2160.png?q=80&fit=min&auto=format&dpr=1.5)


魔法はない！シンプルに機能し、素晴らしい。


![マネージド・サービスを表示するQoveryのアップデートされたUIのスクリーンショット](https://cdn.sanity.io/images/sczeoy4w/production/fc82752e4aa198cf51cb44952657d5ef7e954d85-1874x1212.png?q=80&fit=min&auto=format&dpr=1.5)


Aivenのウェブ・コンソールを見ると、PostgreSQLデータベースも正常に稼働していることがわかる。


![PostgreSQLインスタンスが稼働しているAivenのコンソールのスクリーンショット](https://cdn.sanity.io/images/sczeoy4w/production/42fcd5de2726379ffc475479043c7ecd477a348b-1872x1210.png?q=80&fit=min&auto=format&dpr=1.5)


## AivenとQoveryによる複数環境


Qoveryを使えば、複数の環境を簡単に作成でき、ステージング環境の共有で発生する問題を回避できます。従来の開発環境では、開発者は1つのステージング環境を共有しなければならないかもしれません。環境が壊れたり利用できなくなったりすると、すべての開発者に影響し、開発プロセス全体が遅くなります。


![ステージングが壊れると、すべての開発者が自分の仕事にアクセスできなくなることを示す図](https://cdn.sanity.io/images/sczeoy4w/production/8748d27da079019cf74a8372aa06f7b9eb5447ba-1870x936.png?q=80&fit=min&auto=format&dpr=1.5)


Qoveryは、複数のオンデマンド・ステージング環境を作成する効率的な方法を提供することで、この問題を解決します。各開発者は、本番環境のレプリカである独自のステージング環境を持つことができます。これにより開発者は、分離された安全な環境でコードをテストすることができます。


![Qoveryが開発者ごとにステージング環境をスピンアップし、チーム内のすべての開発者をブロックしない方法を示す図](https://cdn.sanity.io/images/sczeoy4w/production/8b80b73efd5be62a2956d68641d78de4ead52a04-1868x972.png?q=80&fit=min&auto=format&dpr=1.5)


Qoveryのパワーはこれだけにとどまりません。環境のクローンを作成すると、その環境に含まれるすべてのサービスが複製されます。つまり、Aiven for PostgreSQLインスタンスも複製され、元のインスタンスのすべてのデータが複製されたインスタンスで利用できます。これにより、クローン化された環境は元の環境と同じデータを持ち、本番環境に影響を与えることなく変更を簡単にテストできます。  

データについてはどうでしょうか？必要に応じてデータをクローンすることができます。Aivenはそれを簡単に行うために必要なすべてを提供します。


## 結論


この記事では、Aiven と Qovery を組み合わせて使用することで、開発ワークフローを高速化し、プレビュー環境の作成を容易にする利点について説明しました。Qovery のライフサイクル・ジョブと複数環境を活用することで、開発者は開発サイクルをスピードアップし、従来のステージング・スターベーションの問題を解消する合理化されたエクスペリエンスを享受することができます。


さらに、Aiven for PostgreSQLとQoveryの統合の容易さは、真に堅牢で効率的な開発環境を構築するためのクラス最高のソリューションの組み合わせの威力を示しています。また、これまで見てきたように、この組み合わせは驚くほど柔軟で、個々のチームのユニークなニーズに合わせて適応させることができます。


この記事が、AivenとQoveryの連携について有益な概要を提供できたことを願っています。私たちは、Sebastien氏とAivenチームとのコラボレーションを継続し、[Apache Kafka](https://aiven.io/kafka)との統合など、他のユースケースを探求していきたいと考えています。


次回のコラボレーションにご期待ください！


## 続きを読む


* [この記事のGitHubリポジトリ](https://github.com/evoxmusic/aiven-qovery-lifecycle)
* [TODOアプリのGitHubリポジトリ](https://github.com/evoxmusic/todo-demo-app)