web-dev-qa-db-ja.com

CloudFormationによるDynamoDBテーブルのPutItem

CloudFormationを使用してDynamoDBテーブルにアイテムを配置する方法はありますか?これのコードに似たもの doc

テンプレートのパラメーターで、ユーザーが値を入力できるようにしてから、これらの値をテーブルに挿入する必要があります。

17
Souad

これを実現する方法は、カスタムリソースを利用することです。

ここで、このタスクにインラインLambdaを利用するCloudformationテンプレート。

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