如果不存在,则使用 Cloudformation 创建 DynamoDB 全局 Table

Create the DynamoDB global Table if doesn't exist using Cloudformation

我在下面分享 DynamoDB cft。我想添加一个条件,以便在添加另一个 table 时不会影响现有的 table。下面的模板用于创建 2 个全局 table,名称为 sample1 和 sample12,在参数部分配置:

AWSTemplateFormatVersion: "2010-09-09"
Description: 'AWS CloudFormation Template for DynamoDB tables For sample Service'
Parameters:
  sample1:
    Type: String
    Description: Select existing dynamodb table name from Parameter Store
    Default: sample1
  sample12:
    Type: String
    Description: Select existing dynamodb table name from Parameter Store
    Default: sample12
Resources: 
  sample1: 
    Type: AWS::DynamoDB::GlobalTable
    Properties:
      BillingMode: PAY_PER_REQUEST      
      AttributeDefinitions: 
        - 
          AttributeName: "msgId"
          AttributeType: "S" 
      KeySchema: 
        - 
          AttributeName: "msgId"
          KeyType: "HASH"
      StreamSpecification:
        StreamViewType: NEW_AND_OLD_IMAGES
      SSESpecification:
        SSEEnabled: true
        SSEType: "KMS"    
      Replicas:
      - Region: us-east-1        
      TableName: !Ref sample1
    
  sample12: 
    Type: AWS::DynamoDB::GlobalTable
    Properties: 
      BillingMode: PAY_PER_REQUEST
      AttributeDefinitions: 
        - 
          AttributeName: "msgId"
          AttributeType: "S"
        - 
          AttributeName: "flightNbr"
          AttributeType: "S"
        - 
          AttributeName: "recordUpdateTS"
          AttributeType: "S"
        - 
          AttributeName: "msgTypeCd"
          AttributeType: "S"
        - 
          AttributeName: "recordCreationEpochTime"
          AttributeType: "S"         
      KeySchema: 
        - 
          AttributeName: "msgId"
          KeyType: "HASH"
      StreamSpecification:
        StreamViewType: NEW_AND_OLD_IMAGES
      SSESpecification:
        SSEEnabled: true
        SSEType: "KMS"    
      Replicas:
      - Region: us-east-1        
      TableName: !Ref sample12
      GlobalSecondaryIndexes: 
        - 
          IndexName: "FLIGHTNBR_UPDATETS_INDEX"
          KeySchema: 
             - 
              AttributeName: "flightNbr"
              KeyType: "HASH"
             - 
              AttributeName: "recordUpdateTS"
              KeyType: "RANGE"  
          Projection: 
            ProjectionType: "ALL"   
        - 
          IndexName: "MSGTYPE_CREATETS_INDEX"
          KeySchema: 
             - 
              AttributeName: "msgTypeCd"
              KeyType: "HASH"
             - 
              AttributeName: "recordCreationEpochTime"
              KeyType: "RANGE"  
          Projection: 
            ProjectionType: "ALL"

如何添加条件或任何其他方法来检查 table 是否存在?

唯一的方法是通过 custom resource 形式的 lambda 函数。该函数将使用 AWS SDK 执行条件检查并根据这些检查的结果创建 aws 资源。