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

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

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

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

Amazon S3 儲存貯體、Lambda 函數和 Amazon CloudWatch Logs 之間的資料流

本教學課程示範如何。

  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和建立管理使用者,以免將根使用者用於日常任務。

保護您的 AWS 帳戶根使用者
  1. 選擇根使用者並輸入 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 目錄 做為身分來源的教學課程,請參閱AWS IAM Identity Center 《 使用者指南》中的使用預設值設定使用者存取權 IAM Identity Center 目錄

以具有管理存取權的使用者身分登入
  • 若要使用您的 IAM Identity Center 使用者簽署,請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。

    如需使用 IAM Identity Center 使用者登入的說明,請參閱AWS 登入 《 使用者指南》中的登入 AWS 存取入口網站

指派存取權給其他使用者
  1. 在 IAM Identity Center 中,建立一個許可集來遵循套用最低權限的最佳實務。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的建立許可集

  2. 將使用者指派至群組,然後對該群組指派單一登入存取權。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的新增群組

建立 Amazon S3 儲存貯體

第一步:建立 Amazon S3 儲存貯體
建立 Amazon S3 儲存貯體
  1. 開啟 Amazon S3 主控台,然後選取儲存貯體頁面。

  2. 選擇建立儲存貯體

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

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

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

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

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

下一步:上傳測試物件
上傳測試物件
  1. 開啟 Amazon S3 主控台的儲存貯體頁面,然後選擇您在上一個步驟中建立的儲存貯體。

  2. 選擇上傳

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

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

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

建立許可政策

下一步:建立 Lambda 的許可政策

建立許可政策,以允許 Lambda 從 Amazon S3 儲存貯體取得物件,以及寫入 Amazon CloudWatch Logs。

建立政策
  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. 選擇建立政策

建立執行角色

下一步:建立執行角色

執行角色是 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. 請確定您在 AWS 區域 建立 Amazon S3 儲存貯體的相同 中作業。您可使用螢幕頂端的下拉式清單來變更區域。

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

  4. 選擇從頭開始撰寫

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

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

    2. 針對執行時期,選擇 Python 3.12

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

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

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

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

  7. 選擇建立函數

部署函數程式碼

下一步:部署函數程式碼

本教學課程使用 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
    SDK for Java 2.x
    注意

    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
    SDK for JavaScript (v3)
    注意

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

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

    import { S3Client, HeadObjectCommand } from "@aws-sdk/client-s3"; const client = new S3Client(); export const 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); } };

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

    // 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
    SDK for PHP
    注意

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

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

    <?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
    SDK for Python (Boto3)
    注意

    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
    SDK for Ruby
    注意

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

    使用 Ruby 搭配 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
    SDK for Rust
    注意

    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 建立的程式碼。

  3. DEPLOY 區段中,選擇部署以更新函數的程式碼:

    Lambda 主控台程式碼編輯器中的「部署」按鈕

建立 Amazon S3 觸發條件

下一步:建立 S3 觸發條件
若要建立 Amazon S3 觸發條件
  1. 函數概觀窗格中,選擇新增觸發條件

    Lambda 主控台函數概觀區段。
  2. 選取 S3

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

  4. 事件類型下,選取所有物件建立事件

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

  6. 選擇新增

注意

當您使用 Lambda 主控台為 Lambda 函數建立 Amazon S3 觸發條件時,Amazon S3 會在您指定的儲存貯體上設定事件通知。在設定此事件通知之前,Amazon S3 會執行一系列檢查,以確認該事件目的地存在,且具有所需的 IAM 政策。Amazon S3 也會對針對為該儲存貯體設定的任何其他事件通知執行這些測試。

由於此檢查的存在,如果儲存貯體先前已為不再存在的資源設定事件目的地,或為沒有必要許可政策的資源設定事件目的地,則 Amazon S3 將無法建立新的事件通知。您將看到以下錯誤訊息,指出無法建立觸發條件:

An error occurred when creating the trigger: Unable to validate the following destination configurations.

如果您先前已使用相同的儲存貯體為另一個 Lambda 函數設定觸發條件,且在之後刪除了相關函數或修改了其許可政策,則會顯示此錯誤。

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

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

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

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

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

    • amzn-s3-demo-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": "amzn-s3-demo-bucket", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::amzn-s3-demo-bucket" }, "object": { "key": "test%2Fkey", "size": 1024, "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901" } } } ] }
  4. 選擇儲存

  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: 'amzn-s3-demo-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 Logs 來檢視函數的輸出。

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

  2. 選擇上傳

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

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

若要使用 CloudWatch Logs 驗證函數調用
  1. 開啟 CloudWatch 主控台

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

    此圖顯示 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. 在文字輸入欄位中輸入 confirm,然後選擇刪除

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

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

  3. 選擇刪除

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

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

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

  3. 選擇 刪除

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

  5. 選擇刪除儲存貯體

後續步驟

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