在 CLI、Ruby、Python 和 Java 中使用 AMS API - AMS 高级用户指南

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 CLI、Ruby、Python 和 Java 中使用 AMS API

以下是 AMS API ListChangeTypeClassificationSummaries 操作的所有可用语言的代码片段列表。

有关 Python、Ruby 和 Java SDKs 的信息,请参阅亚马逊 Web Services 工具,然后向下滚动到该 SDKs 部分。每个 SDK 安装程序都包含一个带有其他代码片段的自述文件。

AMS API 到 CLI 示例

安装 AMS CLI(需要 CL AWS I;请参阅安装或升级 AMS CLI)后,您可以运行任何 AMS API 操作,方法是重新调整调用,指定哪个 AMS API aws amscmaws amsskms,然后使用连字符代替驼峰大小写。最后,提供证书,例如 SAML。

要了解更多信息,请参阅使用 AWS 命令行界面

示例:

  • API: 'ChangeTypeClassificationSummaries[].[Category,Subcategory,Item,Operation,ChangeTypeId]'

  • CLI:amscm list-change-type-classification-summaries --query "ChangeTypeClassificationSummaries[*].[Category,Subcategory,Item,Operation,ChangeTypeId]" --output table

注意

如果您使用 SAML 进行身份验证,请aws --profile saml添加到命令的开头。例如,

aws --profile saml amscm list-change-type-classification-summaries --query "ChangeTypeClassificationSummaries[*].[Category,Subcategory,Item,Operation,ChangeTypeId]" --output table

AMS API 到 Python 示例

要在 Python 中使用 AMS API,请安装 AMS CLI 并安装 boto3。按照以下步骤进行操作:

  1. 安装 AMS CLI。请参阅安装或升级 AMS CLI

  2. 安装适用于 Python 的 AWS 软件开发工具包 boto3。欲了解更多信息,请参阅这篇博客文章现已推出 — 适用于 Python 的 AWS SDK (Boto3)。

    import boto3

  3. 获取 AMS 变更管理客户端:

    cm = boto3.client('amscm')

  4. 获取 AMS CTs:

    cts = cm.list_change_type_classification_summaries()

    print(cts)

Python 示例

以下是一些在 AMS 中使用 Python、要创建 EC2 实例、 and/or 使用 Lambda 的示例。

创建一个 Python 示例 EC2

此示例展示了如何在 Python 代码中使用 amscm RESTFul API 来归档和执行 RFC 流程。

  1. 将 AMS CLI 安装在您可以访问的地方;您需要它提供的文件。

  2. 调用 Python 库并创建 EC2 实例:

    import boto3 import json import time # Create the amscm client cm = boto3.client('amscm') # Define the execution parameters for EC2 Create AMSExecParams = { "Description": "EC2-Create", "VpcId": "VPC_ID", "Name": "My-EC2", "TimeoutInMinutes": 60, "Parameters": { "InstanceAmiId": "INSTANCE_ID", "InstanceSubnetId": "SUBNET_ID" } } # Create the AMS RFC cts = cm.create_rfc( ChangeTypeId="ct-14027q0sjyt1h", ChangeTypeVersion="3.0", Title="Python Code RFC Create", ExecutionParameters=json.dumps(AMSExecParams) ) # Extract the RFC ID from the response NewRfcID = cts['RfcId'] # Submit the RFC RFC_Submit_Return=cm.submit_rfc(RfcId=NewRfcID) # Check the RFC status every 30 seconds RFC_Status = cm.get_rfc(RfcId=NewRfcID) RFC_Status_Code = RFC_Status['Rfc']['Status']['Name'] while RFC_Status_Code != "Success": if RFC_Status_Code == "PendingApproval": print(RFC_Status_Code) time.sleep(30) elif RFC_Status_Code == "InProgress": print(RFC_Status_Code) time.sleep(30) elif RFC_Status_Code == "Failure": print(RFC_Status_Code) break else: print(RFC_Status_Code) RFC_Status = cm.get_rfc(RfcId=NewRfcID) RFC_Status_Code = RFC_Status['Rfc']['Status']['Name']

使用 Lambda 的 Python 示例

此示例说明如何将 AMS 模型与您的代码捆绑在一起,以便您可以将其与 Lambda 一起使用,或者 EC2; 您不会或无法安装的地方。amscli

注意

AMS 不提供可导入的 AMS 专用的 Python SDK。amscli安装脚本在 CLI 的正常路径中安装 AMS 服务数据模型。对于 CLI 的使用和系统 Python 的使用,这没问题,因为两者都awscli从相同的默认位置boto3读取它们的服务模型(~/.aws/models)。但是,当您想在 Lambda(或任何其他非本地运行时)中通过 boto3 使用 AMS 服务时,它会中断,因为您不再拥有数据模型。以下是通过将数据模型与函数打包来解决此问题的方法。

你可以采取一些简单的步骤在 Lambda 或其他运行时(例如 EC2 Fargate 等)中运行集成了 AMS 的 Python 代码。以下工作流程显示了集成 AMS 的 Lambda 函数所需的步骤。

通过将数据模型添加到代码的部署包并更新 SDK 搜索路径,您可以模拟 SDK 体验。

重要

此示例和显示的所有非 python 命令均在 Mac 计算机上进行了测试。

工作流程示例

  1. 安装 amscli。这将在您的计算机 (Mac) ~/.aws/models 上创建一个文件夹。

  2. 将模型复制到本地目录:cp ~/.aws/models ./models.

  3. 将模型包含在代码的部署包中。

  4. 更新您的函数代码,将新模型添加到 SDK 路径中。请注意,此代码必须在导入 boto3 或 botocore 之前运行!

# Force Python to search local directory for boto3 data models import os os.environ['AWS_DATA_PATH'] = './models' import boto3 import botocore
注意

由于示例模型位于名为的目录中models,因此我们添加./models到 AWS_DATA _PATH。如果目录已命名/ams/boto3models,我们将添加以下代码:

import os.environ['AWS_DATA_PATH'] = './ams/boto3models' import boto3 import botocore

您的代码应该可以成功找到 AMS 模型。以下是关于:打包的更具体的示例,以下是 Lambda 的特定工作流程。

AMS Lambda 工作流程示例

这些步骤将前面的通用示例应用于创建 AWS Lambda 函数。

  1. 安装 amscli。这将在您的计算机 (Mac) ~/.aws/models 上创建一个文件夹。

  2. 将模型复制到本地目录:

    cp ~/.aws/models ./models
  3. 将模型添加到函数的部署 zip 文件中:

    zip -r9 function.zip ./models
重要

更新您的函数代码,将新模型添加到 SDK 路径中。请注意,此代码必须在导入 boto3 或 botocore 之前运行!

# Force Python to search local directory for boto3 data models import os os.environ['AWS_DATA_PATH'] = './models' import boto3 import botocore
注意

因为示例模型位于名为的目录中models,所以我们添加./models到 AWS_DATA _PATH。如果目录已命名/ams/boto3models,我们将添加以下代码:

import os os.environ['AWS_DATA_PATH'] = './ams/boto3models' import boto3 import botocore

现在,部署你的函数:

  1. 将您的函数代码添加到部署 zip 文件中(如果您尚未这样做):

    zip -g function.zip lambda-amscm-test.py
  2. 使用您创建的 zip 文件(控制台或 CLI)创建或更新您的函数:

    aws lambda update-function-code --function-name lambda-amscm-test --zip-file fileb://function.zip --region us-east-1

你的 AMS 集成的 Python Lambda 现在应该可以工作了。

注意

您的函数必须具有 IAM 权限,amscm否则会出现权限错误。

用于测试 amscm 的 Lambda 函数代码示例(.py 的内容): lambda-amscm-test

import json # Force lambda to search local directory for boto3 data models import os os.environ['AWS_DATA_PATH'] = './models' import boto3 import botocore def lambda_handler(event, context): use_session = boto3.session.Session(region_name="us-east-1") try: cm = use_session.client("amscm") cts = cm.list_change_type_categories() print(cts) except botocore.exceptions.UnknownServiceError: print("amscm not found") return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }

测试输出(成功)

函数响应:

{ "statusCode": 200, "body": "\"Hello from Lambda!\"" } Request ID: "1cea13c0-ed46-43b1-b102-a8ea28529c27"

函数日志:

START RequestId: 1cea13c0-ed46-43b1-b102-a8ea28529c27 Version: $LATEST {'ChangeTypeCategories': ['Deployment', 'Internal Infrastructure Management', 'Management'], 'ResponseMetadata': {'RequestId': 'e27276a0-e081-408d-bcc2-10cf0aa19ece', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'e27276a0-e081-408d-bcc2-10cf0aa19ece', 'content-type': 'application/x-amz-json-1.1', 'content-length': '89', 'date': 'Sun, 10 May 2020 23:21:19 GMT'}, 'RetryAttempts': 0}} END RequestId: 1cea13c0-ed46-43b1-b102-a8ea28529c27

Ruby 的 AMS API 示例

要在 Ruby 中使用 AMS API,请安装 Rub AWS y SDK 和 AMS CLI。按照以下步骤进行操作:

  1. 安装 AMS CLI。请参阅安装或升级 AMS CLI

  2. 安装 AWS Ruby 开发工具包。参见 Amazon Web Services 工具

  3. 使用以下命令配置 Ruby:

    require 'aws-sdk'

    config = {

     region: 'us-east-1',

     credentials: Aws::Credentials.new('ACCESS_KEY','SECRET_KEY')}

  4. 获取 AMS CTs:

    ams_cm = Aws::amscm::Client.new(config)

    cts = ams_cm.list_change_type_classification_summaries

    print(cts)

AMS API 转 Java 示例

要在 Java 中使用 AMS API,请安装 Jav AWS a SDK 和 AMS CLI。按照以下步骤进行操作:

  1. 安装 AMS CLI。请参阅安装或升级 AMS CLI

  2. 安装 AWS Java 开发工具包。参见 Amazon Web Services 工具

  3. 使用以下命令配置 Java:

    import com.amazonaws.auth.BasicAWSCredentials;

    import com.amazonaws.services.amscm.model.AWSManagedServicesCMClient;

    import com.amazonaws.services.amscm.model.ListChangeTypeClassificationSummariesRequest;

    import com.amazonaws.services.amscm.model.ListChangeTypeClassificationSummariesResult;

    public static void getChangeTypeClassificationSummaries() {

  4. 设置凭证。我们建议您不要对此进行硬编码。

    final BasicAWSCredentials awsCredsCm =

     new BasicAWSCredentials("ACCESS_KEY", "SECRET_KEY");

  5. 创建 AMS 变更管理客户端:

    final AWSManagedServicesCMClient cmClient =

     new AWSManagedServicesCMClient(awsCredsCm);

  6. 获取 AMS CTs:

    final ListChangeTypeClassificationSummariesRequest listCtsRequest = new ListChangeTypeClassification SummariesRequest();

    final ListChangeTypeClassificationSummariesResult listCtsResult =

    cmClient.listChangeTypeClassificationSummaries(listCtsRequest);

    System.out.println("List of CTs");

    listCtsResult.getChangeTypeClassificationSummaries().stream()

    .map(x -> x.getCategory() + "/" + x.getSubcategory() + "/" + x.getItem() + "/" + x.getOperation())

    .forEach(System.out::println);

    }