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

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

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

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

S3 儲存貯體、Lambda 函數和 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/註冊

  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. 為您的 root 使用者開啟多因素驗證 (MFA)。

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

建立具有管理存取權的使用者
  1. 啟用IAM身分識別中心。

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

  2. 在IAM身分識別中心中,將管理存取權授與使用者。

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

以具有管理存取權的使用者身分登入
指派存取權給其他使用者
  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 日誌的許可政策。

建立政策
  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 服務和資源之權限的 AWS Identity and Access Management (IAM) 角色。在此步驟中,使用您在上一個步驟中建立的權限原則建立執行角色。

建立執行角色並附加自訂許可政策
  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. 選擇建立函數

部署函數程式碼

下一步:部署函數代碼

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

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

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

    .NET
    AWS SDK for .NET
    注意

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

    使用使 Lambda. NET。

    // 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對於轉到 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對於爪哇 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對於 JavaScript (3)
    注意

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

    使用使 Lambda JavaScript.

    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); } };

    使用使 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 的 SDK
    注意

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

    使用使 LambdaPHP.

    <?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對於 Python(肉毒桿菌 3)
    注意

    還有更多關於 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對於紅寶石
    注意

    還有更多關於 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
    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 函數建立 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. 選擇 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: '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 記錄檢視函數的輸出。

將物件上傳至 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 檔案歸檔部署套件。