

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

# 聊天範例
<a name="examples-chat"></a>

Amazon Q 開發人員聊天可協助開發人員進行各種任務，包括編碼、測試和升級應用程式、診斷錯誤、執行安全性掃描和修正，以及最佳化 AWS 資源。本節說明與 Amazon Q 聊天如何在一般程式設計任務中支援開發人員，例如：
+ [詢問 AWS 服務](#services-chat)
+ [產生程式碼](#code-chat)
+ [產生單位測試](#tests-chat)
+ [說明程式碼](#explain-chat)

## 詢問 AWS 服務
<a name="services-chat"></a>

使用者可以詢問 Amazon Q Developer 有關 的問題 AWS 服務，例如尋找正確的服務或了解最佳實務。

### 有關 的聊天 AWS 服務
<a name="chat-services"></a>

使用者：

如果我需要降低成本，最適合用來執行工作負載的容器服務是什麼？

Amazon Q：

根據提供的資訊，您似乎正在尋找經濟實惠的容器服務來執行工作負載。在這種情況下，我會建議考慮使用 Fargate 來使用 Amazon Elastic Container Service (Amazon ECS)。[1]

Amazon ECS with Fargate 是容器的無伺服器運算引擎，可讓您執行容器，而無需管理任何基礎基礎設施。使用 Fargate，您不需要佈建或管理伺服器，Fargate 會為您處理。這有助於降低成本，因為您只需要支付容器實際使用的運算資源，而不必支付閒置伺服器容量的費用。【2】

搭配 Fargate 使用 Amazon ECS 的一些主要優點：

• 不需要管理伺服器或叢集 – Fargate 會為您處理基礎設施佈建和管理。

• Pay-as-you-go定價 – 您只需為容器使用的運算資源付費，而不必為閒置容量付費。

• 自動擴展 – Fargate 可以根據需求自動擴展和縮減您的容器。

• 與其他 緊密整合， AWS 服務 例如負載平衡、記錄和監控。

所提供的資源也提到 ECS 服務在容器排程和置放方面提供靈活性，這有助於進一步最佳化您的成本。

建議您在 AWS 網站上檢閱 Amazon ECS 搭配 Fargate 的定價詳細資訊，以根據您的特定工作負載需求更清楚成本。當然，如果您有任何其他問題，請隨時通知我！

來源

【1】 哪種 AWS 容器服務最適合您？

aptgetops.tech > [aws-container-services-which-one-is-right-for-you](https://aptgetops.tech/aws-container-services-which-one-is-right-for-you)

【2】 非 HTTP 工作負載的Java容器選項

https：// > 問題 > [43417016](https://stackoverflow.com/questions/43417016/java-container-options-for-non-http-worloads)

**結束有關 的 Amazon Q 聊天 AWS 服務**

## 產生程式碼
<a name="code-chat"></a>

使用者可以要求 Amazon Q Developer 協助撰寫程式碼片段。

### 有關編寫程式碼的聊天
<a name="chat-writing"></a>

使用者：

是否可以提供如何使用 列出所有 S3 儲存貯體的範例 適用於 Python (Boto) 的 AWS SDK？

Amazon Q：

當然，以下範例說明如何使用 適用於 Python (Boto) 的 AWS SDK【1】 列出所有 S3 儲存貯體：

```
import boto3
# Create an S3 client
s3 = boto3.client('s3')

# List all the buckets
response = s3.list_buckets()

# Print the name of each bucket
for bucket in response['Buckets']:
    print(bucket['Name'])
```

以下是程式碼的運作方式：

1. 我們首先匯入 boto3 程式庫，這是適用於 Python 的 SDK。

1. 我們會使用 建立 S3 用戶端`boto3.client('s3')`。

1. 我們在 S3 用戶端上呼叫 `list_buckets()`方法，傳回包含帳戶中所有儲存貯體清單的回應。

1. 然後，我們會逐一查看回應中的`Buckets`清單，並列印每個儲存貯體的名稱。

這是基本範例，但 適用於 Python (Boto) 的 AWS SDK 提供許多更進階的功能來使用 Amazon S3，例如建立、刪除和管理儲存貯體中的物件、設定儲存貯體政策等。您可以在 適用於 Python (Boto) 的 AWS SDK) 文件中找到更多範例和文件。【2】

請記住，使用 時 AWS 服務，請務必遵循處理登入資料和敏感資訊的最佳實務，例如將存取金鑰存放在 AWS 環境變數中，而不是在程式碼中硬式編碼。

來源：【1】 [使用 SDK for Python (Boto3) 的 Amazon S3 範例 - AWS SDK 程式碼範例 docs.aws.amazon.com > code-library > latest-1x > ... > python-s3.html](https://docs.aws.amazon.com/code-library/latest/ug/python_3_s3_code_examples.html)

【2】 [使用 AWS SDK - AWS SDK 程式碼範例開始使用 Amazon S3 儲存貯體和物件 docs.aws.amazon.com > code-library > latest-1x > ... > s3\_example\_s3\_buckets\_GettingStarted\_sect...](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example_s3_Scenario_GettingStarted_section.html)

**結束有關編寫程式碼的 Amazon Q 聊天**

## 產生單位測試
<a name="tests-chat"></a>

使用者可以將選取的程式碼做為提示傳送給 Amazon Q Developer，其中會套用其他指示，例如產生單位測試。如需step-by-step說明，請參閱《[Amazon Q 開發人員使用者指南》中的將程式碼傳送至](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/explain-update-code.html#send-code) *Amazon Q*。

### 單元測試相關聊天
<a name="chat-unit"></a>

使用者：

使用模擬資料撰寫下列函數的單元測試：

```
 // poll messages from Amazon SQS queue name
    public List<String> pollMessages(String queueName) {
        List<String> messages = new ArrayList<>();
        // poll messages from queue
        ReceiveMessageResult = sqsClient.receiveMessage(new ReceiveMessageRequest().
        for (Message : receiveMessageResult.getMessages()) {
            messages.add(message.getBody());
        }
        return messages;
        }
```

Amazon Q：

若要使用 pollMessages 函數的模擬資料撰寫單位測試，我們可以使用模擬架構，例如 Mockito。範例如下：

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.model.Message;
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
import com.amazonaws.services.sqs.model.ReceiveMessageResult;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

import java.util.Arrays;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;

@ExtendWith(MockitoExtension.class)
public class SQSUtilsTest {

    @Mock
    private AmazonSQS sqsClient;

    @InjectMocks
    private SQSUtils sqsUtils;

    @Test
    public void testPollMessages() {
        // Arrange
        String queueName = "test-queue";
        Message message1 = new Message().withBody("message1");
        Message message2 = new Message().withBody("message2");
        ReceiveMessageResult receiveMessageResult = new ReceiveMessageResult().withMessages(message1, message2);
        Mockito.when(sqsClient.receiveMessage(new ReceiveMessageRequest().withQueueUrl(queueName)))
                .thenReturn(receiveMessageResult);

        // Act
        List<String> messages = sqsUtils.pollMessages(queueName);

        // Assert
        assertEquals(Arrays.asList("message1", "message2"), messages);
    }
}
```

在此範例中，我們使用 Mockito 來模擬 AmazonSQS 用戶端，並設定 receiveMessage 方法的預期行為，以便傳回兩個模擬訊息，其中包含「message1」和「message2」內文。然後，我們呼叫 pollMessages 方法，並宣告傳回的訊息清單符合預期值。

關鍵點為：

1. 我們使用 @ExtendWith(MockitoExtension.class) 註釋來啟用 Mockito 與 JUnit 的整合。

1. 我們使用 @Mock 註釋來建立 AmazonSQS 用戶端的模擬執行個體。

1. 我們使用 @InjectMocks 註釋將模擬 AmazonSQS 用戶端插入 SQSUtils 類別。

1. 在測試方法中，我們使用 Mockito.when().thenReturn() 設定 receiveMessage 方法的預期行為。

1. 我們呼叫 pollMessages 方法，並宣告傳回的訊息清單符合預期值。

這種方法可讓我們在不實際與 Amazon SQS 服務互動的情況下測試 pollMessages 方法，這可讓測試更快、更可靠。

**結束**有關**單元測試的 Amazon Q 聊天**

## 說明程式碼
<a name="explain-chat"></a>

對於程式碼檢閱程序，開發人員可以將程式碼選取項目傳送至 Amazon Q Developer，以進一步了解程式碼。此外，Amazon Q 提供的說明也可以用於文件目的。在下列範例中，Amazon Q 會使用 函數說明處理常式 AWS Lambda 函數，然後提出 Docstring。

### 有關解釋程式碼的聊天
<a name="chat-explain"></a>

使用者：

說明我程式碼的下列部分：

```
def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb')
    s3_client = boto3.client('s3')
    table = dynamodb.Table('DYNAMODB_TABLE')
    # Get s3 object from the event
    print(event)
    print(context)
    # get object from event
    bucket_key = event['Records'][0]['s3']['object']['key']
    object_key = unquote_plus(bucket_key)
    fullText = detect_text(object_key, bucket)

    response = s3_client.head_object(Bucket=bucket, Key=object_key)
    print(response)
    print(fullText)
    metadata = response['ResponseMetadata']
    metadata = json.dumps(metadata)

    now = datetime.now()
    current_time = now.strftime("%A %d %B, %Y %H:%M:%S")
    print("Current Time =", current_time + "\n\n")
    reason, outcome = detect_restaurant_closure(fullText, current_time)
    table.put_item(
        Item={
            'id': object_key,
            'creationTime': now.strftime("%Y-%m-%d %H:%M:%S"),
            'reason': reason,
            'text': fullText,
            'metadata': metadata
        }
    )
```

Amazon Q：

提供的程式碼區塊似乎是寫入 的 AWS Lambda 函數Python。讓我解釋此程式碼的關鍵層面：

1. 函數名為 lambda\_handler，是 Lambda 函數的進入點。

1. 它使用 boto3 程式庫與 AWS DynamoDB 和 S3 服務互動。

1. 函數會從傳入的事件資料擷取 S3 物件金鑰和儲存貯體名稱。

1. 然後，它會呼叫 detect\_text 函數 （未顯示在提供的程式碼中） 來擷取 S3 物件的完整文字內容。

1. 函數也會使用 head\_object 方法擷取 S3 物件的中繼資料。

1. 然後，它會擷取目前的時間，並呼叫 detect\_restaurant\_closure 函數 （也未顯示），根據擷取的文字來判斷餐廳關閉的原因和結果。

1. 最後，函數會將下列資訊存放在 DynamoDB 資料表中：
   + 做為 ID 的 S3 物件金鑰
   + 建立時間
   + 餐廳關閉的原因和結果
   + 擷取的 S3 物件文字

整體而言，此 Lambda 函數似乎是處理 S3 物件、擷取文字內容、分析餐廳關閉資訊，以及將結果存放在 DynamoDB 資料表中的大型系統的一部分。需要 detect\_text 和 detect\_restaurant\_closure 函數的特定詳細資訊，才能完全了解此程式碼的功能。

**Amazon Q 回應結束**

使用者：將此說明摘要為此 lambda\_handler 函數的 Docstring

Amazon Q：這是 lambda\_handler 函數的建議 Docstring【1】：

```
def lambda_handler(event, context):
    """
    AWS Lambda function that processes an S3 object, extracts text content, analyzes it, and stores the results.
    Args:
        event (dict): The event data that triggered the Lambda function, containing information about the S3 object.
        context (object): The context object provided by AWS Lambda, containing information about the runtime environment.
    
    Returns:
        None
    """
    
    # function implementation details...
```

此 docstring 提供函數用途的高階摘要、預期的輸入參數，以及預期的傳回值 （或缺少此值）。它可讓使用者清楚了解 lambda\_handler 函數的功能，而無需深入了解實作詳細資訊。

來源：【1】 在 C\# - AWS Lambda [https://docs.aws.amazon.com/lambda/latest/dg/csharp-handler.html 中定義 Lambda 函數處理常式 - ：\~：text=Lambda 函數處理常式為、結束或逾時。](https://docs.aws.amazon.com/lambda/latest/dg/csharp-handler.html#:~:text=The%20Lambda%20function%20handler%20is,%2C%20exits%2C%20or%20times%20out.)

**有關解釋程式碼的 Amazon Q 聊天結束**