次の方法で共有


クラウド ネイティブ アプリケーション バンドル

ヒント

このコンテンツは、Azure 用のクラウド ネイティブ .NET アプリケーションの設計に関する電子ブックからの抜粋であり、.NET Docs またはオフラインで読み取ることができる無料のダウンロード可能な PDF として入手できます。

Azure eBook 用の Cloud Native .NET アプリの表紙サムネイル。

クラウドネイティブ アプリケーションの主な特性は、クラウドの機能を活用して開発を高速化することです。 この設計は、多くの場合、完全なアプリケーションがさまざまな種類のテクノロジを使用することを意味します。 アプリケーションは Docker コンテナーに出荷される場合があり、一部のサービスでは Azure Functions を使用できますが、他の部分は、ハードウェア GPU アクセラレーションを備えた大規模なメタル サーバーに割り当てられた仮想マシンで直接実行される場合があります。 同じクラウドネイティブ アプリケーションが 2 つないため、それらを出荷するための 1 つのメカニズムを提供することは困難でした。

Docker コンテナーは、デプロイ用の Helm Chart を使用して Kubernetes 上で実行できます。 Azure Functions は、Terraform テンプレートを使用して割り当てられる場合があります。 最後に、仮想マシンは Terraform を使用して割り当てられても、Ansible を使用して構築される場合があります。 これはさまざまなテクノロジであり、それらを一緒に妥当なパッケージにパッケージ化する方法はありませんでした。 今まで。

クラウド ネイティブ アプリケーション バンドル (CNAB) は、Microsoft、Docker、HashiCorp などの多くのコミュニティ志向の企業が、分散アプリケーションをパッケージ化するための仕様を開発するための共同の取り組みです。

この取り組みは 2018 年 12 月に発表されたため、より大きなコミュニティに取り組みを公開するために行う作業はまだかなりあります。 ただし、既にオープン 仕様、Duffle と呼ばれる参照実装があります。 Go で記述されたこのツールは、Docker と Microsoft の共同作業です。

CNABs には、さまざまな種類のインストール技術を含めることができます。 この側面により、Helm Chart、Terraform テンプレート、Ansible プレイブックなどを同じパッケージに共存させることができます。 ビルド後、パッケージは自己完結型で移植可能になります。USBスティックから取り付けることができます。 パッケージは、要求したパーティーから送信されるように暗号で署名されます。

CNAB のコアは、 bundle.jsonと呼ばれるファイルです。 このファイルは、Terraform やイメージなど、バンドルの内容を定義します。 図 11-9 では、一部の Terraform を呼び出す CNAB が定義されています。 ただし、Terraform の呼び出しに使用される呼び出しイメージが実際に定義されていることに注意してください。 パッケージ化すると、 cnab ディレクトリにある Docker ファイルが Docker イメージに組み込まれ、バンドルに含まれます。 バンドル内の Docker コンテナー内に Terraform がインストールされているということは、バンドルを実行するためにユーザーがコンピューターに Terraform をインストールする必要がないことを意味します。

{
    "name": "terraform",
    "version": "0.1.0",
    "schemaVersion": "v1.0.0-WD",
    "parameters": {
        "backend": {
            "type": "boolean",
            "defaultValue": false,
            "destination": {
                "env": "TF_VAR_backend"
            }
        }
    },
    "invocationImages": [
        {
        "imageType": "docker",
        "image": "cnab/terraform:latest"
        }
    ],
    "credentials": {
        "tenant_id": {
            "env": "TF_VAR_tenant_id"
        },
        "client_id": {
            "env": "TF_VAR_client_id"
        },
        "client_secret": {
            "env": "TF_VAR_client_secret"
        },
        "subscription_id": {
            "env": "TF_VAR_subscription_id"
        },
        "ssh_authorized_key": {
            "env": "TF_VAR_ssh_authorized_key"
        }
    },
    "actions": {
        "status": {
            "modifies": true
        }
    }
}

図 10-18 - Terraform ファイルの例

bundle.jsonでは、Terraform に渡されるパラメーターのセットも定義されます。 バンドルのパラメーター化により、さまざまな環境でのインストールが可能になります。

CNAB 形式も柔軟であり、任意のクラウドに対して使用できます。 OpenStack などのオンプレミス ソリューションに対しても使用できます。

DevOps の判断

DevOps 空間には、最近では非常に多くの優れたツールがあり、成功する方法に関するさらに素晴らしい書籍や論文があります。 DevOps の取り組みを始めるのに好きな本は、NoOps から DevOps への架空の会社の変革に続く Phoenix プロジェクトです。 1 つの点は確かです。DevOps は、複雑なクラウド ネイティブ アプリケーションをデプロイする際に、もはや "持って良い" ことではありません。 これは要件であり、プロジェクトの開始時に計画し、リソースを提供する必要があります。

リファレンス