はじめに
本資料とツール群を使って、クラウドの要件定義をはじめましょう!
この文書は、 The Apache License, Version 2.0 のもとで公開されます。
本書の各キーワード「せねばならない」、「してはならない」、「必要」、 「する/することになる」、「することはない」、「すべき」、「すべきでない」、「推奨される」、「してもよい/構わない/可能性がある」、「オプション」は、RFC 2119に準じて解釈されるものとします。
紹介
クラウドデザイン仕様 (the "CDS") はJSON/YAMLコードにより、人間とコンピュータの双方が理解できるよう、クラウドの利用要件を定義します。
本ドキュメントにおいて、CDSという呼称は言語仕様そのものの名称であると同時に、同仕様に基づいて記述された設計コードを示します。以前は後者をCloud Design Definition(the
"CDD")として明確に区別しましたが、混乱を避けるためCDSに統一されました。よってツールや周辺ドキュメントの一部にCDDの記述が存在しますが、CDSと同義とお考えいただいて問題ありません。
既存のプロビジョニングコードの拡張
CDSはCloudFormationなど既存のプロビジョニングコードを拡張する要件定義コードです。クラウドの利用者やアクセスボリュームといったシステム要件を独自の仕様で記述し、クラウドリソースの定義は既存のプロビジョニングコードへの参照によって表現します。同構造により、デベロッパーの学習コストを抑え、既存コード資産の活用を促します。
CDSが含むことのできるプロビジョニングコードの種類については、Resource objectをご参照下さい。
ツール
様々なツールを用いて、クラウドの設計を作成、保管、検索、再利用することができます。
Cloud Design Schema 日本語
サードパーティー製エディタ等に組み込むことで、CDSの文法チェックに利用できるJSONスキーマファイルです。
ForkMe!
Reindeer Technology
PTE.LTD.が提供する、クラウド設計管理ツールです。「クラウドの設計を、ソフトウェアのようにフォーク(複製/派生)したい」というデベロッパーの願いをかなえます。(Reindeer ProjectはReindeer
Technology PTE.LTD.に発展的に法人化されました。)
Reindeer Editor
Reindeer Projectがサポートする、ドキュメント生成ツールです。CDSを編集し、クラウド
の利用に関するレポートを表示することができます。
概要
Cloud Designの概要を記載します。
バージョン
CDSはSemantic Versioning 2.0.0
(SemVer)を利用してバージョン管理され、
以下の仕様に従います。
バージョンナンバーはメジャー番号.マイナー番号.パッチ番号
の形でインクリメンタルに増加します。
メジャー番号.マイナー番号
は1つ以上の機能セットを指定することになります。そして.パッチ番号
は
後方互換性のあるバグ修正を指定することになります。
よって、パッチバージョンはツールの利用において考慮されるべきではありません。例えば1.0.0と1.0.1の間で、機能またはツールの区別はすべきではありません。
形式
CDSはJSONオブジェクトです。JSONまたはYAMLフォーマットの両方を用いて表現することができます。 YAMLとJSONフォーマットの互換性を維持するため、YAML利用時は以下いくつかの追加の制約に沿った上で、バージョン 1.2 の利用を推奨します。
- タグはJSON Schema rulesetで許可されているものに 限定する必要があります。
- YAMLのmapで仕様されるキーは、YAML Failsafe schema rulesetで 定義されているように、スカラー文字列に制限されなければなりません。
仕様内のすべてのフィールド名は、大文字と小文字が区別されます。これには、 map型のキーとして仕様されるすべてのフィールドが含まれます。ただし、キーが大文字と小文字を区別しないと明示されている場合を除きます。
構造
CDSは単一のドキュメントで構成されるか、ユーザーの判断で複数のパーツに分割しても構いません。
ただし後者の場合でも、親(ルート)となるCDSは必ずすべての必須親スキーマを内包する必要があります。
またパーツとして参照されるファイルは「CDSスニペット」と呼ばれ、Componentsオブジェクトだけを内包するようにします。
そしてルートファイルからCDSスニペットに対する参照を$ref
フィールドで関連づけされねばなりません。
なお、ルートファイルはclouddesign.json」または「clouddesign.yaml」と命名されるべきです。
親スキーマ
Cloud Designの主要なデータ構造を説明します。 以下の説明では、フィールドが明示的に「必須」と定義されない、または「しなければならない」または「する/することになる」と記載されていない場合、オプションと見なすことができます。
Cloud Design Object
これはCDSのルートオブジェクトです。
固定フィールド
フィールド名
種類
説明
reindeer
string
必須.
この文字列はCDS自体のsemantic version numberでなければなりません。
reindeer
フィールドは、CDSを解釈するためのツールに使用されるべきです。 これはinfo.versionフィールドとは関係ありません。
ForkMe!では「1.3.2」をご指定ください。
self
string
必須.
この文字列はCDSのファイル名です。
拡張子は.json
, .yaml
または .yml
でなければなりません。
self
フィールドは、CDSを解釈するためのツールに使用されるべきです。
ForkMe!では「cloudDesign.json」をご指定ください。
actors
[ Actor object |
string
, Reference object]
必須. アクターオブジェクトの配列です。クラウドに接続する/される外部ユーザーまたはシステムに関する情報を提供します。
resources
Map[ string
, Resource object ]
必須. クラウドの構造を記述する外部ドキュメント(プロビジョニングコードが記載されたファイル)への参照を示す、リソースオブジェクトの配列です。
.contexts
Map[ string
, Context object | string
, Reference object]
必須. コンテキストオブジェクトの配列です。アクターとクラウドリソースの間で、 特定の目的を達成するための関連性についての情報を提供します。
components
CDSのさまざまな側面に対応する一連の再利用可能な オブジェクトを保持します。 コンポーネントオブジェクト内で定義されたすべてのオブジェクトは、 それらがコンポーネントオブジェクトの外部のプロパティから 明示的に参照されない限り、クラウドの設計には影響しません。
JSON example
{
"reindeer": "1.3.2",
"self": "cloudDesign.json"
"info": {
"title": {
"en": "Sample system",
"ja": "サンプルシステム",
},
以下Infoスキーマ参照
},
"actors": {
"customer": {
"title": {
"en": "Customers",
"ja": "顧客",
},
以下Actorスキーマ参照
}
},
"resources": [
{
"$ref":"awsTemplate.json",
以下Resourcesスキーマ参照
}
],
"contexts": {
"customerWebAccess": {
"title": {
"en": "Web access by customer",
"ja": "顧客によるウェブアクセス",
},
以下Contextsスキーマ参照
}
},
"components": {
"actors": {
"operator": {
"title": {
"en": "Operator",
"ja": "運用者",
},
以下Actorスキーマ参照
}
},
以下Componentsスキーマ参照
(Componentsは定義の再利用に便利なオプションスキーマです)
}
Info object
このオブジェクトはCDSに関するメタデータを提供します。 他の人がCDSを簡単に検索、発見できるよう、メタデータは適切に記入されるべきです。
固定フィールド
フィールド名
種類
説明
title
Map[ string
, string
]
必須. このクラウドの設計を適用するサービスの名称です。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
description
Map[ string
, string
]
必須. このクラウドの設計を適用するサービスの説明です。 それはシステムの目的と機能のすべてのキーワードを含む簡潔なメモであるべきです。 このテキストは外部ツールによる検索インデックスとして使われる可能性があります。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
status
string
必須. CDSの状態です。
以下の値が利用できます。
draft:
ドラフト
prepared:
準備済
designed:
設計済
reviewed:
レビュー済
designedAt
integer
必須. CDSが作成された日時です。UNIXタイムスタンプ形式を利用する必要があります。
authors
Map[ string
, string
, Author object ]
必須. CDSの作成者です。 この情報は外部ツールによって利用される可能性があり、関係者のスキルや経験を証明する重要な情報となります。
organizations
Map[ string
, string
, Organization object ]
CDS作成に関与する組織です。 この情報は外部ツールによって利用される可能性があり、組織のスキルや経験を証明する重要な情報となります。
JSON example
{
"version": "1.0.0",
"license": {
"type": "CC0"
},
"title": {
"en": "Sample system",
"ja": "サンプルシステム",
"ru": "Образец системы"
},
"description": {
"en": "Sample description",
"ja": "説明サンプル",
"ru": "Пример описания"
},
"status": "draft",
"designedAt": "1548731447",
"authors": {
"sampleHandleNameA": {
"roles": ["designer"],
"joinedAt": 1548730447,
"leavedAt": 1548731447,
"sign": xxxxxx123
},
"sampleHandleNameB": {
"roles": ["designer", "auditor"],
"joinedAt": 1548730447
}
},
"organizations": {
"sampleCompanyA": {
"joinedAt": 1548730447,
"leavedAt": 1548731447
},
"sampleCompanyB": {
"joinedAt": 1548730447,
"sign": xxxxxx123
}
}
}
YAML example
version: 1.0.0
license:
type: CC0
title:
en: Sample system
ja: サンプルシステム
ru: Образец системы
description:
en: Sample description
ja: 説明サンプル
ru: Пример описания
status: draft
designedAt: 1548731447
authors:
sampleHandleNameA:
roles:
- designer
joinedAt: 1548730447
leavedAt: 1548731447
sampleHandleNameB:
roles:
- designer
- auditor
sign: xxxxxxx123
joinedAt: 1548730447
organizations:
sampleHandleNameA:
joinedAt: 1548730447
leavedAt: 1548731447
sign: xxxxxxx123
sampleHandleNameB:
joinedAt: 1548730447
Actor objects
クラウドにアクセスするユーザーや運用者、外部システムに関する情報を提供するオブジェクトです。 CDSを正しく設計、監査するため、包括的に表現されるべきです。
マーケットタイプのアクターオブジェクト
このオブジェクトは特定のマーケットに属する消費者、観客など、不特定多数の利用者に関する情報を提供します。 システム提供対象となるユーザ数やリクエスト数を把握するため、正しい数値を提供すべきです。
固定フィールド
フィールド名
種別
説明
type
string
必須. 固定値: 'market
'.
title
Map[ string
, string
]
必須. アクターの名称です。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
description
Map[ string
, string
]
必須. アクターの説明です。 このテキストは外部ツールによる検索インデックスとして使われる可能性があります。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
marketShare
float
必須. 市場シェアを示します。
例えば 0.3
は 30% を意味します。
sourceIdentification
[ boolean
]
必須.
特定のIPアドレス範囲やドメイン名などで識別できるかどうかを意味します。
trueの場合、identificationGroup
フィールドは必須です。
identificationGroup
string
IPアドレス範囲やドメイン名など。
sourceIdentification
フィールドがtrueの場合は必須です。そして、sourceIdentification
がfalseの場合、指定してはいけません。
JSON Example
{
"type": "market",
"title": {
"en": "Customers",
"ja": "顧客",
"ru": "Клиенты"
},
"description": {
"en": "Users of our products.",
"ja": "当社製品の利用ユーザー",
"ru": "Пользователи нашей продукции."
},
"market": {
"title": {
"en": "65 years and over in U.S., July 2018",
"ja": "65才以上の人口 米国 2018年7月",
"ru": "65 лет и старше в США, июль 2018 года"
},
"description": {
"en": "General population data of U.S. at 2018 by govermental research.",
"ja": "米国政府による2018年の人口統計",
"ru": "Данные об общей численности населения США на 2018\nгод по данным государственных исследований."
},
"num": 51038120,
"estimatedBy": "U.S. Census Bureau",
"estimatedAt": 1530370800
},
"marketShare": 0.01,
"sourceIdentification": false
}
YAML Example
type: market
title:
en: Customers
ja: 顧客
ru: Клиенты
description:
en: Users of our products.
ja: 当社製品の利用ユーザー
ru: Пользователи нашей продукции.
market:
title:
en: 65 years and over in U.S., July 2018
ja: 65才以上の人口 米国 2018年7月
ru: 65 лет и старше в США, июль 2018 года
description:
en: General population data of U.S. at 2018 by govermental research.
ja: 米国政府による2018年の人口統計
ru: |
Данные об общей численности населения США на 2018
год по данным государственных исследований.
num: 51038120
estimatedBy: U.S. Census Bureau
estimatedAt: 1530370800
marketShare: 0.01
sourceIdentification: false
個人タイプのアクターオブジェクト
このオブジェクトは、運用担当者のような1人または複数の人物で構成されているアクターの種類に関する情報を提供します。 識別可能な個人とクラウドとの制限されたネットワーク接続を設計する際などに、使用べき種類のアクターです。
固定フィールド
フィールド名
種類
説明
type
string
必須. 固定値: 'persons
'.
title
Map[ string
, string
]
必須. アクターの名称です。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
description
Map[ string
, string
]
必須. アクターの説明です。 このテキストは外部ツールによる検索インデックスとして使われる可能性があります。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
num
integer
必須. 本アクターを構成する人数です。
sourceIdentification
[ boolean
]
必須.
特定のIPアドレス範囲やドメイン名などで識別できるかどうかを意味します。
trueの場合、identificationGroup
フィールドは必須です。
identificationGroup
string
IPアドレス範囲やドメイン名など。
sourceIdentification
フィールドがtrueの場合は必須です。そして、sourceIdentification
がfalseの場合、指定してはいけません。
JSON example
{
"type": "persons",
"title": {
"en": "Operators",
"ja": "運用担当者",
"ru": "операторы"
},
"description": {
"en": "Operators using management console.",
"ja": "管理コンソールを利用する運用担当者",
"ru": "Операторы, использующие консоль управления."
},
"num": 7,
"sourceIdentification": true,
"identificationGroup": "IPsOfOperatorGroupA"
}
YAML example
type: persons
title: a
en: Operators
ja: 運用担当者
ru: операторы
description:
en: Operators using management console.
ja: 管理コンソールを利用する運用担当者
ru: Операторы, использующие консоль управления.
num: 7
sourceIdentification: true
identificationGroup: IPsOfOperatorGroupA
外部システムタイプのアクターオブジェクト
このオブジェクトは外部システムのAPIやファイルインターフェイスなど、1つまたはいくつかのシステムで構成される種類のアクターに関する情報を提供します。 識別可能な外部システムとクラウドとの制限されたネットワーク接続を設計する際などに、使用べき種類のアクターです。
固定フィールド
フィールド名
種類
説明
type
string
必須. 固定値:
'externalSystem
'.
title
Map[ string
, string
]
必須. アクターの名称です。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
description
Map[ string
, string
]
必須. アクターの説明です。 このテキストは外部ツールによる検索インデックスとして使われる可能性があります。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
sourceIdentification
[ boolean
]
必須.
特定のIPアドレス範囲やドメイン名などで識別できるかどうかを意味します。
trueの場合、identificationGroup
フィールドは必須です。
identificationGroup
string
IPアドレス範囲やドメイン名など。
sourceIdentification
フィールドがtrueの場合は必須です。そして、sourceIdentification
がfalseの場合、指定してはいけません。
JSON Example
{
"type": "externalSystem",
"title": {
"en": "API of SFA platform",
"ja": "SFAプラットフォームのAPI",
"ru": "API платформы SFA"
},
"description": {
"en": "Providing GET and POST interfaces of sales information.",
"ja": "販売情報のGETおよびPOSTインターフェースを提供する外部システム",
"ru": "Предоставление GET и POST интерфейсов информации о продажах."
},
"sourceIdentification": true,
"identificationGroup": "ipsOfSFA"
}
YAML Example
type: externalSystem
title:
en: API of SFA platform
ja: SFAプラットフォームのAPI
ru: API платформы SFA
description:
en: Providing GET and POST interfaces of sales information.
ja: 販売情報のGETおよびPOSTインターフェースを提供する外部システム
ru: Предоставление GET и POST интерфейсов информации о продажах.
sourceIdentification: true
identificationGroup: ipsOfSFA
Resource object
このオブジェクトは、利用するクラウドリソースに関する情報を提供します。
JSONまたはYAMLでフォーマットされた外部ファイルに対する参照でなければなりません。
そして、以下のようなクラウド自動化ツールのために、整形されたデータであるべきです。
固定フィールド
フィールド名
種類
説明
type
string
必須.
プロビジョニングコードの種別です。以下値の中の1つである必要があります。
acf
: AWS CloudFormation.
arm
: Azure Resource Manager.
gdm
: Google Cloud Deployment Manager.
aro
: Alibaba Cloud Resource Orchestration Service.
tfm
: Terraform.
slf
: Serverless Framework.
oth
: その他
$ref
string
必須.
プロビジョニングコードで記述されたファイルへの参照で、Reference objectの$refアイテムと同じです。
.json
, .yaml
, または .yml
の拡張子を持つ外部ファイルを参照しなければなりません。
そしてその拡張子は、外部ツールによってリンク先のファイルフォーマットを検出するために利用されるべきものです。
JSON Example
{
"type": "acf",
"$ref": "xxx.json"
}
YAML Example
type: acf
$ref: xxx.json
Context object
このオブジェクトは、特定の機能を実行する目的でいくつかのアクターとリソースを関連付けることにより、 システムの利用ケースに関する情報を提供します。 それはCDSを正しく設計、監査するために、包括的に記述されるべきです。
固定フィールド
フィールド名
種類
説明
title
Map[ string
, string
]
必須. コンテキストの名称です。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
description
Map[ string
, string
]
必須. コンテキストの説明です。 このテキストは外部ツールによる検索インデックスとして使われる可能性があります。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
traffics
Map[ string
, Traffic objects ] | [ Reference object ]
必須. トラフィックオブジェクトを格納します。各トラフィックはトラフィックオブジェクトを指定します。 トラフィックはコンテキスト内の通信経路を意味します。
maxPerformanceDurationRatio
float
最大性能の月間持続時間比率を示します。コンテキストに求められるコストを計算する際、本値を利用してtriggerやtrafficsに含まれる各Range values objectのmaxとmin値を合成します。 例えば月間3日だけ広告効果でDAUを向上させる設計の場合、DAU値をmin:0.01, max:0.1、本値を0.1と表現します。 CloudDesignは月間使用量を基準に性能とコストを表現しますが、本値により月間平均は1rpsながらも瞬間最大性能100rpsを期待する設計が記録できます。
JSON Example
{
"title": {
"en": "Customers view",
"ja": "カスタマー閲覧",
"ru": "Просмотр клиента"
},
"description": {
"en": "Custormer's web site view of static contents through internet.",
"ja": "インターネット経由の静的コンテンツ閲覧",
"ru": "Просмотр статического содержимого через Интернет"
},
"trigger": {
"$ref": "#/components/triggers/trigger1"
},
"traffics": [
{"$ref": "#/components/traffics/traffic1"},
{"$ref": "#/components/traffics/traffic2"},
{"$ref": "#/components/traffics/traffic3"}
],
"maxPerformanceDurationRatio": 0.1
}
YAML Example
title:
en: Customers view
ja: カスタマー閲覧
ru: Просмотр клиента
description:
en: Custormer's web site view of static contents through internet.
ja: インターネット経由の静的コンテンツ閲覧
ru: Просмотр статического содержимого через Интернет
trigger:
$ref: #/components/triggers/trigger1
traffics:
- $ref: #/components/traffics/traffic1
- $ref: #/components/traffics/traffic2
- $ref: #/components/traffics/traffic3
maxPerformanceDurationRatio: 0.1
Components object
CDSのさまざまな側面に対応する一連の再利用可能なオブジェクトを保持します。 componentsオブジェクト内で定義されたすべてのオブジェクトは、それらがcomponentsオブジェクトの外のプロパティから明示的に参照されない限り、CDSに影響を与えません。
固定フィールド
フィールド名
種類
説明
子スキーマ
Cloud Designの主要なデータ構造の子を説明します。 以下の説明では、フィールドが明示的に「必須」と定義されない、または「しなければならない」または「する/することになる」と記載されていない場合、オプションと見なすことができます。
License object
CDSのライセンス情報です。
固定フィールド
フィールド名
種類
説明
type
string
必須.
CDSのライセンス種別です。以下何れかの値である必要があります。(CC0推奨)
CC0
Apache-2.0
MIT
BSD-2-Clause
OtherOpen
Closed
provider
string
ライセンスの提供者、またはその名称です。typeがOtherOpenまたはClosedの場合以外は記載してはいけません。
JSON Examples
RECOMMENDED
{
"type": "CC0"
}
{
"type": "Closed",
"provider": "Reindeer technology PTE.LTD."
}
YAML Examples
RECOMMENDED
type: CC0
type: Closed
provider: Reindeer technology PTE.LTD.
Author object
このオブジェクトは、CDSの作者とその役割についての情報を提供します。 対象のシステム、クラウド技術、そして同システムのサービス提供市場について正しい知識を持っている人を 他の人が見つけるのを助けるため、包括的に記載されるべきです。
固定フィールド
フィールド名
種類
説明
roles
[ string
]
必須.
CDSに関与した役割を保持します。役割は、以下の何れかの値でなければなりません。
planner
: 企画者
designer
: 設計者
auditor
: CDSの監査者
operator
: CDSで設計されたシステムの運用者
others
: その他
joinedAt
integer
必須. 作者が本CDSに関与しはじめた日時です。UNIXTIME形式で記載されねばなりません。
leavedAt
integer
必須. 作者が本CDSの作成、運用から離任した日時です。UNIXTIME形式で記載されねばなりません。
sign
string
作者の署名です。本値は署名支援ツールによって自動生成されるべきもので、通常は空白です。
JSON Example
{
"roles": ["designer","auditor"],
"joinedAt": 1548730447,
"leavedAt": 1548731447,
"sign": ABC123DEF456HIJ789#abc
}
YAML Example
roles:
- designer
- auditor
joinedAt: 1548730447
leavedAt: 1548731447
sign: ABC123DEF456HIJ789#abc
Organization object
このオブジェクトは、CDSの関連組織とその役割についての情報を提供します。 対象のシステム、クラウド技術、そして同システムのサービス提供市場について正しい知識を持っている組織を 他の人が見つけるのを助けるため、包括的に記載されるべきです。
固定フィールド
フィールド名
種類
説明
joinedAt
integer
必須. 組織が本CDSに関与しはじめた日時です。UNIXTIME形式で記載されねばなりません。
leavedAt
integer
必須. 組織が本CDSの作成、運用から離任した日時です。UNIXTIME形式で記載されねばなりません。
sign
string
組織の署名です。本値は署名支援ツールによって自動生成されるべきもので、通常は空白です。
JSON Example
{
"joinedAt": 1548730447,
"leavedAt": 1548731447,
"sign": ABC123DEF456HIJ789#abc
}
YAML Example
joinedAt: 1548730447
leavedAt: 1548731447
sign: ABC123DEF456HIJ789#abc
Market object
マーケットに関する情報を提供します。あなた自身、または第三者の調査結果を内包する可能性があります。
固定フィールド
フィールド名
種類
説明
title
Map[ string
, string
]
必須. マーケットの名称です。 会員の特性、興味、推定年などを説明する言葉を含めることにより、このCDS上でユニークであるべきです。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
description
Map[ string
, string
]
必須. マーケットの説明です。 それは詳細な算定者や算定目的などを説明する言葉を含むべきです。この説明は、設計者がこの情報を他のデザインで再利用できるかどうかを判断するのに役立ちます。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
num
integer
必須. 構成メンバーの数です。
estimatedBy
string
必須. 算定者の名称です。
estimatedAt
integer
必須. 算定された日時です。UNIXTIME形式で記載されねばなりません。
JSON Example
{
"title": {
"en": "65 years and over in U.S., July 2018",
"ja": "65才以上の人口 米国 2018年7月",
"ru": "65 лет и старше в США, июль 2018 года"
},
"description": {
"en": "General population data of U.S.\n at 2018 by govermental research.",
"ja": "米国政府による2018年の人口統計",
"ru": "Данные об общей численности населения США\n на 2018 год по данным государственных исследований."
},
"population": 51038120,
"estimatedBy": "U.S. Census Bureau",
"estimatedAt": 1530370800
}
YAML Example
title:
en: 65 years and over in U.S., July 2018
ja: 65才以上の人口 米国 2018年7月
ru: 65 лет и старше в США, июль 2018 года
description:
en: |
General population data of U.S.
at 2018 by govermental research.
ja: 米国政府による2018年の人口統計
ru: |
Данные об общей численности населения США
на 2018 год по данным государственных исследований.
population: 51038120
estimatedBy: U.S. Census Bureau
estimatedAt: 1530370800
Trigger objects
contextの初期イベントに関する情報を提供します。 それはサーバへの人的なWebアクセス、または外部APIへの自動化された時限呼び出しである可能性があります。
Webアクセスタイプのトリガーオブジェクト
これはアクターによるトリガーの一種です。アクターによるクラウドリソースへのWebアクセスを表現します。 アクターは人間または外部システムの可能性があります。
固定フィールド
フィールド名
種類
説明
type
string
必須. 固定値: 'webAccess
'.
description
Map[ string
, string
]
必須. トリガーの説明です。トリガーの目的を端的に示すメモであるべきです。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
ports
[ integer
]
必須.
このトリガーのエンドポイント(end
フィールドで定義)が利用するポート番号です。
internet
[ boolean
]
必須. この接続がインターネット経由か否かを示します。
restriction
[ boolean
]
必須. このトリガーのエンドポイントにおける、接続元IP、ドメインなどの接続制限の有無を示します。
dau
必須.
日間アクティブユーザー率(Dayly Active User)です。例えば1日平均で、このstart
フィールドで参照された
アクターの1%がこのend
フィールドで参照されるリソースにアクセスする場合、それは0.01となります。
reqPage
必須. ページあたりのリクエスト数です。ページあたりにどのくらいのリクエスト数(ページを構成する画像やHTMLなどへのリクエスト)が発生するかを示します。
busyHours
必須.
1日あたりのアクセス集中時間です。例えば日々のアクセスがほぼ AM 9:00 - AM 11:00 と PM 17:00 - PM 19:00 に集中している場合、この値は 6
です。
一般的に8時間より1時間のほうが「集中度は高い」とみなされるため、min値よりmax値のほうが値が「小さくなる」ことにご注意ください。>
例:利用者が日中8時間以内に均等にアクセスするケースを最小性能、昼休みの1時間にアクセスが集中するケースを最大性能とする場合、min:8, max:1 と表現します。
postsVisit
必須. 投稿する訪問者の割合を示します。例えば1日あたり、100,000人のアクターがDAU1%の割合で訪問する中で100件の投稿がある場合、この値は0.1となります。
end
必須. resource objectに記載されたリソースへの参照でなければなりません。このトリガーのエンドポイントを示します。複数のリソースが指定された場合、startからの通信量は各リソースに均等に分割されるものと判断されます。リソースごとに通信量の比重が異なる場合、また用途や接続ポートなどが異なるリソースへの接続が必要な場合はここに列記すべきではありません。新しいコンテキストのendとして記述してください。 例:10GBのリクエストを送信するアクターに対して2台のWebサーバを列記した場合、各サーバが受信するリクエストは5GBとなります。静的コンテンツ用サーバと動的コンテンツ用サーバに9:1の割合でアクセスする設計の場合は両サーバを一つのendに併記せず、静的コンテンツを提供するコンテキストと動的コンテンツを提供するコンテキストを分けて、それぞれのendに各サーバを記述してください。
endpointTitle
Map[ string
, string
]
必須. エンドポイントの名称です。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
storedRatio
必須.
end
が受信したデータのうち、end
で保管するデータサイズの比率を示します。
例えば、このトリガーでアクターがend
に送信するデータの全てをend
上で保管する場合、この値は1.0になります。データを
保管しない場合は0です。
storageDescription
Map[ string
, string
]
ストレージの説明です。 このテキストは外部ツールによる検索インデックスとして使われる可能性があり、ストレージの目的を的確に表現すべきです。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
JSON Example
{
"type": "webAccess",
"description": {
"en": "API call for movie data acquisition.",
"ja": "動画データ取得のためのAPI呼び出し。",
"ru": "API вызов для сбора данных фильма"
},
"infoType": {
"$ref": "#/components/infoType/general"
},
"ports": [443],
"internet": true,
"restriction": false,
"dau": {"max":
0.1, "min":
0.03},
"pagesVisit": {"max":
10, "min":
10},
"kbPage": {"max":
1024, "min":
1024},
"reqPage": {"max":
100, "min":
100},
"busyHours": {"max":
3, "min":
3},
"postRatio": {"max":
0.1, "min":
0.001},
"kbPost": {"max":
100, "min":
100},
"start": {
"$ref": "#/actors/customer"
},
"end": [
{"$ref": "#/resources/awsCloudEnvironment/data/Resources/cloudFront"}
],
"endpointTitle": {
"en": "LoadBalancer",
"ja": "ロードバランサ",
"ru": "Балансировщик нагрузки"
},
"storedRatio": {"max":
0.3, "min":
0.1},
"storedInfoType": {
"$ref": "#/components/infoType/general"
},
"storageDescription": {
"en": "Logging for API usage tracing.",
"ja": "API利用状況把握のためのログ保管",
"ru": "Хранение журнала для статуса использования API"
}
}
YAML Example
type: webAccess
description: {
en: Static content distribution,
ja: 静的コンテンツの配信,
ru: Распределение статического контента
infoType:
$ref: #/components/infoType/general
ports: [443]
internet: true
restriction: false
dau: {max:
0.1, min:
0.03}
pagesVisit: {max:
10, min:
10}
kbPage: {max:
1024, min:
1024}
reqPage: {max:
100, min:
100}
busyHours: {max:
3, min:
3}
postRatio: {max:
0.1, min:
0.001}
kbPost: {max:
100, min:
100}
start:
$ref: #/actors/customer
end:
- $ref: #/resources/awsCloudEnvironment/data/Resources/cloudFront
endpointTitle:
en: LoadBalancer
ja: ロードバランサ
ru: Балансировщик нагрузки
storedRatio: {max:
0.5, min:
0.3}
storedInfoType:
$ref: #/components/infoType/general
storageDescription: {
en: Logging for API usage tracing.,
ja: API利用状況把握のためのログ保管,
ru: Хранение журнала для статуса использования API
時限アクションタイプのトリガーオブジェクト
これはアクターまたはコンピューティングリソースによって発動されるタイプのトリガーです。 アクターまたはcloud computingリソースからの時限アクションを表現します。
固定フィールド
フィールド名
種類
説明
type
string
必須. 固定値:
'timedAction
'.
description
Map[ string
, string
]
必須. トリガーの説明です。トリガーの目的を端的に示すメモであるべきです。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
ports
[ integer
]
必須. トリガーのエンドポイントが利用するポート番号です。
internet
[ boolean
]
必須. トリガーがインターネット経由の通信を行うかどうかを明示します。
restriction
[ boolean
]
必須. トリガーのエンドポイントが接続元IP、ドメイン、その他の接続制限をかけているかどうかを明示します。
onlineRps
必須.
このトリガーが発火した時の、1秒当たりの要求数。 開始点(start
フィールド)からエンドポイント(end
フィールド)に
対するリクエストの要求性能を明示します。
たとえば、毎週月曜日の朝にバッチシステムが動作し、各バッチが1秒間に2回のスループットで外部APIにアクセスする場合は2.0
です。
reqMonth
必須.
開始点からエンドポイントへの月間リクエスト数です。
たとえば、バッチシステムが毎月1000人に3回メールマガジンを送信する場合、この値は9000
になります。
end
[ Reference object ]
必須. トリガーのエンドポイントを示します。 resource object または actor objectへの参照でなければなりません。複数のリソースが指定された場合、startからの通信量は各リソースに均等に分割されるものと判断されます。リソースごとに通信量の比重が異なる場合、また用途や接続ポートなどが異なるリソースへの接続が必要な場合はここに列記すべきではありません。新しいコンテキストのendとして記述してください。
endpointTitle
Map[ string
, string
]
必須. エンドポイントの名称です。キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
storedRatio
必須.
end
が受信したデータのうち、end
に保管されるデータサイズの比率を示します。
例えば、このトリガーでアクターがend
に送信するデータの全てをend
上で保管する場合、この値は1.0になります。データを
保管しない場合は0です。
storageDescription
Map[ string
, string
]
ストレージの説明です。 このテキストは外部ツールによる検索インデックスとして使われる可能性があり、ストレージの目的を的確に表現すべきです。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
JSON Example
{
"type": "timedAction",
"description": {
"en": "API call for movie data acquisition.",
"ja": "動画データ取得のためのAPI呼び出し。",
"ru": "API вызов для сбора данных фильма"
},
"infoType": {
"$ref": "#/components/infoType/general"
},
"ports": [443],
"internet": false,
"restriction": false,
"onlineRps": {"max":
3, "min":
1},
"reqMonth": {"max":
9000, "min":
5000},
"kbRequest": {"max":
0.01, "min":
0.01},
"kbResponse": {"max":
1, "min":
1},
"start": {
"$ref": "#/resources/awsCloudEnvironment/resources/jobServer"
},
"end": [
{"$ref": "##/actors/api"}
],
"endpointTitle": {
"en": "LoadBalancer",
"ja": "ロードバランサ",
"ru": "Балансировщик нагрузки"
},
"storedRatio": {"max":
0.3, "min":
0.1},
"storedInfoType": {
"$ref": "#/components/infoType/general"
},
"storageDescription": {
"en": "Logging for API usage tracing.",
"ja": "API利用状況把握のためのログ保管",
"ru": "Хранение журнала для статуса использования API"
}
}
YAML Example
type: timedAction
description: {
en: Static content distribution,
ja: 静的コンテンツの配信,
ru: Распределение статического контента
infoType:
$ref: #/components/infoType/general
ports: [443]
internet: false
restriction: false
onlineRps: {max:
3, min:
1}
reqMonth: {max:
9000, min:
5000}
kbRequest: {max:
0.01, min:
0.01}
kbResponse: {max:
1, min:
1}
start:
$ref: #/resources/awsCloudEnvironment/resources/jobServer
end:
- $ref: #/actors/api
endpointTitle:
en: LoadBalancer
ja: ロードバランサ
ru: Балансировщик нагрузки
storedRatio: {max:
0.5, min:
0.3}
storedInfoType:
$ref: #/components/infoType/general
storageDescription: {
en: Logging for API usage tracing.,
ja: API利用状況把握のためのログ保管,
ru: Хранение журнала для статуса использования API
Traffic objects
context内の通信に関する情報を提供します。これはトリガーイベントの後続処理で利用されなければなりません。 例えばWebサーバーからアプリケーションサーバへの動的コンテンツ要求や、アプリケーションサーバからデータベースへのデータ保存などが表現されます。
パススルー比率タイプのトラフィックオブジェクト
これはトラフィックオブジェクトの一種です。開始点が受信したリクエストの一部を後続のリソースに受け渡すという形で発生する通信を表現できます。
例えばロードバランサが受けたリクエストをWebサーバに送信する、アプリケーションが受けたリクエストにもとづいてメール配信キューを生成するといった通信の連鎖が表現できます。
その際、本トラフィックのエンドポイント(end
フィールド)が受信するデータサイズは、本トラフィックの前段の通信(source
フィールド)が
受信したリクエストの何パーセントにあたるかといった表現方法になります。したがって、前段の通信が1MBのPOST値を受け取った後にサーバ内で3MBにデータを拡張して
本トラフィックのエンドポイントに受け渡すといった場合には、データサイズは300%になる(passThroughReqRatio
>フィールドが3
)と表現できます。
固定フィールド
フィールド名
種類
説明
type
string
必須. 固定値:
'passThroughRatio
'.
description
Map[ string
, string
]
必須. トラフィックの説明です。 このテキストは外部ツールによる検索インデックスとして使われる可能性があります。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
ports
[ integer
]
必須. トラフィックのエンドポイントが利用するポート番号です。
internet
[ boolean
]
必須. トラフィックがインターネット経由の通信を行うかどうかを明示します。
restriction
[ boolean
]
必須. トラフィックのエンドポイントが接続元IP、ドメイン、その他の接続制限をかけているかどうかを明示します。
source
必須.
trigger object または traffic objectへの参照です。
このトラフィックの開始点を意味します。
これは、end
フィールドに記述されているすべてのリソースまたはアクターオブジェクトに影響を及ぼします。
end
[ Reference object ]
必須. このトラフィックのエンドポイントを意味します。 actor objects または resource object内に記述された各リソースへの参照です。複数のリソースが指定された場合、startからの通信量は各リソースに均等に分割されるものと判断されます。リソースごとに通信量の比重が異なる場合、また用途や接続ポートなどが異なるリソースへの接続が必要な場合はここに列記すべきではありません。新しいコンテキストのendとして記述してください。
endpointTitle
Map[ string
, string
]
必須. エンドポイントの名称です。キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
passThroughReqRatio
必須.
前段のトリガーやトラフィック(source
フィールド)が受信したリクエストのうち、
何パーセントが後続となる本トラフィックのエンドポイント(end
)に流入するかを示します。
例えば前段のトリガーがユーザーから100,000/月のリクエストを受信し、50%を自身のキャッシュ、50%を本トラフィックに
送信する場合、この値は0.5
となります。
compositResRatio
必須.
前段のトリガーやトラフィック(source
フィールド)が扱うレスポンスデータのサイズを基準と
して、本トラフィックがその何パーセントにあたるサイズのデータを前段のトリガーやトラフィックに返却するかを記述します。
例えば前段のトリガーがユーザーに10GB/月のデータを返却する場合、この値が0.5であれば
本トラフィックから前段のトリガーに対して5GB/月のデータを返却することになります。
storedRatio
必須.
end
が受信したデータのうち、end
で保管するデータサイズの比率を示します。
例えば、このトラフィックで送信元がend
に送信するデータの全てをend
上で保管する場合、この値は1.0になります。データを
保管しない場合は0です。
storageDescription
Map[ string
, string
]
ストレージの説明です。 このテキストは外部ツールによる検索インデックスとして使われる可能性があり、ストレージの目的を的確に表現すべきです。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
JSON Example
{
"type": "passThroughRatio",
"description": {
"en": "Static content distribution",
"ja": "静的コンテンツの配信",
"ru": "Распределение статического контента"
},
"infoType": {
"$ref": "#/components/infoType/general"
},
"ports": [80],
"internet": false,
"restriction": false,
"source": {"$ref": "#/trigger/customer"},
"end": [
{"$ref": "#/resources/awsCloudEnvironment/data/Resources/s3"}
],
"passThroughReqRatio": {"max":
1, "min":
0.1},
"compositResRatio": {"max":
0.5, "min":
0.5},
"endpointTitle": {
"en": "LoadBalancer",
"ja": "ロードバランサ",
"ru": "Балансировщик нагрузки"
},
"storedRatio": {"max":
0.3, "min":
0.1},
"storedInfoType": {
"$ref": "#/components/infoType/general"
},
"storageDescription": {
"en": "Logging for API usage tracing.",
"ja": "API利用状況把握のためのログ保管",
"ru": "Хранение журнала для статуса использования API"
}
}
YAML Example
type: passThroughRatio
description: {
en: Static content distribution,
ja: 静的コンテンツの配信,
ru: Распределение статического контента
infoType:
$ref: #/components/infoType/general
ports: [80]
internet: false
restriction: false
source:
$ref: #/trigger/customer
end:
- $ref: #/resources/awsCloudEnvironment/data/Resources/s3
passThroughReqRatio: {max:
1, min:
0.1}
compositResRatio: {max:
0.5, min:
0.5}
endpointTitle:
en: LoadBalancer
ja: ロードバランサ
ru: Балансировщик нагрузки
storedRatio: {max:
0.5, min:
0.3}
storedInfoType:
$ref: #/components/infoType/general
storageDescription: {
en: Logging for API usage tracing.,
ja: API利用状況把握のためのログ保管,
ru: Хранение журнала для статуса использования API
InfoType object
情報の種類と必要なセキュリティレベルを表します。 本オブジェクトにより、取り扱う情報タイプを定義し、クラウドリソースで 受信、保存、処理される情報を分類すべきです。
固定フィールド
フィールド名
種類
説明
title
Map[ string
, string
]
必須. 情報種別の名称です。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
description
Map[ string
, string
]
必須. 情報種別の説明です。 このテキストは外部ツールによる検索インデックスとして使われる可能性があります。 キーはISO 639-1の2文字の言語コードでなければなりません。 そして値はUTF-8の文字列でなければなりません。
confidential
boolean
必須. 機密情報か否かを定義します。
privacy
boolean
必須. プライバシー情報を含むか否かを定義します。法的に守られるべき情報の存在を意味します。
definedBy
string
必須. 作成者です。
definedAt
integer
必須. 作成日です。UNIXTIME形式で記述されなければなりません。
JSON Example
{
"title": {
"en": "privacy level",
"ja": "個人情報取り扱いレベル",
"ru": "Чувствительный уровень"
},
"description": {
"en": "Contains privacy information.",
"ja": "個人情報を含む",
"ru": "Содержит конфиденциальную личную информацию."
},
"confidential": true,
"privacy": true,
"definedBy": "ABC company",
"definedAt": 1530370800
}
YAML Example
title:
en: confidential level
ja: 個人情報取り扱いレベル
ru: Чувствительный уровень
description:
en: Contains privacy information.
ja: 個人情報を含む
ru: Содержит конфиденциальную личную информацию.
confidential: true
privacy: true
definedBy: ABC company
definedAt: 1530370800
Common Schema
Cloud designの汎用データ構造について説明します。 以下の説明では、フィールドが明示的に「必須」と定義されない、または「しなければならない」または「する/することになる」と記載されていない場合、オプションと見なすことができます。
Range values object
CDSの様々なフィールドで利用される、値範囲を示すオブジェクトです。
固定フィールド
フィールド名
種類
説明
max
float
必須. 値範囲の最大値を意味します。
min
float
必須. 値範囲の最小値を意味します。
JSON Example
{
"max": 1.0,
"min": 0.01
}
YAML Example
max: 1.0
min: 0.01
Reference object
CDSの様々なフィールドからCDSやクラウドオートメーションツール用ファイル内のjson/yamlオブジェクトを 参照する際に利用する参照先指定オブジェクトです。参照オブジェクトはJSON参照によって定義されており、 同じ構造、動作、および規則に従います。 この仕様では、参照の解決はJSONスキーマ仕様ではなく JSON参照仕様で定義されているとおりに行われます。
固定フィールド
フィールド名
種類
説明
$ref
string
必須. Reference strings.
同一ファイルの場合は#/
で始まる形で参照を記述し、必ずルートオブジェクトからのパスを記述します。
また外部ファイルを指定するときは、必ず拡張子.json
、.yaml
、または.yml
を付けたファイル名から参照を記述し、
#/
以降は同一ファイルの場合と同様に記述します。
JSON Example
{
"$ref": "#/components/actors/custormers"
}
JSON Relative Documents With Embedded Schema Example
{
"$ref": "externalfile.yaml#/components/actors/custormers"
}
YAML Example
$ref: #/components/actors/custormers
YAML Relative Documents With Embedded Schema Example
$ref: externalfile.yaml#/components/actors/custormers
付録
参考資料
Cloud Design仕様は Reindeer Projectの
一環として生まれました。
Reindeer Projectはクラウド活用の支援を通じて、すべての人々につくる力を届けたいと願っています。
誰もが自分の力でサービスを創造できる社会は、表現の自由と生活様式や価値観の多様性をもたらすだけではありません。それはまた、すべての人々に対する富の再分配を促進し、世界中の人々の平均的な富と幸福を改善すると信じています。
ホワイトペーパー
Reindeer projectの目的と計画が記されています。
Cloud Design
の6状態
今後のツールとエコシステム展開のイメージです。
商標
・Google、「 Google Cloud Platform (GCP) 」「 Google Cloud Platform (GCP) ロゴ 」は、 Google LLCの商標または登録商標です。
・Microsoft、Microsoft Azureは、米国Microsoft Corporationの、米国およびその他の国における登録商標または商標です。
・Terraformは、HashiCorpの登録商標または商標です。
・その他、記載されている会社名および商品・サービス名は各社の登録商標または商標です。
リビジョン
バージョン
リリース日
備考
1.0.0
2019-07-31
Cloud Design Specificationの最初の公式リリース
1.0.0(バージョン変更なし)
2019-08-15
本資料にReindeer Editorへのリンクを追加
1.1.0
2020-03-18
デザインの関係者表現を拡充(組織と本人証明サインを追加)
'info' オブジェクトに 'organizations' プロパティを追加
'author' オブジェクトに 'sign' プロパティを追加
1.2.0
2020-10-08
Serverless Framework をサポート
1.3.0
2020-11-10
ContextにmaxPerformanceDurationRatioを追加し、合成コスト表現をサポート
1.3.1
2020-11-10
maxPerformanceDurationRatioの型定義ミスを修正
1.3.1(変更なし)
2020-11-12
本ドキュメントのbusyHoursパラメータに説明を補足
1.3.1(変更なし)
2021-01-14
本ドキュメントのいくつかの説明表現を改善
1.3.2
2021-01-15
titleとdescriptionの最大文字長を150字に変更
1.3.2(変更なし)
2021-03-01
本ドキュメントのいくつかの説明表現を改善
1.3.2(変更なし)
2021-06-11
商標表記を追加
1.3.2(変更なし)
2023-04-17
ルートスキーマのjsonサンプルを追加