2017-03-02 7 views
2

Gibt es eine Möglichkeit, Elemente in einer DynamoDB-Tabelle mithilfe von CloudFormation zu platzieren? Ähnlich wie der Code in diesem docPutItem in DynamoDB-Tabelle von CloudFormation

Im Parameter der Vorlage gebe ich dem Benutzer die Möglichkeit, die Werte zu setzen, dann muss ich diese Werte in die Tabelle einfügen.

+0

Nein, gibt es nicht. Ich denke, die richtige Frage ist, warum möchten Sie? – Robo

+0

Ich arbeite an einer ähnlichen Lösung [https://s3.amazonaws.com/solutions-reference/ebs-snapshot-scheduler/latest/ebs-snapshot-scheduler.pdf], die von AWS veröffentlicht wird. @Robo Ich habe eine benutzerdefinierte Ressource verwendet, aber ich habe ein Problem, dass die Ressource nicht erstellt, zeigt die Erstellung im Gange kontinuierlich – Somar

+0

Eine benutzerdefinierte Ressource ist die einzige Möglichkeit, dies zu erreichen, da cloudformation keine Möglichkeit hat, Daten für Ihre Ressourcen bereitzustellen oder auszuführen beliebiger API-Aufruf –

Antwort

4

Der Weg, dies zu erreichen, wäre, benutzerdefinierte Ressourcen dafür zu verwenden.

Hier eine Cloudformation-Vorlage, die für diese Aufgabe einen Inline-Lambda verwendet.

AWSTemplateFormatVersion: '2010-09-09' 
Resources: 
    LambdaRole: 
    Type: AWS::IAM::Role 
    Properties: 
     AssumeRolePolicyDocument: 
     Version: '2012-10-17' 
     Statement: 
     - Effect: Allow 
      Principal: 
      Service: 
      - lambda.amazonaws.com 
      Action: 
      - sts:AssumeRole 
     Path: "/" 
     Policies: 
     - PolicyName: dynamodbAccessRole 
      PolicyDocument: 
      Version: '2012-10-17' 
      Statement: 
      - Effect: Allow 
       Action: 
       - dynamodb:* 
       Resource: "*" 
      - Effect: Allow 
       Action: 
       - logs:* 
       Resource: "*" 
    InitFunction: 
    Type: AWS::Lambda::Function 
    Properties: 
     Code: 
     ZipFile: > 
      const AWS = require("aws-sdk"); 
      const response = require("cfn-response"); 
      const docClient = new AWS.DynamoDB.DocumentClient(); 
      exports.handler = function(event, context) { 
       console.log(JSON.stringify(event,null,2)); 
       var params = { 
       TableName: event.ResourceProperties.DynamoTableName, 
       Item:{ 
        "id": "abc123" 
       } 
      }; 
      docClient.put(params, function(err, data) { if (err) { 
      response.send(event, context, "FAILED", {}); 
      } else { 
      response.send(event, context, "SUCCESS", {}); 
      } 
      }); 
      }; 
     Handler: index.handler 
     Role: 
     Fn::GetAtt: [ LambdaRole , "Arn" ] 
     Runtime: nodejs4.3 
     Timeout: 60 
    DynamoDB: 
    Type: AWS::DynamoDB::Table 
    Properties: 
     AttributeDefinitions: 
     - AttributeName: id 
      AttributeType: S 
     KeySchema: 
     - AttributeName: id 
      KeyType: HASH 
     ProvisionedThroughput: 
     ReadCapacityUnits: 1 
     WriteCapacityUnits: 1 
    InitializeDynamoDB: 
    Type: Custom::InitFunction 
    DependsOn: DynamoDB 
    Properties: 
     ServiceToken: 
     Fn::GetAtt: [ InitFunction , "Arn" ] 
     DynamoTableName: 
     Ref: DynamoDB 
+0

Könnten Sie bitte den Funktionscode in Python 2.7 separat angeben? – Somar

+0

saldy nein, ich kenne keinen Python oder wie man Lambdas in Python programmiert. –

Verwandte Themen