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

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

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

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


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

Lambda 函數與 Amazon S3 觸發條件可以搭配使用,以執行多種類型的檔案處理任務。例如,每當您將影像檔案上傳到 Amazon S3 儲存貯體,都可以使用 Lambda 函數建立縮圖,或將上傳的文件轉換為不同的格式。完成本教學課程後,您可以嘗試使用 Amazon S3 觸發條件建立縮圖影像教學課程,執行影像處理任務。

請執行下列步驟以完成本教學課程:

  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 身分中心使用者登入,請使用建立 IAM 身分中心使用者時傳送至您電子郵件地址的登入 URL。

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

建立 Amazon S3 儲存貯體


        教學課程工作流程圖顯示您正在進行建立儲存貯體的 Amazon S3 儲存貯體步驟

首先使用 AWS Management Console 建立 Amazon S3 儲存貯體。

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

  2. 選擇 建立儲存貯體

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

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

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

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

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


        教學課程工作流程圖顯示您正在進行上傳測試物件的 Amazon S3 儲存貯體步驟

在本教學課程稍後的階段,您會在 Lambda 主控台中測試 Lambda 函數。若要確認函數的程式碼正常運作,Amazon S3 儲存貯體必須包含一個測試物件。此物件可以是您自選的任何檔案 (例如 HappyFace.jpg)。

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

  2. 選擇上傳

  3. 選擇新增檔案,然後使用檔案選擇器選擇您要上傳的物件。

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

在教學課程稍後的階段測試函數程式碼時,您需傳遞包含您所上傳物件檔案名稱的資料,因此現在請務必記下它。

建立許可政策


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

在為 Lambda 函數建立執行角色之前,您必須先建立許可政策,以授予函數存取所需 AWS 資源的許可。在本教學中,該政策允許 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 服務和資源的許可。若要讓函數從 Amazon S3 儲存貯體取得物件,您需附加在上個步驟建立的許可政策。

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

  2. 選擇 建立角色

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

  4. 選擇 下一步

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

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

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

建立 Lambda 函數


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

在此範例中,您會使用 Node.js 16.x 執行期在主控台中建立 Lambda 函數。您在控制台中建立的函數包含基本的「Hello World」程式碼。在下個步驟中,您將用函數程式碼取代這些程式碼,以便從 Amazon S3 儲存貯體中取得物件。

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

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

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

  4. 選擇從頭開始撰寫

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

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

    2. 針對 執行時間,請選擇 Node.js 16.x

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

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

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

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

  7. 選擇 建立函式

部署函數程式碼


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

Lambda 函數收到 Amazon S3 傳來的 event 參數後,會從該參數擷取上傳物件的金鑰名稱以及儲存貯體的名稱。然後函數會使用 AWS SDK for JavaScript 中的 HeadObject API 呼叫,取得上傳物件的物件類型。

本教學課程使用 Node.js 16.x 執行期,但我們也提供了其他執行期的範例程式碼檔案。您可以在下列方塊中選取索引標籤,查看您感興趣的執行期程式碼。您將部署的 JavaScript 程式碼是標示的索引標籤中顯示的第一個範例JavaScript

.NET
AWS SDK for .NET
注意

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

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

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 事件。

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 事件。

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 (v2) 的開發套件
注意

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

使用使 Lambda JavaScript.

const aws = require('aws-sdk'); const s3 = new aws.S3({ apiVersion: '2006-03-01' }); 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, ' ')); const params = { Bucket: bucket, Key: key, }; try { const { ContentType } = await s3.headObject(params).promise(); 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.

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); } };
Python
適用於 Python (Boto3) 的 SDK
注意

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

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

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
Rust
適用於 Rust 的 SDK
注意

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

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

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(()) }
部署函數程式碼
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇您在先前步驟中建立的函數 (s3-trigger-tutorial)。

  3. 選取程式碼索引標籤。

  4. 將提供的程式碼複製並貼到「 JavaScript 程式碼原始程式碼」窗格中的 index.js 索引標籤。

  5. 選擇部署

建立 Amazon S3 觸發條件


        教學課程工作流程圖顯示您正在進行建立觸發條件的 S3 觸發條件步驟

現在您已部署函數程式碼,接著請建立用於調用函數的 Amazon S3 觸發條件。

若要建立 Amazon S3 觸發條件
  1. 在函數主控台頁面的函數概覽窗格中,選擇新增觸發條件

  2. 選取 S3

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

  4. 事件類型下,選取所有物件建立事件。您也可以設定觸發條件,在有物件遭刪除時調用 Lambda,但在本教學課程中不會使用該選項。

  5. 遞迴調用下,選取核取方塊,確認您了解不建議使用相同的 Amazon S3 儲存貯體進行輸入和輸出作業。您可以閱讀無伺服器園地中 導致 Lambda 函數失控的遞迴模式,進一步了解 Lambda 中的遞迴調用模式。

  6. 選擇新增

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


        教學課程工作流程圖顯示您正在進行使用虛擬事件測試的測試步驟

現在您已經建立並設定 Lambda 函數,可以進行測試了。首先傳送一個虛擬的 Amazon S3 事件給函數進行測試,確認該函數是否正常運作。

使用虛擬事件來測試 Lambda 函數
  1. 在函數的 Lambda 主控台頁面中,選擇程式碼索引標籤。

  2. 程式碼來源窗格中選擇測試

  3. 設定測試事件方塊中,執行以下操作:

    1. 事件名稱輸入 MyTestEvent

    2. 範本中選擇 S3 Put

    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. 選擇儲存

  4. 程式碼來源窗格中選擇測試

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

    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 觸發條件會調用函數,為上傳至 S3 儲存貯體的每個影像檔建立縮圖影像。本教學課程需要中等水平的 AWS 和 Lambda 領域知識。您可以使用 AWS Command Line Interface (AWS CLI) 來建立資源,並為您的函數及其相依性建立 .zip 檔案封存部署套件。