調用 AWS Lambda 來自適用於 Postgre SQL 資料庫執行個體的 Aurora 資料庫叢集RDS功能 SQL - Amazon Aurora

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

調用 AWS Lambda 來自適用於 Postgre SQL 資料庫執行個體的 Aurora 資料庫叢集RDS功能 SQL

AWS Lambda 是一項事件驅動的運算服務,可讓您執行程式碼,而無需佈建或管理伺服器。它可以與許多人一起使用 AWS 服務,包括波斯特格雷SQLRDS的 Aurora 例如,您可以使用 Lambda 函數處理來自資料庫的事件通知,或在新檔案上傳到 Simple Storage Service (Amazon S3) 時從檔案中載入資料。若要進一步了解 Lambda,請參閱什麼是 AWS Lambda? AWS Lambda 開發人員指南。

注意

調用 AWS Lambda 功能支持 Aurora 波斯特 SQL 11.9 及更高版本(包括 Aurora Serverless v2).

SQL Postgre 設置 Aurora 波斯特SQL來使用 Lambda 函數是一個涉及的多步驟過程 AWS Lambda、IAMVPC、您的和您的 Aurora Postgre SQL 資料庫叢集 (RDS適用於 Postgre 資料庫執)。以下提供必要步驟的摘要。

如需 Lambda 函數的詳細資訊,請參閱開始使用 LambdaAWS Lambda 基金會 AWS Lambda 開發人員指南

步驟 1:叢集AWS Lambda

Lambda 函數總是在 Amazon 內部運行VPC,該函數由 AWS Lambda 服務。Lambda 會對此套用網路存取VPC和安全規則,並VPC自動維護和監控。叢集會將網路流量傳送至 Lambda 服務。VPC具體設定取決於 Aurora 資料庫叢集的主要資料庫執行個體是公有的或私有。

  • Postgre SQL 資料庫叢集 — 如果資料庫叢集的主要資料庫執個體位於您的公有子網路中VPC,且執行個體的 "PubliclyAccessible" 屬性為,則該執行個體為公用資料庫執行個體。true若要尋找此屬性的值,您可以使用 describe-db-instances AWS CLI 指令。或者,您可以使用 AWS Management Console 以開啟 [連線與安全性] 索引標籤,並檢查 [公開存取] 為 []。若要驗證執行個體是否位於您的公有子網路中VPC,您可以使用 AWS Management Console 或 AWS CLI.

    若要設定 Lambda 的存取權限,請使用 AWS Management Console 或 AWS CLI 以在您VPC的安全群組上建立輸出規則。輸出規則指定TCP可以使用連接埠 443 將封包傳送到任何IPv4位址 (0.0.0.0/0)。

  • Postgre SQL 資料庫執行個體的私有 Aurora Postgre SQL 資料庫叢集 私有子網路中。若要允許執行個體使用 Lambda,您可以使用網路位址轉譯) NAT 閘道。如需詳細資訊,請參閱NAT閘道。或者,您可以使用 Lambda VPC 的VPC端點進行設定。如需詳細資訊,請參閱 Amazon VPC 使用者指南中的VPC端點。端點會回應 Aurora Postgre SQL 資料庫叢集RDS針對 Postgre 資料SQL庫 Lambda 函數所發出的呼叫。

您現在VPC可以與 AWS Lambda VPC在網絡級別。接下來,您可以使用IAM.

步驟 2:IAM針對 Postgre 資料庫執行個體設定 Aurora 叢集和 AWS Lambda

從您的 Aurora Postgre SQL 資料庫叢集呼叫 Lambda 函數以RDS取得 Postgre 資料SQL庫需要特定權限。若要設定必要的權限,建議您建立允許叫用 Lambda 函數的IAM政策,將該原則指派給角色,然後將該角色套用至資料庫叢集資料庫個體。此做法會提供資料庫叢集權限,允許代表您叫用指定的 Lambda 函數。下列步驟說明如何使用 AWS CLI.

設IAM定將叢集與 Lambda 搭配使用的許可
  1. 使用建立原則 AWS CLI 此指令可建立IAM政策,以允許 Postgre SQL 資料庫叢集RDS叫用指定的 Lambda 函數。(陳述式 ID (Sid) 是政策陳述式的選用描述,不會影響使用。) 此政策為 Aurora 資料庫叢集提供叫用指定 Lambda 函數所需的最低許可。

    aws iam create-policy --policy-name rds-lambda-policy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToExampleFunction", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:aws-region:444455556666:function:my-function" } ] }'

    或者,您可以使用預先定義的 AWSLambdaRole 政策,該政策允許叫用任何 Lambda 函數。如需詳細資訊,請參閱 Lambda 的身分識別型IAM政策

  2. 使用創建角色 AWS CLI 命令,以建立原則可在執行階段承擔的IAM角色。

    aws iam create-role --role-name rds-lambda-role --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
  3. 使用將原則套用至角色 attach-role-policy AWS CLI 指令。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::444455556666:policy/rds-lambda-policy \ --role-name rds-lambda-role --region aws-region
  4. https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/add-role-to-db-cluster.html AWS CLI 指令。最後這個步驟允許資料庫叢集的資料庫使用者叫用 Lambda 函數。

    aws rds add-role-to-db-cluster \ --db-cluster-identifier my-cluster-name \ --feature-name Lambda \ --role-arn arn:aws:iam::444455556666:role/rds-lambda-role \ --region aws-region

IAM配置完成VPC後,您現在可以安裝aws_lambda擴展程序。請注意,您可以隨時安裝擴充功能,但在您設定正確的VPC支援和IAM權限之前,aws_lambda擴充功能不會功能。)

步驟 3:安裝適用於 Postgre 資料庫執行個體的 Aurora Postgre SQL 資料庫叢集RDS擴充功能 SQL

使用 AWS Lambda 此擴充功能叢集,並能夠從 Postgre 呼叫 Lambda 函數。SQL

在用於 Postgre 資料庫執行個體的 Aurora Postgre SQL 資料庫叢集中安裝aws_lambda擴充功能 SQL

使用 Postgre SQL psql 指令列或 pgAdmin 工具連線至用於 Postgre 資料庫執行個體的 Aurora Postgre SQL 資料庫叢集。SQL

  1. 以具rds_superuser有權限的使用者身分 Connect 至 Postgre SQL 資料 資料庫叢集RDS。預設 postgres 使用者顯示於範例中。

    psql -h cluster-instance.444455556666.aws-region.rds.amazonaws.com -U postgres -p 5432
  2. 安裝 aws_lambda 擴充功能。另外也需要 aws_commons 擴充功能。它為 Postgre SQL 提供了輔助功能以aws_lambda及許多其他 Aurora 擴展。如果它不在 Postgre 叢集RDS上,則會以下列方aws_lambda式安裝。

    CREATE EXTENSION IF NOT EXISTS aws_lambda CASCADE; NOTICE: installing required extension "aws_commons" CREATE EXTENSION

aws_lambda擴充功能已安裝在您的 Aurora Postgre SQL 資料庫叢集的主要資料庫執行個體中。您現在可以建立便利的結構,用於叫用 Lambda 函數。

步驟 4: (選用)

您可以使用aws_commons擴展程序中的輔助函數來準備可以更輕鬆地從 Postgre SQL 調用的實體。若要執行此操作,您需要以下有關 Lambda 函數的資訊:

  • 函數名稱 — Lambda 函數的名稱、Amazon 資源名稱 (ARN)、版本或別名。中建立的IAM原則步驟 2:IAM為您的叢集和 Lambda 進行設定需要ARN,因此我們建議您使用函數的ARN。

  • AWS 區域 — (選填) AWS 如果 Lambda 函數所在的區域與 Postgre 資料庫執行個體的 Aurora Postgre SQL 資料庫叢集不在相同區域。SQL

若要保存 Lambda 函數名稱資訊,可使用 aws_commons.create_lambda_function_arn 函數。此 helper 函數會建立一個 aws_commons._lambda_function_arn_1 複合結構,其中包含叫用函數所需的詳細資訊。接下來說明設定此複合結構的三種替代做法。

SELECT aws_commons.create_lambda_function_arn( 'my-function', 'aws-region' ) AS aws_lambda_arn_1 \gset
SELECT aws_commons.create_lambda_function_arn( '111122223333:function:my-function', 'aws-region' ) AS lambda_partial_arn_1 \gset
SELECT aws_commons.create_lambda_function_arn( 'arn:aws:lambda:aws-region:111122223333:function:my-function' ) AS lambda_arn_1 \gset

這些值全部都可以用於 aws_lambda.invoke 函數呼叫。如需範例,請參閱 步驟 5:對 Postgre 資料庫執行個體從 Aurora Postgre SQL 資料庫叢集叫用 Lambda 函數 SQL

步驟 5:對 Postgre 資料庫執行個體從 Aurora Postgre SQL 資料庫叢集叫用 Lambda 函數 SQL

aws_lambda.invoke 函數採同步或異步行為,具體取決於 invocation_type。此參數的兩個替代項目是 RequestResponse (預設值) 和 Event,如下所示:

  • RequestResponse – 此叫用類型為同步。這是在未指定叫用類型的情況下進行呼叫時的預設行為。回應承載包括 aws_lambda.invoke 函數的結果。如果您的工作流程需要接收 Lambda 函數的結果才能繼續執行,請使用此叫用類型。

  • Event – 此叫用類型為非同步。回應不包括含有結果的承載。如果您的工作流程不需要 Lambda 函數的結果即可繼續執行,請使用此叫用類型。

如要簡單測試您的設定,可以使用 psql 連線至資料庫執行個體,並從命令列叫用範例函數。假設您在 Lambda 服務上設定了一個基本函數,例如下方螢幕擷取畫面中顯示的簡單 Python 函數。

範例中顯示的 Lambda 函數 AWS CLI for AWS Lambda
叫用範例函數
  1. 使用psql或 Connect 到您的主要資料庫執行個體pgAdmin。

    psql -h cluster.444455556666.aws-region.rds.amazonaws.com -U postgres -p 5432
  2. 調用使用它的功能ARN。

    SELECT * from aws_lambda.invoke(aws_commons.create_lambda_function_arn('arn:aws:lambda:aws-region:444455556666:function:simple', 'us-west-1'), '{"body": "Hello from Postgres!"}'::json );

    回應如下所示。

    status_code | payload | executed_version | log_result -------------+-------------------------------------------------------+------------------+------------ 200 | {"statusCode": 200, "body": "\"Hello from Lambda!\""} | $LATEST | (1 row)

如果您的叫用嘗試未成功,請參閱 Lambda 函數錯誤訊息

步驟 6:授予其他使用者呼叫 Lambda 函數的許可權限

在程序中的這一點上,只有身為 rds_superuser 的您可以叫用 Lambda 函式。如要允許其他使用者呼叫您建立的任何函數,您需要授予其許可權限。

如要授予叫用 Lambda 函數的許可權限
  1. 使用psql或 Connect 到您的主要資料庫執行個體pgAdmin。

    psql -h cluster.444455556666.aws-region.rds.amazonaws.com -U postgres -p 5432
  2. 執行下列SQL命令:

    postgres=> GRANT USAGE ON SCHEMA aws_lambda TO db_username; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA aws_lambda TO db_username;