【问题标题】:cloud development kit Dynamodb permission for lambda to delete items云开发工具包 Dynamodb 允许 lambda 删除项目
【发布时间】:2021-01-18 18:07:19
【问题描述】:

您好,希望您能在这个问题上引导我走向正确的方向。

我正在使用亚马逊网络服务云开发工具包。

我想创建一个 Lambda 函数来从 DynamoDB 表中删除项目。

import * as lambda from '@aws-cdk/aws-lambda';
import * as iam from '@aws-cdk/aws-iam';

const deleteLambda = new lambda.Function(
    this,
    'deleteLambda',
    {
        functionName: 'deleteLambda',
        runtime: lambda.Runtime.NODEJS_10_X,
        handler: 'deleteLambda.handler',
        code: lambda.Code.fromAsset('lambdas-fns'),
        memorySize: 1024
    });

const lambdaARole = new iam.Role(this, 'LambdaRole', {
    assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
});

lambdaARole.addManagedPolicy(
    iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonDynamoDBFullAccess')
);

const tbl = new Table(this, 'TestTable', {})

现在我知道我可以使用 tbl.grantReadData 允许 lambda 从表中读取项目,或使用 tbl.grantWriteData 允许 lambda 添加项目。但我找不到允许删除项目的正确语法。

如果有人能指出我错过了什么,将不胜感激。

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-dynamodb aws-cdk


    【解决方案1】:

    Granting permissions to resources

    
            const fn = new lambda.Function(this, 'Function', functionProps);
            const table = new dynamodb.Table(this, 'Table', tableProps);
    
            table.grant(fn, 'dynamodb:PutItem');
    

    在研讨会中还有另一个完整的示例,使用 cdk Allow Lambda to read/write our DynamoDB table

            import * as cdk from '@aws-cdk/core';
            import * as lambda from '@aws-cdk/aws-lambda';
            import * as dynamodb from '@aws-cdk/aws-dynamodb';
    
            export interface HitCounterProps {
            /** the function for which we want to count url hits **/
            downstream: lambda.Function;
            }
    
            export class HitCounter extends cdk.Construct {
    
            /** allows accessing the counter function */
            public readonly handler: lambda.Function;
    
            constructor(scope: cdk.Construct, id: string, props: HitCounterProps) {
                super(scope, id);
    
                const table = new dynamodb.Table(this, 'Hits', {
                    partitionKey: { name: 'path', type: dynamodb.AttributeType.STRING }
                });
    
                this.handler = new lambda.Function(this, 'HitCounterHandler', {
                runtime: lambda.Runtime.NODEJS_10_X,
                handler: 'hitcounter.handler',
                code: lambda.Code.fromAsset('lambda'),
                environment: {
                    DOWNSTREAM_FUNCTION_NAME: props.downstream.functionName,
                    HITS_TABLE_NAME: table.tableName
                }
                });
    
                // grant the lambda role read/write permissions to our table
                table.grantReadWriteData(this.handler);
            }
            }
    

    【讨论】:

    • 谢谢,应该是 table.grant(fn, 'dynamodb:UpdateItem');
    • 是的,您可以手动完成,也可以使用研讨会中的罐装政策,取决于:)
    • 感谢您的帮助,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    相关资源
    最近更新 更多