web-dev-qa-db-fra.com

PutItem dans la table DynamoDB par CloudFormation

Existe-t-il un moyen de placer des éléments dans une table DynamoDB à l'aide de CloudFormation? Quelque chose de similaire au code dans ce doc

Dans le paramètre du modèle, je donne à l'utilisateur la possibilité de mettre les valeurs, puis je dois insérer ces valeurs dans le tableau.

17
Souad

Le moyen d'y parvenir serait d'utiliser des ressources personnalisées pour cela.

Voici un modèle Cloudformation qui utilise un Lambda en ligne pour cette tâche.

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
20
jens walter