サイオステクノロジーの池田 透です。
今回は弊社で開発中の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の領域
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によるご意見・ご質問も歓迎です。
最後までお読みいただきありがとうございます。ぜひ、今後の動向にご注目ください!