

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

# 在 CLI、Ruby、Python 和 Java 中使用 AMS API
<a name="sent-api-ruby-python-java"></a>

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

有关 Python、Ruby 和 Java SDKs 的信息，[请参阅亚马逊 Web Services 工具](https://aws.amazon.com/tools/)，然后向下滚动到该 SDKs 部分。每个 SDK 安装程序都包含一个带有其他代码片段的自述文件。

## AMS API 到 CLI 示例
<a name="cli-list-ct-summaries"></a>

安装 AMS CLI（需要 CL AWS I；请参阅[安装或升级 AMS CLI](understand-sent-api.md#install-sent-cli)）后，您可以运行任何 AMS API 操作，方法是重新调整调用，指定哪个 AMS API `aws amscm` 或`aws amsskms`，然后使用连字符代替驼峰大小写。最后，提供证书，例如 SAML。

 要了解更多信息，请参阅[使用 AWS 命令行界面](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-using.html)。

示例：
+ 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 示例
<a name="python-list-ct-summaries"></a>

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

1. 安装 AMS CLI。请参阅[安装或升级 AMS CLI](understand-sent-api.md#install-sent-cli)。

1. 安装适用于 Python 的 AWS 软件开发工具包 boto3。欲了解更多信息，请参阅这篇博客文章[现已推出 — 适用于 Python 的 AWS SDK (Boto3](https://aws.amazon.com/blogs/aws/now-available-aws-sdk-for-python-3-boto3/))。

   `import boto3`

1. 获取 AMS 变更管理客户端：

   `cm = boto3.client('amscm')`

1. 获取 AMS CTs：

   `cts = cm.list_change_type_classification_summaries()`

   `print(cts)`

### Python 示例
<a name="python-examples"></a>

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

#### 创建一个 Python 示例 EC2
<a name="python-examples-create-ec2"></a>

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

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

1. 调用 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 示例
<a name="python-examples-lambda"></a>

此示例说明如何将 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` 上创建一个文件夹。

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

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

1. 更新您的函数代码，将新模型添加到 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` 上创建一个文件夹。

1. 将模型复制到本地目录：

   ```
   cp ~/.aws/models ./models
   ```

1. 将模型添加到函数的部署 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
   ```

1. 使用您创建的 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 示例
<a name="ruby-list-ct-summaries"></a>

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

1. 安装 AMS CLI。请参阅[安装或升级 AMS CLI](understand-sent-api.md#install-sent-cli)。

1. 安装 AWS Ruby 开发工具包。参见 [Amazon Web Services 工具](https://aws.amazon.com/tools/)。

1. 使用以下命令配置 Ruby：

   `require 'aws-sdk'`

   `config = { `

   ` region: '{{us-east-1}}',`

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

1. 获取 AMS CTs：

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

   `cts = ams_cm.list_change_type_classification_summaries`

   `print(cts)`

## AMS API 转 Java 示例
<a name="java-list-ct-summaries"></a>

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

1. 安装 AMS CLI。请参阅[安装或升级 AMS CLI](understand-sent-api.md#install-sent-cli)。

1. 安装 AWS Java 开发工具包。参见 [Amazon Web Services 工具](https://aws.amazon.com/tools/)。

1. 使用以下命令配置 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() {`

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

   `final BasicAWSCredentials awsCredsCm = `

   ` new BasicAWSCredentials("{{ACCESS_KEY}}", "{{SECRET_KEY}}");`

1. 创建 AMS 变更管理客户端：

   `final AWSManagedServicesCMClient cmClient =`

   ` new AWSManagedServicesCMClient(awsCredsCm);`

1. 获取 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);`

   `}`