教學課程:使用 Amazon S3 觸發條件調用 Lambda 函數 - AWS Lambda

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

教學課程:使用 Amazon S3 觸發條件調用 Lambda 函數

在本教學課程中,您將使用主控台建立 Lambda 函數,並設定 Amazon Simple Storage Service (Amazon S3) 儲存貯體的觸發條件。每次將物件新增到 Amazon S3 儲存貯體時,您的函數都會執行並將物件類型輸出到 Amazon CloudWatch 日誌。


      顯示 Amazon S3 儲存貯體、Lambda 函數和 Amazon  CloudWatch  日誌之間的資料流程圖

本教學課程示範如何:

  1. 建立 Amazon S3 儲存貯體。

  2. 建立一個 Lambda 函數,用於傳回 Amazon S3 儲存貯體物件的物件類型。

  3. 設定一個 Lambda 觸發條件,用於在有物件上傳至儲存貯體時調用函數。

  4. 先使用虛擬事件測試函數,再使用觸發條件進行測試。

完成這些步驟後,您將了解如何設定 Lambda 函數,讓函數在 Amazon S3 儲存貯體中有物件新增或刪除時執行。您只能使用  AWS Management Console 來完成本教學課程。

必要條件

如果您沒有 AWS 帳戶,請完成以下步驟來建立一個。

若要註冊成為 AWS 帳戶
  1. 開啟 https://portal.aws.amazon.com/billing/signup

  2. 請遵循線上指示進行。

    部分註冊程序需接收來電,並在電話鍵盤輸入驗證碼。

    當您註冊一個時 AWS 帳戶,將創建AWS 帳戶根使用者一個。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,將管理存取權指派給管理使用者,並且僅使用根使用者來執行 需要根使用者存取權的任務

AWS 註冊過程完成後,會向您發送確認電子郵件。您可以隨時登錄 https://aws.amazon.com/ 並選擇 我的帳戶,以檢視您目前的帳戶活動並管理帳戶。

註冊後,請保護您的 AWS 帳戶 AWS 帳戶根使用者 AWS IAM Identity Center、啟用和建立系統管理使用者,這樣您就不會將 root 使用者用於日常工作。

保護您的 AWS 帳戶根使用者
  1. 選擇 Root 使用者並輸入您的 AWS 帳戶 電子郵件地址,以帳戶擁有者身分登入。AWS Management Console在下一頁中,輸入您的密碼。

    如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入

  2. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

    如需指示,請參閱《IAM 使用者指南》的為 AWS 帳戶 根使用者啟用虛擬 MFA 裝置 (主控台)

建立管理使用者
  1. 啟用 IAM Identity Center。

    如需指示,請參閱 AWS IAM Identity Center 使用者指南中的啟用 AWS IAM Identity Center

  2. 在 IAM Identity Center 中,將管理權限授予管理使用者。

    若要取得有關使用 IAM Identity Center 目錄 做為身分識別來源的自學課程,請參閱《使用指南》 IAM Identity Center 目錄中的「以預設值設定使用AWS IAM Identity Center 者存取」。

以管理員的身分簽署

建立 Amazon S3 儲存貯體


        教學課程工作流程圖顯示您正在進行建立儲存貯體的 Amazon S3 儲存貯體步驟
建立 Amazon S3 儲存貯體
  1. 開啟 Amazon S3 主控台,然後選取儲存貯體頁面。

  2. 選擇 建立儲存貯體

  3. General configuration (一般組態) 下,執行下列動作:

    1. 請在儲存貯體名稱輸入符合 Amazon S3 儲存貯體命名規則的全域唯一名稱。儲存貯體名稱只能包含小寫字母、數字、句點 (.) 和連字號 (-)。

    2. 對於 AWS 區域,選擇一個區域。在本教學課程稍後的階段,您必須在同一區域中建立 Lambda 函數。

  4. 其他所有選項維持設為預設值,然後選擇建立儲存貯體

將測試物件上傳至儲存貯體


        教學課程工作流程圖顯示您正在進行上傳測試物件的 Amazon S3 儲存貯體步驟
上傳測試物件
  1. 開啟 Amazon S3 主控台的儲存貯體頁面,然後選擇您在上一個步驟中建立的儲存貯體。

  2. 選擇上傳

  3. 選擇「新增檔案」,然後選取您要上載的物件。您可以選取任何檔案 (例如,HappyFace.jpg)。

  4. 選擇開啟,然後選擇上傳

稍後在教學課程中,您將使用此物件測試 Lambda 函數。

建立許可政策


        教學課程工作流程圖顯示您正在進行建立許可政策的 Lambda 函數步驟

建立允許 Lambda 從 Amazon S3 儲存貯體取得物件並寫入 Amazon CloudWatch 日誌的許可政策。

建立政策
  1. 開啟 IAM 主控台中的 政策 頁面。

  2. 選擇 建立政策

  3. 選擇 JSON 索引標籤,然後將下列政策貼到 JSON 編輯器。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogGroup", "logs:CreateLogStream" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::*/*" } ] }
  4. 選擇 下一步:標籤

  5. 選擇 下一步:檢閱

  6. 檢閱政策 下,針對政策 名稱 ,輸入 s3-trigger-tutorial

  7. 選擇 建立政策

建立執行角色


        教學課程工作流程圖顯示您正在進行建立執行角色的 Lambda 函數步驟

執行角色是一種 AWS Identity and Access Management (IAM) 角色,可授與 Lambda 函數存取 AWS 服務和資源的權限。在此步驟中,使用您在上一個步驟中建立的權限原則建立執行角色。

建立執行角色並附加自訂許可政策
  1. 開啟 IAM 主控台中的 角色頁面

  2. 選擇 建立角色

  3. 信任的實體類型請選擇 AWS 服務,使用案例則選擇 Lambda

  4. 選擇 下一步

  5. 在政策搜尋方塊中,輸入 s3-trigger-tutorial

  6. 在搜尋結果中,選取您建立的政策 (s3-trigger-tutorial),然後選擇 下一步

  7. 角色詳細資料 底下,角色名稱 請輸入 lambda-s3-trigger-role,然後選擇 建立角色

建立 Lambda 函式


        教學課程工作流程圖顯示您正在進行建立函數的 Lambda 函數步驟

使用 Python 3.12 執行階段,在主控台中建立 Lambda 函數。

建立 Lambda 函數
  1. 開啟 Lambda 主控台中的函數頁面

  2. 請確定您在建立 Amazon S3 儲存貯體的相同 AWS 區域 內容中工作。您可使用螢幕頂端的下拉式清單來變更區域。

    
            此圖顯示 Lambda 主控台下拉式區域選單
  3. 選擇建立函數

  4. 選擇從頭開始撰寫

  5. 基本資訊下,請執行下列動作:

    1. 函數名稱輸入 s3-trigger-tutorial

    2. 對於「執行階段」,請選擇 Python 3.12

    3. 對於 Architecture (架構),選擇 x86_64

  6. 變更預設執行角色索引標籤中,執行下列操作:

    1. 展開索引標籤,然後選擇使用現有角色

    2. 選擇您之前建立的 lambda-s3-trigger-role

  7. 選擇建立函數

部署函數程式碼


        教學課程工作流程圖顯示您正在進行部署程式碼的 Lambda 函數步驟

本教程使用 Python 3.12 運行時,但我們也提供了其他運行時的示例代碼文件。您可以在下列方塊中選取索引標籤,查看您感興趣的執行期程式碼。

Lambda 函數會從從 Amazon S3 接收到的event參數擷取上傳物件的金鑰名稱,以及儲存貯體的名稱。然後,函數會使用來自的 get_object 方法 AWS SDK for Python (Boto3) 來擷取物件的中繼資料,包括上載物件的內容類型 (MIME 類型)。

部署函數程式碼
  1. 在下面的框中選擇 Python 選項卡並複製代碼。

    .NET
    AWS SDK for .NET
    注意

    還有更多關於 GitHub。尋找完整範例,並了解如何在無伺服器範例儲存庫中設定和執行。

    使用 .NET 搭配 Lambda 來使用 S3 事件。

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 using System.Threading.Tasks; using Amazon.Lambda.Core; using Amazon.S3; using System; using Amazon.Lambda.S3Events; using System.Web; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace S3Integration { public class Function { private static AmazonS3Client _s3Client; public Function() : this(null) { } internal Function(AmazonS3Client s3Client) { _s3Client = s3Client ?? new AmazonS3Client(); } public async Task<string> Handler(S3Event evt, ILambdaContext context) { try { if (evt.Records.Count <= 0) { context.Logger.LogLine("Empty S3 Event received"); return string.Empty; } var bucket = evt.Records[0].S3.Bucket.Name; var key = HttpUtility.UrlDecode(evt.Records[0].S3.Object.Key); context.Logger.LogLine($"Request is for {bucket} and {key}"); var objectResult = await _s3Client.GetObjectAsync(bucket, key); context.Logger.LogLine($"Returning {objectResult.Key}"); return objectResult.Key; } catch (Exception e) { context.Logger.LogLine($"Error processing request - {e.Message}"); return string.Empty; } } } }
    Go
    SDK for Go V2
    注意

    還有更多關於 GitHub。尋找完整範例,並了解如何在無伺服器範例儲存庫中設定和執行。

    使用 Go 搭配 Lambda 來使用 S3 事件。

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 package main import ( "context" "log" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/s3" ) func handler(ctx context.Context, s3Event events.S3Event) error { sdkConfig, err := config.LoadDefaultConfig(ctx) if err != nil { log.Printf("failed to load default config: %s", err) return err } s3Client := s3.NewFromConfig(sdkConfig) for _, record := range s3Event.Records { bucket := record.S3.Bucket.Name key := record.S3.Object.URLDecodedKey headOutput, err := s3Client.HeadObject(ctx, &s3.HeadObjectInput{ Bucket: &bucket, Key: &key, }) if err != nil { log.Printf("error getting head of object %s/%s: %s", bucket, key, err) return err } log.Printf("successfully retrieved %s/%s of type %s", bucket, key, *headOutput.ContentType) } return nil } func main() { lambda.Start(handler) }
    Java
    適用於 Java 2.x 的 SDK
    注意

    還有更多關於 GitHub。尋找完整範例,並了解如何在無伺服器範例儲存庫中設定和執行。

    使用 Java 搭配 Lambda 來使用 S3 事件。

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 package example; import software.amazon.awssdk.services.s3.model.HeadObjectRequest; import software.amazon.awssdk.services.s3.model.HeadObjectResponse; import software.amazon.awssdk.services.s3.S3Client; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.S3Event; import com.amazonaws.services.lambda.runtime.events.models.s3.S3EventNotification.S3EventNotificationRecord; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Handler implements RequestHandler<S3Event, String> { private static final Logger logger = LoggerFactory.getLogger(Handler.class); @Override public String handleRequest(S3Event s3event, Context context) { try { S3EventNotificationRecord record = s3event.getRecords().get(0); String srcBucket = record.getS3().getBucket().getName(); String srcKey = record.getS3().getObject().getUrlDecodedKey(); S3Client s3Client = S3Client.builder().build(); HeadObjectResponse headObject = getHeadObject(s3Client, srcBucket, srcKey); logger.info("Successfully retrieved " + srcBucket + "/" + srcKey + " of type " + headObject.contentType()); return "Ok"; } catch (Exception e) { throw new RuntimeException(e); } } private HeadObjectResponse getHeadObject(S3Client s3Client, String bucket, String key) { HeadObjectRequest headObjectRequest = HeadObjectRequest.builder() .bucket(bucket) .key(key) .build(); return s3Client.headObject(headObjectRequest); } }
    JavaScript
    適用於 JavaScript (v3) 的開發套件
    注意

    還有更多關於 GitHub。尋找完整範例,並了解如何在無伺服器範例儲存庫中設定和執行。

    使用使 Lambda JavaScript.

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { S3Client, HeadObjectCommand } from "@aws-sdk/client-s3"; const client = new S3Client(); exports.handler = async (event, context) => { // Get the object from the event and show its content type const bucket = event.Records[0].s3.bucket.name; const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' ')); try { const { ContentType } = await client.send(new HeadObjectCommand({ Bucket: bucket, Key: key, })); console.log('CONTENT TYPE:', ContentType); return ContentType; } catch (err) { console.log(err); const message = `Error getting object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`; console.log(message); throw new Error(message); } };

    使用使 Lambda TypeScript.

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { S3Event } from 'aws-lambda'; import { S3Client, HeadObjectCommand } from '@aws-sdk/client-s3'; const s3 = new S3Client({ region: process.env.AWS_REGION }); export const handler = async (event: S3Event): Promise<string | undefined> => { // Get the object from the event and show its content type const bucket = event.Records[0].s3.bucket.name; const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' ')); const params = { Bucket: bucket, Key: key, }; try { const { ContentType } = await s3.send(new HeadObjectCommand(params)); console.log('CONTENT TYPE:', ContentType); return ContentType; } catch (err) { console.log(err); const message = `Error getting object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`; console.log(message); throw new Error(message); } };
    PHP
    適用於 PHP 的開發套件
    注意

    還有更多關於 GitHub。尋找完整範例,並了解如何在無伺服器範例儲存庫中設定和執行。

    使用 PHP 使用 Lambda 使用 S3 事件。

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 <?php use Bref\Context\Context; use Bref\Event\S3\S3Event; use Bref\Event\S3\S3Handler; use Bref\Logger\StderrLogger; require __DIR__ . '/vendor/autoload.php'; class Handler extends S3Handler { private StderrLogger $logger; public function __construct(StderrLogger $logger) { $this->logger = $logger; } public function handleS3(S3Event $event, Context $context) : void { $this->logger->info("Processing S3 records"); // Get the object from the event and show its content type $records = $event->getRecords(); foreach ($records as $record) { $bucket = $record->getBucket()->getName(); $key = urldecode($record->getObject()->getKey()); try { $fileSize = urldecode($record->getObject()->getSize()); echo "File Size: " . $fileSize . "\n"; // TODO: Implement your custom processing logic here } catch (Exception $e) { echo $e->getMessage() . "\n"; echo 'Error getting object ' . $key . ' from bucket ' . $bucket . '. Make sure they exist and your bucket is in the same region as this function.' . "\n"; throw $e; } } } } $logger = new StderrLogger(); return new Handler($logger);
    Python
    適用於 Python (Boto3) 的 SDK
    注意

    還有更多關於 GitHub。尋找完整範例,並了解如何在無伺服器範例儲存庫中設定和執行。

    使用 Python 搭配 Lambda 來使用 S3 事件。

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 import json import urllib.parse import boto3 print('Loading function') s3 = boto3.client('s3') def lambda_handler(event, context): #print("Received event: " + json.dumps(event, indent=2)) # Get the object from the event and show its content type bucket = event['Records'][0]['s3']['bucket']['name'] key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8') try: response = s3.get_object(Bucket=bucket, Key=key) print("CONTENT TYPE: " + response['ContentType']) return response['ContentType'] except Exception as e: print(e) print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket)) raise e
    Ruby
    適用於 Ruby 的開發套件
    注意

    還有更多關於 GitHub。尋找完整範例,並了解如何在無伺服器範例儲存庫中設定和執行。

    使用紅寶石與 Lambda 一個 S3 事件。

    require 'json' require 'uri' require 'aws-sdk' puts 'Loading function' def lambda_handler(event:, context:) s3 = Aws::S3::Client.new(region: 'region') # Your AWS region # puts "Received event: #{JSON.dump(event)}" # Get the object from the event and show its content type bucket = event['Records'][0]['s3']['bucket']['name'] key = URI.decode_www_form_component(event['Records'][0]['s3']['object']['key'], Encoding::UTF_8) begin response = s3.get_object(bucket: bucket, key: key) puts "CONTENT TYPE: #{response.content_type}" return response.content_type rescue StandardError => e puts e.message puts "Error getting object #{key} from bucket #{bucket}. Make sure they exist and your bucket is in the same region as this function." raise e end end
    Rust
    適用於 Rust 的 SDK
    注意

    還有更多關於 GitHub。尋找完整範例,並了解如何在無伺服器範例儲存庫中設定和執行。

    使用 Rust 搭配 Lambda 來使用 S3 事件。

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 use aws_lambda_events::event::s3::S3Event; use aws_sdk_s3::{Client}; use lambda_runtime::{run, service_fn, Error, LambdaEvent}; /// Main function #[tokio::main] async fn main() -> Result<(), Error> { tracing_subscriber::fmt() .with_max_level(tracing::Level::INFO) .with_target(false) .without_time() .init(); // Initialize the AWS SDK for Rust let config = aws_config::load_from_env().await; let s3_client = Client::new(&config); let res = run(service_fn(|request: LambdaEvent<S3Event>| { function_handler(&s3_client, request) })).await; res } async fn function_handler( s3_client: &Client, evt: LambdaEvent<S3Event> ) -> Result<(), Error> { tracing::info!(records = ?evt.payload.records.len(), "Received request from SQS"); if evt.payload.records.len() == 0 { tracing::info!("Empty S3 event received"); } let bucket = evt.payload.records[0].s3.bucket.name.as_ref().expect("Bucket name to exist"); let key = evt.payload.records[0].s3.object.key.as_ref().expect("Object key to exist"); tracing::info!("Request is for {} and object {}", bucket, key); let s3_get_object_result = s3_client .get_object() .bucket(bucket) .key(key) .send() .await; match s3_get_object_result { Ok(_) => tracing::info!("S3 Get Object success, the s3GetObjectResult contains a 'body' property of type ByteStream"), Err(_) => tracing::info!("Failure with S3 Get Object request") } Ok(()) }
  2. 在 Lambda 主控台的「程式碼原始碼」窗格中,將程式碼貼到 lambda_function.py 檔案中。

    
            主 Lambda 台程式碼編輯器。
  3. 選擇部署

建立 Amazon S3 觸發條件


        教學課程工作流程圖顯示您正在進行建立觸發條件的 S3 觸發條件步驟
若要建立 Amazon S3 觸發條件
  1. 函數概觀窗格中,選擇新增觸發條件

    
            Lambda 主控台功能概觀部分。
  2. 選取 S3

  3. 儲存貯體下,選取您在本教學課程中稍早建立的儲存貯體。

  4. 在 [事件類型] 下,確定已選取 [所有物件建立事件]。

  5. 遞迴調用下,選取核取方塊,確認您了解不建議使用相同的 Amazon S3 儲存貯體進行輸入和輸出作業。

  6. 選擇新增

使用虛擬事件來測試 Lambda 函數


        教學課程工作流程圖顯示您正在進行使用虛擬事件測試的測試步驟
使用虛擬事件來測試 Lambda 函數
  1. 在函數的 Lambda 主控台頁面中,選擇 [測試] 索引標籤。

    
            主 Lambda 台測試索引標籤。
  2. 事件名稱輸入 MyTestEvent

  3. 事件 JSON 中,貼上下列測試事件。請務必取代這些值:

    • 將 us-east-1 取代為您用來建立 Amazon S3 儲存貯體的區域。

    • my-bucket 的兩個執行個體取代為您的 Amazon S3 儲存貯體名稱。

    • 將 test%2FKey 取代為您之前上傳到儲存貯體的測試物件名稱 (例如 HappyFace.jpg)。

    { "Records": [ { "eventVersion": "2.0", "eventSource": "aws:s3", "awsRegion": "us-east-1", "eventTime": "1970-01-01T00:00:00.000Z", "eventName": "ObjectCreated:Put", "userIdentity": { "principalId": "EXAMPLE" }, "requestParameters": { "sourceIPAddress": "127.0.0.1" }, "responseElements": { "x-amz-request-id": "EXAMPLE123456789", "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH" }, "s3": { "s3SchemaVersion": "1.0", "configurationId": "testConfigRule", "bucket": { "name": "my-bucket", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::my-bucket" }, "object": { "key": "test%2Fkey", "size": 1024, "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901" } } } ] }
  4. 選擇 Save (儲存)。

  5. 選擇 測試

  6. 如果函數成功運作,您會在執行結果索引標籤中看到類似以下內容的輸出。

    Response "image/jpeg" Function Logs START RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 Version: $LATEST 2021-02-18T21:40:59.280Z 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 INFO INPUT BUCKET AND KEY: { Bucket: 'my-bucket', Key: 'HappyFace.jpg' } 2021-02-18T21:41:00.215Z 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 INFO CONTENT TYPE: image/jpeg END RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 REPORT RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 Duration: 976.25 ms Billed Duration: 977 ms Memory Size: 128 MB Max Memory Used: 90 MB Init Duration: 430.47 ms Request ID 12b3cae7-5f4e-415e-93e6-416b8f8b66e6

使用 Amazon S3 觸發條件測試 Lambda 函數


          教學課程工作流程圖顯示您正在進行使用 S3 觸發條件測試的測試步驟

若要使用設定的觸發器測試您的功能,請使用主控台將物件上傳到 Amazon S3 儲存貯體。若要驗證 Lambda 函數是否如預期般執行,請使用 CloudWatch 記錄檢視函數的輸出。

將物件上傳至 Amazon S3 儲存貯體
  1. 開啟 Amazon S3 主控台的「儲存貯體」頁面,然後選擇您先前建立的儲存貯體。

  2. 選擇上傳

  3. 選擇新增檔案,然後使用檔案選擇器選擇您要上傳的物件。此物件可以是您自選的任何檔案。

  4. 選擇開啟,然後選擇上傳

若要使 CloudWatch 用記錄來驗證函數呼叫
  1. 開啟 CloudWatch 主控台。

  2. 請確定您使用的是建立 Lambda 函數的相同 AWS 區域 方式。您可使用螢幕頂端的下拉式清單來變更區域。

    
              此圖顯示 Lambda 主控台下拉式區域選單
  3. 選擇日誌,然後選擇日誌群組

  4. 為函數 (/aws/lambda/s3-trigger-tutorial) 選擇日誌群組名稱。

  5. 日誌串流下,選擇最新的日誌串流。

  6. 如果您的函數是為了回應 Amazon S3 觸發器而正確叫用,您會看到類似以下內容的輸出。您看到的 CONTENT TYPE 取決於您上傳到儲存貯體的檔案類型。

    2022-05-09T23:17:28.702Z 0cae7f5a-b0af-4c73-8563-a3430333cc10 INFO CONTENT TYPE: image/jpeg

清除您的資源

除非您想要保留為此教學課程建立的資源,否則您現在便可刪除。刪除您不再使用的 AWS 資源,您可以避免不必要的費用 AWS 帳戶。

若要刪除 Lambda 函數
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇您建立的函數。

  3. 選擇 Actions (動作)、Delete (刪除)。

  4. 在文字輸入欄位中輸入 delete,然後選擇 刪除

刪除執行角色
  1. 開啟 IAM 主控台中的 角色頁面

  2. 選取您建立的執行角色。

  3. 選擇 刪除

  4. 在文字輸入欄位中輸入角色的名稱,然後選擇 刪除

刪除 S3 儲存貯體
  1. 開啟 Amazon S3 主控台

  2. 選擇您建立的儲存貯體。

  3. 選擇 刪除

  4. 在文字輸入欄位中輸入儲存貯體的名稱。

  5. 選擇 刪除儲存貯體

後續步驟

在中教學課程:使用 Amazon S3 觸發條件建立縮圖影像,Amazon S3 觸發程序會叫用為上傳到儲存貯體的每個映像檔建立縮圖影像的函數。本教學課程需要中等程度 AWS 的 Lambda 網域知識。它示範如何使用 AWS Command Line Interface (AWS CLI) 建立資源,以及如何為函數及其相依性建立 .zip 檔案歸檔部署套件。