Compute Nest でサービスを作成する際、サービスプロバイダーはテンプレートを提供する必要があります。まずテンプレートを作成し、その内容を Compute Nest コンソールのテンプレートエディターに貼り付けるか、テンプレートファイルをアップロードする必要があります。このトピックでは、Virtual Private Cloud (VPC) の作成を例に、JSON または YAML でテンプレートを作成し、Resource Orchestration Service (ROS) コンソールで検証する方法について説明します。
背景情報
Compute Nest のテンプレートは、本質的に Resource Orchestration Service (ROS) のテンプレートです。ROS で定義された仕様に従ってスタックテンプレートを作成できます。テンプレートでは、ECS インスタンスや ApsaraDB RDS インスタンスなどの必要なクラウドリソースと、それらの間の依存関係を定義できます。ROS オーケストレーションエンジンは、テンプレートに基づいてすべてのリソースを自動的に作成および設定し、自動デプロイと運用を可能にします。Resource Orchestration Service は、クラウドリソース管理を簡素化する Alibaba Cloud サービスです。詳細については、「Resource Orchestration Service とは」をご参照ください。
テンプレートの作成
ROS は、JSON/YAML および Terraform 構文で記述されたテンプレートをサポートしています。サンプルを修正するか、ゼロから作成することでテンプレートを作成できます。
-
一般的なシナリオ向けに、ROS はテンプレートサンプルを提供しています。ROS コンソールの [テンプレートサンプル] ページから、適切なリファレンステンプレートを選択して変更できます。Isvソフトウェアの展開 カテゴリ配下の 利用イメージ のテンプレートは、Compute Nest シナリオで一般的に使用されます。これらのサンプルの変更手順は、テンプレートの説明に記載されています。
サンプルテンプレートを使用し、簡単な変更のみが必要な場合は、「ROS コンソールでのテンプレートの検証」セクションに進むことを推奨します。スタック作成時にサンプルテンプレートを選択して修正できます。
-
複雑なシナリオの場合は、任意のテキストエディターを使用してテンプレートをゼロから作成できます。
-
複数のファイルを持つ複雑な Terraform プロジェクトがある場合は、Terraform テンプレートを ROS テンプレート形式に変換することを推奨します。これにより、Terraform 設定全体を単一のファイルにパッケージ化できます。この ROS 形式のテンプレートを Compute Nest コンソールに貼り付けると、システムは自動的にその内容を Terraform デプロイメントとして認識します。これによりプロセスが簡素化され、複数の Terraform ファイルをアップロードする必要がなくなります。Terraform テンプレートを ROS 形式に変換するには、次の手順に従います。
-
ROS テンプレート変換ツールをインストールします。pip の使用を推奨します。他のインストール方法の詳細については、「テンプレートコンバーターのインストール」をご参照ください。
pip install alibabacloud-ros-tran -
すべての Terraform ファイルを単一のディレクトリに配置します。次のコマンドを実行して、Terraform テンプレートを ROS テンプレートに変換します。{terraform_path} を Terraform ファイルの親ディレクトリのパスに置き換えてください。
rostran transform {terraform_path} -S terraform --force --compatible --target-format yaml -
前のステップで生成された ROS テンプレートを Compute Nest コンソールに貼り付けます。デプロイメント方法として ROS を選択します。すると、システムは自動的にそれを Terraform テンプレートとして認識し、デプロイメント方法を Terraform に設定します。
-
次の YAML テンプレートは、ECS インスタンスを作成する方法を示しています。
ROSTemplateFormatVersion: '2015-09-01'
# パラメーター
Parameters:
PayType:
Type: String
Label:
en: ECS インスタンスの課金方法
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Label:
en: サブスクリプション期間の単位
Default: Month
AllowedValues:
- Month
- Year
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
PayPeriod:
Type: Number
Description:
en: サブスクリプション期間が月の場合、期間の値は 1 から 9、12、24、36、48、または 60 の範囲です。
<b><font color='red'> このパラメーターは、ECS インスタンスの課金方法が PrePaid の場合にのみ有効です。</font>
Label:
en: 期間
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: インスタンスタイプ
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${InstanceChargeType}
InstancePassword:
NoEcho: true
Type: String
Description:
en: サーバーにログインするためのパスワード。パスワードは 8~30 文字で、大文字、小文字、数字、および ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ などの特殊文字のうち、少なくとも 3 種類を含む必要があります。
Label:
en: インスタンスのパスワード
ConstraintDescription:
en: パスワードは 8~30 文字で、大文字、小文字、数字、および ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ などの特殊文字のうち、少なくとも 3 種類を含む必要があります。
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 のアベイラビリティゾーン
VpcId:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
Description:
en: リソースをデプロイする VPC の ID。通常、ID は `vpc-` で始まります。
Label:
en: VPC ID
VSwitchId:
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${VpcId}
ZoneId: ${ZoneId}
Type: String
Description:
en: 指定された VPC およびアベイラビリティゾーン内の vSwitch の ID。
Label:
en: vSwitch ID
# リソース
Resources:
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: VpcId
# セキュリティグループの Ingress ルール
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:
en: パブリック IP アドレス
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: 支払いタイプの設定
- Parameters:
- EcsInstanceType
- InstancePassword
Label:
default:
en: ECS インスタンスの設定
- Parameters:
- ZoneId
- VpcId
- VSwitchId
Label:
default:
en: 既存のインフラストラクチャの選択
テンプレートには、Parameters、Resources、Outputs、Metadata の 4 つの主要なセクションがあります。
パラメーター
Parameters セクションでは、ユーザーがサービスインスタンスを作成する際に設定するパラメーターを定義します。次の表に、この例のパラメーターを示します。
|
パラメーター |
説明 |
|
PayType |
インスタンスの課金方法。 |
|
PayPeriodUnit |
サブスクリプション期間の単位。 |
|
PayPeriod |
サブスクリプション期間。 |
|
EcsInstanceType |
ECS インスタンスのインスタンスタイプ。 |
|
InstancePassword |
ECS インスタンスのパスワード。 |
|
ZoneId |
vSwitch のアベイラビリティゾーン。 |
|
VpcId |
VPC の ID。 |
|
VSwitchId |
vSwitch の ID。 |
リソース
Resources セクションでは、作成するリソースを定義します。これには、各リソースの Type と Properties が含まれます。次の表に、この例で定義されているリソースを示します。
|
リソースタイプ |
説明 |
|
ALIYUN::ECS::SecurityGroup |
ECS セキュリティグループを作成します。 |
|
ALIYUN::ECS::InstanceGroup |
ECS インスタンスを作成します。 |
|
ALIYUN::ECS::RunCommand |
ECS インスタンスでシェルスクリプトを実行します。 |
各 Alibaba Cloud リソースタイプの構文、プロパティ、および戻り値 (出力) については、「リソースタイプインデックス」をご参照ください。この情報は、テンプレートで特定のリソース要件を宣言するのに役立ちます。
出力
Outputs セクションでは、サービス作成後に返される情報を定義します。この例では、出力は Endpoint (http://PublicIp) です。リソースが作成された後、ユーザーはこのアドレスを使用してサービスにアクセスできます。
メタデータ
Metadata セクションでは、Parameters セクションで定義されたパラメーターをグループ化し、カスタムパラメーターを非表示にすることができます。結果は ROS コンソールの [パラメーターの設定] ページで確認できます。次の表に、この例のパラメーターグループを示します。
|
グループ名 |
パラメーター |
|
支払いタイプの設定 |
PayType |
|
PayPeriodUnit |
|
|
PayPeriod |
|
|
ECS インスタンスの設定 |
EcsInstanceType |
|
InstancePassword |
|
|
既存のインフラストラクチャの選択 |
ZoneId |
|
VpcId |
|
|
VSwitchId |
マッピングや条件などの高度な機能も使用できます。詳細については、「テンプレート構造」をご参照ください。
Terraform を使用してテンプレートを作成することもできます。詳細については、「Terraform テンプレートの作成」をご参照ください。
ROS コンソールでのテンプレートの検証
テンプレートを作成した後、ROS コンソールでスタックを作成することで検証できます。
-
ROS コンソールにログインします。
-
左側のナビゲーションウィンドウで、スタック をクリックします。
-
ページの左上隅で、スタックの作成 をクリックします。
-
スタックの作成 ページで、必須パラメーターを設定します。
-
テンプレートの指定 セクションで、既存テンプレートの使用 を選択し、お使いのテンプレートをコンテンツエディターに貼り付けます。または、サンプルテンプレートの使用 を選択して変更します。
-
Next をクリックします。設定パラメーター ページで、パラメーターを確認します。必要に応じて、テンプレートリソースのプレビュー をクリックしてリソース設定を確認します。
-
オプション: Next をクリックします。コンプライアンス事前チェック (オプション) ページで、パラメーターを設定します。
-
任意: Next をクリックします。確認と確認 (オプション) ページで、構成を確認します。
-
作成 をクリックします。
説明リソーススタックの構成 (オプション) と 確認と確認 (オプション) のステップは任意であり、省略可能です。
-
スタックが正常に作成された場合、テンプレートは有効と見なされます。スタックの作成に失敗した場合は、エラーメッセージを確認し、それに応じてテンプレートを修正してください。