

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

以下是所有可用語言的 AMS API `ListChangeTypeClassificationSummaries`操作程式碼片段清單。

如需 Python、Ruby 和 Java SDKs，請參閱[適用於 Amazon Web Services 的工具](https://aws.amazon.com/tools/)並向下捲動至SDKs區段。每個 SDK 安裝程式都包含具有其他程式碼片段的 README。

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

安裝 AMS CLI （需要 AWS CLI；請參閱 [安裝或升級 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. 安裝 boto3，適用於 Python 的 AWS SDK。如需詳細資訊，請參閱此部落格文章[現已推出 – AWS SDK for Python (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 執行個體和/或使用 Lambda 的一些範例。

#### 建立 EC2 的 Python 範例
<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 模型。做為更具體的 re： packaging 範例，以下是 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 函數程式碼範例 (lambda-amscm-test.py 的內容）**：

```
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
```

## AMS API 到 Ruby 範例
<a name="ruby-list-ct-summaries"></a>

若要搭配 Ruby 使用 AMS API，請安裝 AWS Ruby 開發套件和 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，請安裝 AWS Java 開發套件和 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);`

   `}`