华为云提供了AOS服务端SDK,您可以直接集成服务端SDK来调用资源编排的相关API,从而实现对资源的快速操作。 该示例展示了如何通过Java语言版本AOS SDK使用资源栈快速创建您的资源。
使用maven安装华为云Aos Java SDK:
<dependency>
<groupId>com.huaweicloud.sdk</groupId>
<artifactId>huaweicloud-sdk-aos</artifactId>
<version>3.1.49</version>
</dependency>
声明您的Access Key、Secret Key、VPC资源的HCL语法模板以及您的资源栈名称。
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
// 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
String ak = System.getenv("HUAWEICLOUD_SDK_AK");
String sk = System.getenv("HUAWEICLOUD_SDK_SK");
/*stack以project_id为单位进行管理*/
String projectId = "<YOUR PROJECT ID>";
/*HCL语法文本描述文件,支持tf、tf.json文件格式*/
String templateBody = "<YOUR TEMPLATE>";
/*stack_name是唯一的,用于标识您的资源栈*/
String stackName = "<YOUR STACK NAME>";
通过AOS SDK创建一个Client,资源编排服务为region级别服务,将在您选择的region下生成目标资源。
ICredential auth = new BasicCredentials()
.withProjectId(projectId)
.withAk(ak)
.withSk(sk);
/*资源栈及其资源将创建在此region下,此处以CN_NORTH_4为例*/
AosClient client = AosClient.newBuilder()
.withCredential(auth)
.withRegion(AosRegion.CN_NORTH_4)
.build();
您可以使用CreateStack单独创建资源栈。
public static String createStack(AosClient client, String stackName) {
CreateStackRequest createStackRequest = new CreateStackRequest();
createStackRequest.setClientRequestId(UUID.randomUUID().toString());
CreateStackRequestBody createStackRequestBody = new CreateStackRequestBody();
createStackRequestBody.setStackName(stackName);
createStackRequest.setBody(createStackRequestBody);
CreateStackResponse createStackResponse;
try {
createStackResponse = client.createStack(createStackRequest);
System.out.println("create stack return: " + createStackResponse.toString());
return createStackResponse.getStackId();
} catch (ClientRequestException e) {
System.out.println("create stack failed with exception: " + e);
throw e;
}
}
接下来您可以使用DeployStack部署资源栈,在此步骤你可以传入templateBody或templateUri,这将会触发部署资源栈,生成您HCL模板中的目标资源。若您想要传入多文件类型的模板,请使用templateUri传入zip包。
public static void deployStack(AosClient client, String stackName, String stackId, String templateBody) {
DeployStackRequest deployStackRequest = new DeployStackRequest();
deployStackRequest.setClientRequestId(UUID.randomUUID().toString());
deployStackRequest.setStackName(stackName);
DeployStackRequestBody deployStackRequestBody = new DeployStackRequestBody();
deployStackRequestBody.setTemplateBody(templateBody);
deployStackRequestBody.setStackId(stackId);
deployStackRequest.setBody(deployStackRequestBody);
try {
DeployStackResponse deployStackResponse = client.deployStack(deployStackRequest);
System.out.println("deploy stack return: " + deployStackResponse.toString());
} catch (ClientRequestException e) {
System.out.println("deploy stack failed with exception: " + e);
throw e;
}
}
DeployStack需要花费一段时间,资源编排将在后台为您异步处理请求,您可以通过GetStackMetadata来获取详细信息
public static void getStackMetadata(AosClient client, String stackName, String stackId) {
GetStackMetadataRequest getStackMetadataRequest = new GetStackMetadataRequest();
getStackMetadataRequest.setClientRequestId(UUID.randomUUID().toString());
getStackMetadataRequest.setStackName(stackName);
getStackMetadataRequest.setStackId(stackId);
long startTime = System.currentTimeMillis();
while (true) {
long nowTime = System.currentTimeMillis();
if (nowTime - startTime > timeoutInterval) {
System.out.println("deploy stack time out and will be exit");
throw new RuntimeException("deploy stack time out");
}
System.out.println("waiting for deploy stack ...");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
System.out.println("waiting for deploy stack throw exception: " + Arrays.toString(e.getStackTrace()));
throw new RuntimeException("waiting for deploy stack throw exception");
}
GetStackMetadataResponse getStackMetadataResponse = client.getStackMetadata(getStackMetadataRequest);
if (getStackMetadataResponse.getStatus() != GetStackMetadataResponse.StatusEnum.DEPLOYMENT_IN_PROGRESS) {
System.out.println("get stack metadata return: " + getStackMetadataResponse);
break;
}
System.out.println("deploy stack in progress...");
}
}
您可以通过ListStackResource来获得生成的资源详细信息。
public static void listStackResource(AosClient client, String stackName, String stackId) {
ListStackResourcesRequest listStackResourcesRequest = new ListStackResourcesRequest();
listStackResourcesRequest.setClientRequestId(UUID.randomUUID().toString());
listStackResourcesRequest.setStackName(stackName);
listStackResourcesRequest.setStackId(stackId);
ListStackResourcesResponse listStackResourcesResponse = client.listStackResources(listStackResourcesRequest);
System.out.println("list stack resources return: " + listStackResourcesResponse.toString());
}
您可以通过调用DeleteStack来删除资源栈并释放其生成的资源,资源编排将花费一段时间为您处理请求,同样可以使用GetStackMetadata来获取资源栈状态。
public static void deleteStack(AosClient client, String stackName) {
DeleteStackRequest deleteStackRequest = new DeleteStackRequest();
deleteStackRequest.setClientRequestId(UUID.randomUUID().toString());
deleteStackRequest.setStackName(stackName);
client.deleteStack(deleteStackRequest);
GetStackMetadataRequest getStackMetadataRequest = new GetStackMetadataRequest();
getStackMetadataRequest.setClientRequestId(UUID.randomUUID().toString());
getStackMetadataRequest.setStackName(stackName);
long startTime = System.currentTimeMillis();
while (true) {
long nowTime = System.currentTimeMillis();
if (nowTime - startTime > timeoutInterval) {
System.out.println("delete stack time out and will be exit");
throw new RuntimeException("delete stack time out");
}
System.out.println("waiting for delete stack ...");
try {
Thread.sleep(5000);
client.getStackMetadata(getStackMetadataRequest);
} catch (ClientRequestException e) {
if (e.getHttpStatusCode() == 404) {
System.out.println("delete complete!!!");
return;
}
System.out.println("delete stack throw exception: " + e);
throw e;
} catch (InterruptedException e) {
System.out.println("waiting for delete stack throw exception: " + Arrays.toString(e.getStackTrace()));
throw new RuntimeException("waiting for delete stack throw exception");
}
}
}
更多信息请参考API Explorer
发布日期 | 文档版本 | 修订说明 |
---|---|---|
2023-08-30 | 1.0 | 文档首次发布 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。