在 CLI、Ruby、Python 和 Java 中使用 AMS API - AMS 進階使用者指南

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

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

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

如需 Python、Ruby 和 Java SDKs,請參閱適用於 Amazon Web Services 的工具並向下捲動至SDKs區段。每個 SDK 安裝程式都包含具有其他程式碼片段的 README。

AMS API 到 CLI 範例

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

建立 EC2 的 Python 範例

此範例說明如何從 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 模型。做為更具體的 re: packaging 範例,以下是 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 函數程式碼範例 (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 範例

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

    }