cevap

13

EDIT: Serverless Framework 1.x için yanıt güncelleştirildi.

Çözüm, Lambda'nın DynamoDB kaynaklarına erişmesine izin vermek için iamRoleStatements değerini ayarlamaktır. Not: Serverless Framework tarafından kullanılan kimlik bilgileri aynı DynamoDB kaynaklarına izin vermelidir.

  1. sizin serverless.yml yılında iamRoleStatements ekleyin:

    provider: 
        name: aws 
        runtime: nodejs4.3 
        stage: dev 
        region: us-east-1 
        iamRoleStatements: 
        - Effect: "Allow" 
         Action: 
         - "dynamodb:*" 
         Resource: "arn:aws:dynamodb:${self:provider.region}:*:table/*" 
    
  2. değişiklikleri dağıtmak:

    > serverless deploy 
    

(bir fonksiyon seviyesinde izinleri vermek izin vermek yerine DynamoDB'ye erişmek için tüm fonksiyonlar, diğer cevabıma bakın here.

+1

Örnek için teşekkürler. Ben arn kullandık: aws: dynamodb: $ {region}: *: table/* –

+0

Sunucu sürümü 1.x için güncellendi – Zanon

4

Serverless'ın çalışma biçimine aşina olmamakla birlikte, aradığınız şey bir IAM Role.

Bir EC2 örneğine veya AWS Lambda işlevlerine bir rol atayabilirsiniz, böylece AWS SDK kullanan bir kod, otomatik olarak AWS kimlik bilgilerini bu rolle ilişkili izinlerle alabilir. AWS Lambda ve kullanım durumunuz için, çalıştırılması gereken DynamoDB tablolarına AWS Lambda erişimi atadığınız rolü vermek isteyeceksiniz.

Bu, aldatıcı bir şekilde kullanımı basit olabilir, yalnızca kimlik bilgileri sağlamaz ve yalnızca çalışır (rol, doğru izinlere sahip olduğu sürece)! AWS SDK, Rol ile ilişkili kimlik bilgilerini otomatik olarak alarak sizin için her şeyi halleder.

Sağladığınız bağlantıdan, en iyi uygulamada bu konuya atıfta bulunan spesifik soru, EC2 örneklerine atıfta bulunduğu Credentials from IAM Roles for EC2 Instances'dır, ancak bu aynı zamanda AWS Lambda için de geçerlidir.