version: "0.2" title: Create An Amazon DynamoDB Table description: This wizard will create a new Amazon DynamoDB Table plan: intro: shortname: Intro description: Provide table name and key(s) values: table_name: type: prompt description: Enter the name of the table primary_key_name: type: prompt description: Enter the name of the primary key primary_key_type: type: prompt description: Primary key type choices: - actual_value: S display: String - actual_value: N display: Number - actual_value: B display: Binary wants_sort_key: type: prompt description: Add a sort key? choices: - display: Yes actual_value: yes - display: No actual_value: no sort_key_name: type: prompt description: Enter the name of the sort key condition: variable: wants_sort_key equals: yes sort_key_type: type: prompt description: Sort key type choices: - actual_value: S display: String - actual_value: N display: Number - actual_value: B display: Binary condition: variable: wants_sort_key equals: yes capacity: shortname: Capacity description: Set table capacity values: capacity_mode: type: prompt description: "Select the read/write capacity mode." choices: - actual_value: PROVISIONED display: Provisioned (free-tier eligible) - actual_value: PAY_PER_REQUEST display: On-demand read_capacity: type: prompt description: Enter read capacity units datatype: int default_value: 5 condition: variable: capacity_mode equals: PROVISIONED write_capacity: type: prompt description: Enter write capacity units datatype: int default_value: 5 condition: variable: capacity_mode equals: PROVISIONED encryption: shortname: Encryption description: Set table encryption values: encryption_settings: type: prompt description: "Encryption settings for your DynamoDB table" choices: - display: "DEFAULT" actual_value: default - display: "KMS - AWS managed CMK" actual_value: aws_managed_cmk - display: "KMS - Customer managed CMK" actual_value: customer_managed_cmk existing_cmks: type: apicall operation: kms.ListAliases params: {} query: "Aliases[?!starts_with(AliasName, `alias/aws`)].{display: AliasName, actual_value: TargetKeyId}" kms_key_id: type: prompt description: Choose a customer managed CMK choices: existing_cmks condition: variable: encryption_settings equals: customer_managed_cmk preview: shortname: Preview description: Preview results values: preview_cli_command_value: type: template value: | aws dynamodb create-table \ --table-name '{table_name}' \ --attribute-definitions \ 'AttributeName={primary_key_name},AttributeType={primary_key_type}' \ {% if {wants_sort_key} == yes %} 'AttributeName={sort_key_name},AttributeType={sort_key_type}' \ {% endif %} --key-schema \ 'AttributeName={primary_key_name},KeyType=HASH' \ {% if {wants_sort_key} == yes %} 'AttributeName={sort_key_name},KeyType=RANGE' \ {% endif %} {% if {encryption_settings} == aws_managed_cmk %} --sse-specification 'Enabled=true,SSEType=KMS' \ {% endif %} {% if {encryption_settings} == customer_managed_cmk %} --sse-specification \ 'Enabled=true,SSEType=KMS,KMSMasterKeyId={kms_key_id}' \ {% endif %} {% if {capacity_mode} == PROVISIONED %} --provisioned-throughput \ 'ReadCapacityUnits={read_capacity},WriteCapacityUnits={write_capacity}' {% endif %} {% if {capacity_mode} == PAY_PER_REQUEST %} --billing-mode PAY_PER_REQUEST {% endif %} preview_cfn_template_value: type: template value: | Resources: {table_name}: Type: "AWS::DynamoDB::Table" Properties: TableName: {table_name} AttributeDefinitions: - AttributeName: {primary_key_name} AttributeType: {primary_key_type} {% if {wants_sort_key} == yes %} - AttributeName: {sort_key_name} AttributeType: {sort_key_type} {% endif %} KeySchema: - AttributeName: {primary_key_name} KeyType: HASH {% if {wants_sort_key} == yes %} - AttributeName: {sort_key_name} KeyType: RANGE {% endif %} {% if {capacity_mode} == PROVISIONED %} ProvisionedThroughput: ReadCapacityUnits: {read_capacity} WriteCapacityUnits: {write_capacity} {% endif %} {% if {capacity_mode} == PAY_PER_REQUEST %} BillingMode: PAY_PER_REQUEST {% endif %} {% if {encryption_settings} == aws_managed_cmk %} SSESpecification: SSEEnabled: true SSEType: KMS {% endif %} {% if {encryption_settings} == customer_managed_cmk %} SSESpecification: KMSMasterKeyId: {kms_key_id} SSEEnabled: true SSEType: KMS {% endif %} preview_value: type: template value: | {%if {preview_type} == preview_cli_command %} {preview_cli_command_value} {% endif %} {%if {preview_type} == preview_cfn_template %} {preview_cfn_template_value} {% endif %} preview_type: type: prompt description: Select an preview format choices: - display: None actual_value: preview_none - display: AWS CLI command actual_value: preview_cli_command - display: AWS CloudFormation template actual_value: preview_cfn_template details: value: preview_value visible: True description: "Preview" __DONE__: execute: parameter-build: - type: define-variable varname: create_table_params value: TableName: "{table_name}" KeySchema: - AttributeName: "{primary_key_name}" KeyType: HASH AttributeDefinitions: - AttributeName: "{primary_key_name}" AttributeType: "{primary_key_type}" BillingMode: "{capacity_mode}" - type: merge-dict output_var: create_table_params condition: variable: wants_sort_key equals: yes overlays: - "{create_table_params}" - KeySchema: - AttributeName: "{sort_key_name}" KeyType: RANGE AttributeDefinitions: - AttributeName: "{sort_key_name}" AttributeType: "{sort_key_type}" - type: merge-dict output_var: create_table_params condition: variable: capacity_mode equals: PROVISIONED overlays: - "{create_table_params}" - ProvisionedThroughput: ReadCapacityUnits: "{read_capacity}" WriteCapacityUnits: "{write_capacity}" - type: merge-dict output_var: create_table_params condition: variable: encryption_settings equals: aws_managed_cmk overlays: - "{create_table_params}" - SSESpecification: Enabled: true SSEType: KMS - type: merge-dict output_var: create_table_params condition: variable: encryption_settings equals: customer_managed_cmk overlays: - "{create_table_params}" - SSESpecification: Enabled: true SSEType: KMS KMSMasterKeyId: "{kms_key_id}" - type: apicall operation: dynamodb.CreateTable params: "{create_table_params}" __OUTPUT__: value: | Wizard successfully created DynamoDB Table: Table name: {table_name} Primary partition key: {primary_key_name} ({primary_key_type}) {% if {wants_sort_key} == yes %} Primary sort key: {sort_key_name} ({sort_key_type}) {% endif %} {% if {preview_type} == preview_cli_command %} Steps to create table is equivalent to running the following sample AWS CLI commands: {preview_cli_command_value} {% endif %} {% if {preview_type} == preview_cfn_template %} Steps to create table is equivalent to deploying the following sample AWS CloudFormation template: {preview_cfn_template_value} {% endif %}