デプロイをコード化する新ツールDacraneを開発します!

サイオステクノロジーの池田 透です。

今回は弊社で開発中の1からアプリケーションを動かすためのデプロイメントツールDacraneを紹介します。

Dacraneとは

Dacraneとはサイオステクノロジーで開発中のOSSのデプロイメントツールです。アプリケーションを0から動く状態までデプロイすることに着目しています。2023年8月末から開発を開始したばかりの非常に新しいOSSです。

弊社ではクラウドを中心とした開発案件を数多く手掛けており、クラウドリソースからアプリケーションまでの一式を開発することも多数ありました。そのような状況のなかで、その知見を生かしたツールを開発できるのではないかという発想から誕生しました。

Dacraneは超開発初期段階であり、今年の年末を目処に特定のモデルケースに対して動作する試作版を開発しています。

Deployment as Code (DaC)

アプリケーションも含めたデプロイメントを宣言的に管理したいというモチベーションからできたツールがDacraneです。この「デプロイメントを宣言的に管理する」という概念をDeployment as Code (DaC)と呼んでいます。

通常、開発者はインフラ、OS、ミドルウェア、アプリの各レイヤーに対し、複数のCLI、GUI、構成ファイルを利用して、それぞれの一貫性を正確に保ちながらデプロイを実施する必要があります。

DaCの目的はこのようなデプロイメントをコードによって管理し、コード化されたデプロイメントの実行を自動化し、デプロイメントのコストの削減と運用ミスといったヒューマンエラーを削減することにあります。そのため、DaCはDevOpsや、アジャイル開発、マイクロサービスアーキテクチャなど継続的で高速な開発サイクルをもつプロジェクトと親和性が高いといえます。

似たような概念にInfrastructure as Code (IaC) というものがあります。IaCがインフラストラクチャーをコード化することに着目しているのに対して、DaCはインフラストラクチャーからアプリケーションのビルドと配備をして、アプリケーションを動かすというところまでターゲットにしています(下図)。そういう意味でIaCを拡張した広い概念であると言えます。

DacraneはこのDaCを実現するツールです。

DaC positioning

図: Dacの領域

Dacraneのコンセプト

Dacraneには5つのコンセプトがあります。

  • 一貫したデプロイメント
  • シンプルなデプロイメントコード
  • マイクロサービスアーキテクチャサポート
  • プラグイン拡張
  • 環境再現性

一貫したデプロイメント

インフラストラクチャーからアプリケーションまで全てのデプロイメント機能を提供します。全てのデプロイメントは一貫してコードで管理されます。

シンプルなデプロイメントコード

デプロイメントコードはシンプルな構造で、抽象化やモジュール化により少ない記述で定義することができます。また、テンプレート機能によって0からコードを記述する必要なく、手早くコードを書き始めることができます。

マイクロサービスアーキテクチャサポート

複数のリポジトリから複数のアプリケーションをデプロイできます。複数のデプロイメントコードを統合して使うことができます。

プラグイン拡張

プラガブルな設計により新しいインフラストラクチャーやアプリケーションを簡単に導入することができます。多くのプラグインが開発されるようにオープンな開発を促進していきます。

別環境へのデプロイ

環境を簡単に別環境にデプロイすることができます。例えば、1つのコンテナイメージをAzure App Servicesにデプロイしたり、ローカルPCのDocker for Desktopにデプロイすることができます。

Dacraneの利用イメージ

Dacraneの利用のイメージを説明します。実装予定であって、まだ実装されていませんので注意ください。

まずはYAML形式のdacrane.yamlファイルにデプロイメントコードを書き下します。例えば、次のようなイメージです。

# コンテナイメージ定義
kind: artifact
name: api
provider: docker
parameters:
  image: sample-api
  tag: latest
  dockerfile: ./Dockerfile
credentials:
  url: $REPOSITORY_URL
  user: $REPOSITORY_USER
  password: $REPOSITORY_PASSWORD

---

# API用のAzure App Servicesの定義
kind: resource
name: as
provider: azure-app-service
parameters:
  name: sample-as
  resource_group_name: sample-rg
  location: "Japan East"
  app_service_plan_id: sample-asp
  site_config:
    linux_fx_version: DOCKER|${REPOSITORY_URL}/sample-api:latest
  app_settings:
    DOCKER_REGISTRY_SERVER_URL: $REPOSITORY_URL
    DOCKER_REGISTRY_SERVER_USERNAME: $REPOSITORY_USER
    DOCKER_REGISTRY_SERVER_PASSWORD: $REPOSITORY_PASSWORD
    WEBSITES_PORT: "3000"
credentials:
  subscription_id: $AZURE_SUBSCRIPTION_ID
  tenant_id: $AZURE_TENANT_ID
  client_id: $AZURE_CLIENT_ID
  username: $AZURE_USERNANE
  password: $AZURE_PASSWORD

次にdacrane upコマンドでデプロイを実行します。これで実行まですることができます。

$ dacrane up

必要がなくなったら破棄します。

$ dacrane down

運用のため細やかな変更のため、例えば次のようなコマンドも提供します。

$ dacrane publish api -t v1.0.0    # api artifactをビルドしてACRにプッシュする
$ dacrane unpublish api -t v1.0.0  # api artifactにプッシュしたコンテナイメージを取り下げる
$ dacrane deploy as                # Azure App Serivcesをデプロイまたは更新する 
$ dacrane destroy as               # Azure App Servicesをデストロイする

現在は上記のような基礎的なコード化を中心に開発していますが、今後はシンプルなコードを目指して、抽象化やモジュール機能の追加をする予定で、コードやコマンドの見た目は大きく変わる予定です

リポジトリにもdacrane.yamlサンプルコードを公開しています。変更に合わせて随時更新していきます。

StarやIssueで応援ください!

Dacraneは始まったばかりのOSSです。今後、鋭意開発を進めてまいります。

この記事を読んでツールに興味を持っていただいたか方は、ぜひGitHubのStarをしていただけると今後の開発の励みになります!Issueによるご意見・ご質問も歓迎です。

最後までお読みいただきありがとうございます。ぜひ、今後の動向にご注目ください!

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

4人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です