クラウドアシスタントでは、テンプレート変数のように、カスタムパラメーターや組み込み環境パラメーターを使用してコマンドの内容をカスタマイズできます。より便利で安全な管理のために、クラウドアシスタントのコマンドを CloudOps Orchestration Service (OOS) のパラメーターストアと組み合わせることもできます。このトピックでは、これらの異なる種類のパラメーターの使用方法について説明します。
前提条件
インスタンスが実行中である必要があります。
インスタンスにクラウドアシスタントエージェントがインストールされている必要があります。クラウドアシスタントエージェントのバージョンは、次のいずれかのバージョン以降である必要があります。詳細については、「クラウドアシスタントエージェントのインストール」をご参照ください。
Linux:2.2.3.309
Windows:2.1.3.309
注意事項
API を呼び出してクラウドアシスタントコマンドを実行する際のカスタムパラメーターの使用
RunCommand または InvokeCommand 操作を呼び出してクラウドアシスタントコマンドを実行する場合、カスタムパラメーターを有効にするには、
EnableParameterパラメーターを `true` に設定する必要があります。その後、CommandContentパラメーターで{{}}フォーマットを使用してカスタムパラメーターを定義できます。カスタムパラメーターには次の制限が適用されます:{{}}内のパラメーター名の前後にあるスペースと改行は無視されます。最大 20 個のカスタムパラメーターを指定できます。
カスタムパラメーター名は、大文字と小文字を区別しない a-zA-Z0-9-_ の組み合わせである必要があります。
acs::プレフィックスは組み込みパラメーター用に予約されており、カスタムパラメーターには使用できません。サポートされている組み込み環境パラメーターの詳細については、「組み込み環境パラメーター」をご参照ください。単一のパラメーター名の長さは 64 バイトを超えることはできません。
クラウドアシスタントコンソールでのカスタムパラメーターの使用
クラウドアシスタントコンソールは、組み込み環境パラメーターのみをサポートしています。サポートされている組み込み環境パラメーターの詳細については、「組み込み環境パラメーター」をご参照ください。
カスタムパラメーターの使用
クラウドアシスタントのコマンドでカスタムパラメーターを使用すると、スクリプトの柔軟性が向上し、コマンドの再利用性が高まります。たとえば、Linux インスタンスでスケジュールされたスクリプトがある場合、カスタムパラメーターを使用して実行頻度を柔軟に設定できます。
import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.RunCommandRequest;
import com.aliyun.teaopenapi.models.Config;
import java.util.Collections;
import java.util.List;
public class EcsService {
/**
* 環境変数から AccessKeyId と AccessKeySecret を取得します。
*/
private static final String ACCESS_KEY_ID = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
private static final String ACCESS_KEY_SECRET = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
public static void main(String[] args_) throws Exception {
// リージョン ID
String regionId = "cn-hangzhou";
Config config = new Config()
.setAccessKeyId(ACCESS_KEY_ID)
.setAccessKeySecret(ACCESS_KEY_SECRET)
.setRegionId(regionId);
Client ecsClient = new Client(config);
List<String> instanceIds = Collections.singletonList("i-bp1h23xufsi8XXXXXXXX");
// 実行するコマンドの内容。/path/to/your/script.sh を実行するスクリプトに置き換えます。
String commandContent = "#!/bin/bash\n " +
"(crontab -l 2>/dev/null; echo \"{{cron}} /path/to/your/script.sh\") | crontab -";
// コマンド実行のタイムアウト期間。
long commandTimeOut = 60;
RunCommandRequest request = new RunCommandRequest();
request.setRegionId(regionId);
request.setType("RunShellScript");
// カスタムパラメーター機能を有効にします。
request.setEnableParameter(true);
// カスタムパラメーター cron の値を設定します。
request.setParameters(Collections.singletonMap("cron", "0 2 * * *"));
request.setCommandContent(commandContent);
request.setInstanceId(instanceIds);
request.setTimeout(commandTimeOut);
ecsClient.runCommand(request);
}
}
import json
import os
from alibabacloud_ecs20140526 import models as ecs_20140526_models
from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
from alibabacloud_tea_openapi import models as open_api_models
ACCESS_KEY_ID = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
ACCESS_KEY_SECRET = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
def get_ecs_client(region_id):
config = open_api_models.Config(
access_key_id=ACCESS_KEY_ID,
access_key_secret=ACCESS_KEY_SECRET,
region_id=region_id
)
return Ecs20140526Client(config)
def main():
# リージョン ID
region_id = "cn-hangzhou"
client = get_ecs_client(region_id)
# コマンドを実行する ECS インスタンスの ID。
instance_ids = ["i-bp1h23xufsi8XXXXXXXX"]
# 実行するコマンドの内容。/path/to/your/script.sh は実行するスクリプトです。
command_content = "#!/bin/bash\n (crontab -l 2>/dev/null; echo \"{{cron}} /path/to/your/script.sh\") | crontab -"
# コマンド実行のタイムアウト期間 (秒)。
command_timeout = 60
# Linux インスタンス用の Shell コマンド:RunShellScript。
command_type = "RunShellScript"
# コマンドを実行します。
request = ecs_20140526_models.RunCommandRequest()
request.region_id = region_id
request.type = command_type
# カスタムパラメーター機能を有効にします。
request.enable_parameter = True
# カスタムパラメーターの値を設定します。
request.parameters = {"cron": "0 2 * * *"}
request.command_content = command_content
request.instance_id = instance_ids
request.timeout = command_timeout
response = client.run_command(request)
print("execute_command result:", json.dumps(response.to_map()['body']))
if __name__ == "__main__":
main()
OOS パラメーターの使用
CloudOps Orchestration Service (OOS) は、標準パラメーターと暗号化パラメーターをサポートするパラメーターストアを提供します。OOS パラメーターストアをクラウドアシスタントコマンドと使用することで、カスタムパラメーターをより便利かつ安全に管理できます。CloudOps Orchestration Service パラメーターストアを使用する前に、CloudOps Orchestration Service サービスを有効化する必要があります。詳細については、「CloudOps Orchestration Service とは」をご参照ください。
標準パラメーターの使用
コマンドに機密データが含まれていない場合は、標準パラメーターを使用できます。このセクションでは、OOS パラメーターストアの標準パラメーターをクラウドアシスタントコマンドで使用して、Linux インスタンスに新しいユーザーを追加する方法の例を説明します。
CloudOps Orchestration Service パラメーターストアで標準パラメーターを作成します。詳細については、「標準パラメーター」をご参照ください。
次の例は、値が `user01` の `username` という名前の標準パラメーターを追加する方法を示しています。必要に応じて値を変更できます。
名前
値の例
パラメーター名
username
パラメータータイプ
String
値
user01
API を呼び出してクラウドアシスタントコマンドを実行します。
Resource Access Management (RAM) ユーザーを使用して、クラウドアシスタントコマンドを実行し、Linux インスタンスに新しいユーザーを作成できます。コマンドの内容は
adduser {{oos:username}}です。このコマンドでは、{{oos:username}}が新しいユーザー名を指定し、これは OOS パラメーターストアの標準パラメーター `username` によって定義されます。説明OOS 標準パラメーターを含むクラウドアシスタントコマンドを実行するために、RAM ユーザーに必要な権限を付与する必要があります。アクセスポリシーの詳細については、「コマンドでの OOS 標準パラメーターの使用」をご参照ください。
import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.RunCommandRequest; import com.aliyun.ecs20140526.models.RunCommandResponse; import com.aliyun.teaopenapi.models.Config; import java.util.Arrays; import java.util.List; public class EcsService { public static void main(String[] args_) throws Exception { // リージョン ID String regionId = "cn-hangzhou"; Config config = new Config() .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) .setRegionId(regionId); Client ecsClient = new Client(config); RunCommandRequest request = new RunCommandRequest(); request.setRegionId(regionId); request.setType("RunShellScript"); // カスタムパラメーター機能を有効にします。 request.setEnableParameter(true); // 実行するコマンドの内容。 String commandContent = "adduser {{oos:username}}"; request.setCommandContent(commandContent); List<String> instanceIds = Arrays.asList("i-bp1h23xufsi8XXXXXXXX"); request.setInstanceId(instanceIds); // コマンド実行のタイムアウト期間。 request.setTimeout(60L); RunCommandResponse response = ecsClient.runCommand(request); System.out.println(new Gson().toJson(response.getBody())); } }import json import os from alibabacloud_ecs20140526 import models as ecs_20140526_models from alibabacloud_ecs20140526.client import Client as Ecs20140526Client from alibabacloud_tea_openapi import models as open_api_models ACCESS_KEY_ID = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") ACCESS_KEY_SECRET = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") def get_ecs_client(region_id): config = open_api_models.Config( access_key_id=ACCESS_KEY_ID, access_key_secret=ACCESS_KEY_SECRET, region_id=region_id ) return Ecs20140526Client(config) def main(): # リージョン ID region_id = "cn-hangzhou" client = get_ecs_client(region_id) # コマンドを実行する ECS インスタンスの ID。 instance_ids = ["i-bp1h23xufsi8XXXXXXXX"] # 実行するコマンドの内容。 command_content = "adduser {{oos:username}}" # コマンド実行のタイムアウト期間 (秒)。 command_timeout = 60 # Linux インスタンス用の Shell コマンド:RunShellScript。 command_type = "RunShellScript" # コマンドを実行します。 request = ecs_20140526_models.RunCommandRequest() request.region_id = region_id request.type = command_type # カスタムパラメーター機能を有効にします。 request.enable_parameter = True request.command_content = command_content request.instance_id = instance_ids request.timeout = command_timeout response = client.run_command(request) print("execute_command result:", json.dumps(response.to_map()['body'])) if __name__ == "__main__": main()
暗号化パラメーターの使用
パスワードなどの機密データがパラメーターに含まれる場合は、暗号化パラメーターを使用できます。暗号化パラメーターを使用するには、まず Key Management Service (KMS) を有効化する必要があります。詳細については、「Key Management Service とは」をご参照ください。
OOS パラメーターストアで暗号化パラメーターと標準パラメーターを作成します。詳細については、「暗号化パラメーター」および「標準パラメーター」をご参照ください。
次の例は、OOS パラメーターストアでユーザー名パラメーター `username` とパスワードパラメーター `password` を作成する方法を示しています。
値が `user01` の `username` という名前の標準パラメーターを追加します。必要に応じて値を変更できます。
名前
値の例
パラメーター名
username
パラメータータイプ
String
値
user01
値が `MyPassword01` の `password` という名前の暗号化パラメーターを追加します。必要に応じて値を変更できます。
名前
値の例
パラメーター名
password
KMS キー ID
デフォルトのサービス CMK
説明この値の例は、KMS によって生成された無料のサービスキーです。必要に応じてキーを選択してください。
値
MyPassword01
説明このパスワードはデモンストレーションのみを目的としています。本番環境では使用しないでください。
ターゲットの Elastic Compute Service (ECS) インスタンスに RAM ロールをアタッチします。
RAM ロールを作成します。詳細については、「信頼できる Alibaba Cloud サービス用の RAM ロールの作成」をご参照ください。
次の表に設定例を示します。
名前
例
信頼できるエンティティタイプ
クラウドサービスを選択します。
信頼できるエンティティ名
Elastic Compute Service / ECS。
[OK] をクリックします。ロール名を
AxtParametersRamRoleに設定します。RAM ロールのアクセスポリシーを作成します。詳細については、「カスタムポリシーの作成」をご参照ください。
ポリシー (AxtParametersRamPolicy) をアタッチして、RAM ロール (AxtParametersRamRole) に権限を付与します。詳細については、「RAM ロールへの権限付与」をご参照ください。
RAM ロール (AxtParametersRamRole) をターゲットの ECS インスタンスにアタッチします。詳細については、「RAM ロールを作成して ECS インスタンスにアタッチする」をご参照ください。
API を呼び出してクラウドアシスタントコマンドを実行します。
RAM ユーザーを使用して、Linux インスタンスのユーザーパスワードを変更するクラウドアシスタントコマンドを実行できます。コマンドの内容は次のとおりです:
echo '{{oos-secret:password}}' | passwd '{{oos:username}}' --stdinこのコマンドでは、
{{oos-secret:password}}が新しいパスワードを指定し、これは OOS パラメーターストアの暗号化パラメーター `password` によって定義されます。{{oos:username}}はユーザー名を指定し、これは OOS パラメーターストアの標準パラメーター `username` によって定義されます。説明OOS 暗号化パラメーターを含むクラウドアシスタントコマンドを実行するために、RAM ユーザーに必要な権限を付与する必要があります。アクセスポリシーの詳細については、「コマンドでの OOS 暗号化パラメーターの使用」をご参照ください。
import com.aliyun.ecs20140526.Client; import com.aliyun.ecs20140526.models.RunCommandRequest; import com.aliyun.ecs20140526.models.RunCommandResponse; import com.aliyun.teaopenapi.models.Config; import com.google.gson.Gson; import java.util.Arrays; import java.util.List; public class EcsService { public static void main(String[] args_) throws Exception { // リージョン ID String regionId = "cn-hangzhou"; Config config = new Config() .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) .setRegionId(regionId); Client ecsClient = new Client(config); RunCommandRequest request = new RunCommandRequest(); request.setRegionId(regionId); request.setType("RunShellScript"); // カスタムパラメーター機能を有効にします。 request.setEnableParameter(true); // 実行するコマンドの内容。 String commandContent = "echo '{{oos-secret:password}}' | passwd '{{oos:username}}' --stdin"; request.setCommandContent(commandContent); List<String> instanceIds = Arrays.asList("i-bp1h23xufsi8XXXXXXXX"); request.setInstanceId(instanceIds); // コマンド実行のタイムアウト期間。 request.setTimeout(60L); RunCommandResponse response = ecsClient.runCommand(request); System.out.println(new Gson().toJson(response.getBody())); } }import json import os from alibabacloud_ecs20140526 import models as ecs_20140526_models from alibabacloud_ecs20140526.client import Client as Ecs20140526Client from alibabacloud_tea_openapi import models as open_api_models ACCESS_KEY_ID = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") ACCESS_KEY_SECRET = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") def get_ecs_client(region_id): config = open_api_models.Config( access_key_id=ACCESS_KEY_ID, access_key_secret=ACCESS_KEY_SECRET, region_id=region_id ) return Ecs20140526Client(config) def main(): # リージョン ID region_id = "cn-hangzhou" client = get_ecs_client(region_id) # コマンドを実行する ECS インスタンスの ID。 instance_ids = ["i-bp1h23xufsi8XXXXXXXX"] # 実行するコマンドの内容。 command_content = "echo '{{oos-secret:password}}' | passwd '{{oos:username}}' --stdin" # コマンド実行のタイムアウト期間 (秒)。 command_timeout = 60 # Linux インスタンス用の Shell コマンド:RunShellScript。 command_type = "RunShellScript" # コマンドを実行します。 request = ecs_20140526_models.RunCommandRequest() request.region_id = region_id request.type = command_type # カスタムパラメーター機能を有効にします。 request.enable_parameter = True request.command_content = command_content request.instance_id = instance_ids request.timeout = command_timeout response = client.run_command(request) print("execute_command result:", json.dumps(response.to_map()['body'])) if __name__ == "__main__": main()
組み込み環境パラメーター
組み込み環境パラメーターは、カスタムパラメーターと同じ方法で使用できます。コマンドを実行する際に、これらのパラメーターに手動で値を割り当てる必要はありません。クラウドアシスタントは、実行中にこれらのパラメーターを対応する値に自動的に置き換えます。
組み込み環境パラメーター | 説明 |
{{ACS::RegionId}} | リージョン ID。 |
{{ACS::AccountId}} | Alibaba Cloud アカウントの UID。 |
{{ACS::InstanceId}} | インスタンス ID。複数のインスタンスでコマンドを実行し、
|
{{ACS::InstanceName}} | インスタンス名。複数のインスタンスでコマンドを実行し、
|
{{ACS::InvokeId}} | コマンド実行 ID。
|
{{ACS::CommandId}} | コマンド ID。RunCommand 操作を呼び出してコマンドを実行し、
|