簡體   English   中英

您如何將 API 網關指向 CDK 中的 lambda 別名?

[英]How do you point API Gateway to a lambda Alias in CDK?

使用 CDK 將 ApiGateway 連接到 lambda,我們首先創建一個 RestApi(),然后創建一個 LambdaIntegration 將 Apigateway 連接到 lambda。 使用 lambda Alias 時如何做到這一點?

如何將 ApiGateway 指向特定的 Lambda 別名解釋了如何在沒有 CDK 的情況下將 ApiG 連接到 Lambda 別名。 這怎么能翻譯成CDK?

我們的目標是將預置並發和自動縮放添加到與 API 網關一起使用的 lambda。

LambdaIntegration Function 獲取handler: IFunction作為參數,即 lambda object。

話雖如此,您可以使用以下代碼片段導入您想要的 lambda 版本:

const lambdaAlias=lambda.Function.fromFunctionArn(scope,'LambdaImportUsingARN',"lambdaAliasARN")

將 lambdaAliasARN 替換lambdaAliasARN的 ARN。

例如 -

arn:aws:lambda:${AWS_REGION}:${AWS_ACCOUNT}:function:${LAMBDA_NAME}:${ALIAS_NAME}

稍后,將其傳遞給LambdaIntegration

const lambdaIntegrationUsingAlias  = new apigateway.LambdaIntegration(lambdaAlias) 

此外,lambda 別名需要權限才能允許 ApiGateway 調用它。

const lambda = ...
const alias = Alias(this, "alias-id", AliasProps.builder()
            .provisionedConcurrentExecutions(1)
            .version(lambda.currentVersion)
            .aliasName(ALIAS_NAME)
            .build()
        )
// First add permission for your stage to invoke
alias.addPermission("apigateway-permission", Permission.builder()
            .action("lambda:InvokeFunction")
            .principal(ServicePrincipal("apigateway.amazonaws.com"))          
            .sourceArn("arn:aws:execute-api:$region:$account:${api.restApiId}/$stage/POST/$path")
            .build())
// Next add permission for testing
alias.addPermission("apigateway-test-permission", Permission.builder()
            .action("lambda:InvokeFunction")
            .principal(ServicePrincipal("apigateway.amazonaws.com"))
            .sourceArn("arn:aws:execute-api:$region:$account:${api.restApiId}/test-invoke-stage/POST/$path")
            .build())

這是一個 TypeScript CDK 示例,該示例是“API 網關 HTTP API”,由 Lambda 支持,使用別名和自動縮放的預置並發。

有關更多信息,請參閱自動縮放文檔

import * as apigateway from '@aws-cdk/aws-apigatewayv2'
import * as apigatewayIntegrations from '@aws-cdk/aws-apigatewayv2-integrations'
import * as lambda from '@aws-cdk/aws-lambda'

const fn = new lambda.Function(this, 'MyFunction', {
  //...
})

const liveAlias = new lambda.Alias(this, 'LiveAlias', {
  aliasName: 'live',
  version: fn.currentVersion,
})

const target = liveAlias.addAutoScaling({
  minCapacity: 1,
  maxCapacity: 100,
})

target.scaleOnUtilization({
  utilizationTarget: 0.75,
})

const httpApi = new apigateway.HttpApi(this, 'HttpApi', {
  defaultIntegration: new apigatewayIntegrations.LambdaProxyIntegration({
    handler: liveAlias,
  }),
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM