Compute Nest のサービスプロバイダーは、サービスを作成する際に Resource Orchestration Service (ROS) テンプレートを提供する必要があります。このテンプレートでは、プロビジョニングするクラウドリソースとそれらの設定方法を宣言します。これにより、ROS は手動でリソースを作成することなく、完全で再現可能なスタックを自動的にデプロイできます。このトピックでは、VPC を例に、YAML テンプレートを作成し、ROS コンソールで検証する手順を説明します。
テンプレートが検証されたら、そのコンテンツを [テンプレートコンテンツ] コードエディタに貼り付けるか、ファイルとしてアップロードして Compute Nest にインポートします。
テンプレートの作成
ROS は JSON、YAML、および Terraform テンプレートをサポートしています。ご利用のシナリオに基づいて作成方法を選択してください。
| 方法 | 使用する状況 |
|---|---|
| サンプルテンプレートの変更 | 独立系ソフトウェアベンダー (ISV) のソフトウェアデプロイなど、一般的なシナリオから開始する場合 |
| テキストエディタでゼロから作成 | サンプルテンプレートでカバーされていない、複雑またはカスタムのインフラストラクチャを構築する場合 |
| Terraform テンプレートの作成 | 既存の Terraform 構成を再利用する場合 |
サンプルテンプレートの変更:ROS コンソールの サンプルテンプレートページを参照してください。各テンプレートの詳細ページには、調整すべきパラメーターが説明されています。簡単な変更だけで済む場合は、ROS コンソールでのテンプレートの検証 に進んでください。スタック作成ウィザードで直接サンプルテンプレートを選択し、変更できます。
ゼロから作成:任意のテキストエディタを使用します。以下のセクションでは、Elastic Compute Service (ECS) インスタンスを作成する YAML テンプレートの例を使用して、テンプレートの構造を説明します。
Terraform テンプレートの作成:「Terraform テンプレートの作成」をご参照ください。
テンプレートの構造
ROS テンプレートは 4 つのセクションで構成されています。Resources は唯一の必須セクションであり、他のセクションは任意ですが、一般的に使用されます。
| セクション | 必須 | 目的 |
|---|---|---|
Parameters | 任意 | ユーザーがサービスインスタンスを作成する際に設定する入力値を宣言します |
Resources | 必須 | 作成するクラウドリソースのタイプとプロパティを定義します |
Outputs | 任意 | スタック作成後に返される値 (例:エンドポイント URL) を指定します |
Metadata | 任意 | コンソール UI でパラメーターをグループ化し、任意で非表示にします |
以下のテンプレート例では、セキュリティグループとシェルスクリプトステップを持つ ECS インスタンスを作成します。インラインコメントで各セクションを説明しています。
ROSTemplateFormatVersion: '2015-09-01'
# パラメーター。
Parameters:
PayType:
Type: String
Label:
en: ECS Instance Charge Type
zh-cn: the description in Chinese
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Label:
en: Pay Period Unit
zh-cn: the description in Chinese
Default: Month
AllowedValues:
- Month
- Year
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
PayPeriod:
Type: Number
Description:
en: When the resource purchase duration is Month, the value of Period ranges from 1 to 9, 12, 24, 36, 48, or 60.
<b><font color='red'> When ECS instance types are PrePaid valid </font>
zh-cn: the description in Chinese
Label:
en: Period
zh-cn: the description in Chinese
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
EcsInstanceType:
Type: String
Label:
en: Instance Type
zh-cn: the description in Chinese
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${InstanceChargeType}
InstancePassword:
NoEcho: true
Type: String
Description:
en: Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ Special symbol in)
zh-cn: the description in Chinese
Label:
en: Instance Password
zh-cn: the description in Chinese
ConstraintDescription:
en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ Special symbol in)
zh-cn: the description in Chinese
AssociationProperty: ALIYUN::ECS::Instance::Password
AllowedPattern: '^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$'
MinLength: 8
MaxLength: 30
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
Label:
en: VSwitch Availability Zone
zh-cn: the description in Chinese
VpcId:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
Description:
en: Please search the ID starting with (vpc-xxx) from console-Virtual Private Cloud
zh-cn: the description in Chinese
Label:
en: VPC ID
zh-cn: the description in Chinese
VSwitchId:
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${VpcId}
ZoneId: ${ZoneId}
Type: String
Description:
en: Instance ID of existing business network switches, console-Virtual Private Cloud-VSwitches under query
zh-cn: the description in Chinese
Label:
en: VSwitch ID
zh-cn: the description in Chinese
# リソース。
Resources:
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: VpcId
# セキュリティグループのインバウンドポート。
SecurityGroupIngress:
- PortRange: 80/80
Priority: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
NicType: internet
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
# インスタンス名。
InstanceName:
Fn::Join:
- '-'
- - Ref: ALIYUN::StackName
- '[1,4]'
IoOptimized: optimized
# 課金方法。
InstanceChargeType:
Ref: PayType
PeriodUnit:
Ref: PayPeriodUnit
Period:
Ref: PayPeriod
# ネットワーク構成。
VpcId:
Ref: VpcId
ZoneId:
Ref: ZoneId
VSwitchId:
Ref: VSwitchId
SecurityGroupId:
Ref: EcsSecurityGroup
# ディスクのタイプとサイズ。
SystemDiskCategory: cloud_essd
SystemDiskSize: 200
MaxAmount: 1
# イメージ。
ImageId: centos_7
# インスタンスタイプ。
InstanceType:
Ref: EcsInstanceType
Password:
Ref: InstancePassword
# パブリック IP アドレスを有効にします。
AllocatePublicIP: true
# パブリック帯域幅。
InternetMaxBandwidthOut: 1
ECSRunCommand:
Type: ALIYUN::ECS::RunCommand
Properties:
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
Type: RunShellScript
Sync: true
Timeout: 3600
CommandContent: |-
#!/bin/bash
# 出力設定。
Outputs:
# パブリック IP アドレスをコンソールで HTTP によって返されるエンドポイントとして表示します。
Endpoint:
Description:
zh-cn: the description in Chinese
en: Public IP Addresses
Value:
Fn::Sub:
- http://${ServerAddress}
- ServerAddress:
Fn::Select:
- 0
- Fn::GetAtt:
- EcsInstanceGroup
- PublicIps
Metadata:
ALIYUN::ROS::Interface:
# パラメーターグループ。
ParameterGroups:
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
en: PayType Configuration
zh-cn: the description in Chinese
- Parameters:
- EcsInstanceType
- InstancePassword
Label:
default:
en: ECS Instance Configuration
zh-cn: the description in Chinese
- Parameters:
- ZoneId
- VpcId
- VSwitchId
Label:
default:
zh-cn: the description in Chinese
en: Choose existing Infrastructure
Parameters
Parameters は、ユーザーがサービスインスタンスを作成する際に設定する入力を宣言します。このテンプレート例では、以下のパラメーターを定義しています。
| パラメーター | 説明 |
|---|---|
PayType | 課金方法:PostPaid (従量課金) または PrePaid (サブスクリプション) |
PayPeriodUnit | サブスクリプション期間単位:Month または Year |
PayPeriod | リソースのサブスクリプション期間 |
EcsInstanceType | ECS インスタンスタイプ |
InstancePassword | ECS インスタンスのログインパスワード (8~30 文字。大文字、小文字、数字、特殊文字のうち 3 種類を含む必要があります) |
ZoneId | vSwitch がデプロイされるゾーン |
VpcId | VPC ID |
VSwitchId | vSwitch ID |
Resources
Resources は作成する対象を定義します。各エントリは Type (ROS リソースタイプ識別子) と Properties (リソース構成) を指定します。このテンプレート例では、以下を作成します。
| ROS リソースタイプ | 説明 |
|---|---|
ALIYUN::ECS::SecurityGroup | ポート 80 にインバウンドルールを持つセキュリティグループ |
ALIYUN::ECS::InstanceGroup | ECS インスタンスグループ |
ALIYUN::ECS::RunCommand | インスタンス作成後にインスタンス上で実行されるシェルスクリプト |
サポートされているリソースタイプとそのプロパティの完全なリストについては、「サービス別のリソースタイプリスト」をご参照ください。
Outputs
Outputs は、スタック作成後に返される値を定義します。この例では、サービス利用者がすぐにサービスにアクセスできるように、パブリック IP アドレスが HTTP エンドポイントとして返されます。
Metadata
Metadata は、コンソールでパラメーターがどのように表示されるかを制御します。Metadata を使用して、Parameters セクションで定義されたパラメーターをグループ化し、特定のパラメーターを非表示にすることができます。ALIYUN::ROS::Interface > ParameterGroups を使用して関連するパラメーターをグループ化し、構成フォームのナビゲーションを容易にします。このテンプレート例では、以下のグループを定義しています。
| グループ | パラメーター |
|---|---|
| PayType Configuration | PayType、PayPeriodUnit、PayPeriod |
| ECS Instance Configuration | EcsInstanceType、InstancePassword |
| Choose existing Infrastructure | ZoneId、VpcId、VSwitchId |
Mappings や Conditions などの高度なテンプレート機能については、「テンプレートの構造」をご参照ください。
ROS コンソールでのテンプレートの検証
ROS コンソールでスタックを作成すると、テンプレートの構文とリソースプロパティ値の両方がチェックされます。スタックの作成が成功すれば、テンプレートが Compute Nest にインポートできる状態であることが確認できます。スタックの作成に失敗した場合、エラーメッセージは問題が構文エラーか無効なリソースプロパティかを示します。失敗の詳細を確認し、テンプレートを修正して再試行してください。
ROS コンソールにログインします。
左側のナビゲーションウィンドウで、[デプロイメント] > [スタック] を選択します。
[スタック] ページ左上の [スタックの作成] をクリックし、[ROS を使用] を選択します。
[スタックの作成] ページで、以下の手順を実行します。
[テンプレートの指定] セクションで、[既存のテンプレートを選択] を選択し、ご利用のテンプレートコンテンツを [テンプレートコンテンツ] コードエディタに貼り付けます。または、[サンプルテンプレートを使用] を選択してサンプルから開始します。
[次へ] をクリックします。[パラメーターの設定] ステップで、パラメーター設定を確認し、[テンプレートリソースのプレビュー] をクリックしてリソース構成を確認します。
(任意) [次へ] をクリックして、[コンプライアンス事前チェック (任意)] ステップを完了します。
(任意) [次へ] をクリックして、[確認 (任意)] ステップを完了します。
[作成] をクリックします。