繁体   English   中英

调用资源“MyPhone223546421”时 Cloudformation 挂起

[英]Cloudformation hanging when calling resource “MyPhone223546421”

我需要使用 Cloudformation 模板创建一个包含一些属性值的 dynamo db 表,如下所示:

PhoneNumber     |       OrderNumber

223546421               11545154
784578745               11547854
223458784               11547487
XXXXXXXXX               11578451

被“XXXXXXXXX”作为参数传递。

云化模板:

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "OrdersTable": {
            "Type": "AWS::DynamoDB::Table",
            "Properties": {
                "TableName": "ClientOrders",
                "AttributeDefinitions": [
                    {
                        "AttributeName": "PhoneNumber",
                        "AttributeType": "S"
                    },
                    {
                        "AttributeName": "OrderNumber",
                        "AttributeType": "S"
                    }
                ],
                "KeySchema": [
                    {
                        "AttributeName": "PhoneNumber",
                        "KeyType": "HASH"
                    },
                    {
                        "AttributeName": "OrderNumber",
                        "KeyType": "RANGE"
                    }
                ],
                "TimeToLiveSpecification": {
                    "AttributeName": "ExpirationTime",
                    "Enabled": true
                },
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": "10",
                    "WriteCapacityUnits": "5"
                }
            },
            "DependsOn": [
                "DynamoDBQueryPolicy"
            ]
        },
        "DynamoDBQueryPolicy": {
            "Type": "AWS::IAM::Policy",
            "Properties": {
                "PolicyName": "DynamoDBQueryPolicy",
                "PolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Effect": "Allow",
                            "Action": "dynamodb:Query",
                            "Resource": "*"
                        }
                    ]
                },
                "Roles": [
                    {
                        "Ref": "OrdersTableQueryRole"
                    }
                ]
            }
        },
        "OrdersTableQueryRole": {
            "Type": "AWS::IAM::Role",
            "Properties": {
                "AssumeRolePolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Effect": "Allow",
                            "Principal": {
                                "Service": [
                                    "dynamodb.amazonaws.com"
                                ]
                            },
                            "Action": [
                                "sts:AssumeRole"
                            ]
                        }
                    ]
                },
                "Path": "/"
            }
        },
        "MyPhone223546421": {
            "Type": "Custom::CrtUpdDltDynamodbDocumentLambda",
            "Properties": {
                "ServiceToken": "arn:aws:lambda:us-east-1:accountid:function:cfn-crt-upd-dlt-dynamodb-document",
                "DynamoTableName": "ClientOrders",
                "DynamoKeyProperty": "PhoneNumber",
                "DynamoItem": "{\n  \"PhoneNumber\": \"223546421\",\n  \"OrderNumber\": \"11545154\",\n  \"someKey\": \"someValue\"\n}\n"
            }
        },
        "MyPhone784578745": {
            "Type": "Custom::CrtUpdDltDynamodbDocumentLambda",
            "Properties": {
                "ServiceToken": "arn:aws:lambda:us-east-1:accountid:function:cfn-crt-upd-dlt-dynamodb-document",
                "DynamoTableName": "ClientOrders",
                "DynamoKeyProperty": "PhoneNumber",
                "DynamoItem": "{\n  \"PhoneNumber\": \"784578745\",\n  \"OrderNumber\": \"11547854\",\n  \"someKey\": \"someValue\"\n}\n"
            }
        }
    }
}

调用 lambda 时它挂起,当然这需要适当的版本,但我缺乏正确设置它的技能。 这是 lambda 的 CF 模板:

AWSTemplateFormatVersion: '2010-09-09'
Resources:
    DynamoCfnLambdaRole:
        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: '*'
    CfnCrtUpdDltDynamodbDocumentLambda:
        Type: AWS::Lambda::Function
        Properties:
            FunctionName: 'cfn-crt-upd-dlt-dynamodb-document'
            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 item = JSON.parse(event.ResourceProperties.DynamoItem);
                      var keyProperty = event.ResourceProperties.DynamoKeyProperty;
                      var tableName = event.ResourceProperties.DynamoTableName;
                      if (event.RequestType == "Create" || event.RequestType == "Update") {
                        console.log("item:", item);
                        var params = {
                          TableName: tableName,
                          Item: item
                        };
                        console.log("Creating or Updating Document");
                        docClient.put(params, function(err, data) {                
                          if (err) {
                            console.log('error creating/updating document', err);
                            response.send(event, context, "FAILED", {}, tableName + '_' + item[keyProperty]);
                          } else {
                            response.send(event, context, "SUCCESS", {}, tableName + '_' + item[keyProperty]);
                          }
                        });
                      }

                      if (event.RequestType == "Delete") {
                        console.log("Deleting a Document");
                        var params = {
                          TableName: tableName,
                          Key: {
                            [keyProperty]: item[keyProperty]
                          }
                        };
                        docClient.delete(params, function(err, data) {
                          if (err) {
                            response.send(event, context, "FAILED", {});
                          } else {
                            response.send(event, context, "SUCCESS", {});
                          }
                        });
                      }
                    };
            Handler: index.handler
            Role: !GetAtt DynamoCfnLambdaRole.Arn
            Runtime: nodejs10.x
            Timeout: 60

如果有人有时间,我真的很感激一些详细的解释。

提前致谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM