AWS CloudFormation simplifies provisioning and management on AWS. It gives developers and systems administrators an easy way to create and manage a collection of related AWS resources, provisioning and updating them in an orderly and predictable fashion. To provision and configure stack resources, we must understand AWS CloudFormation templates, which are formatted text files in JSON or YAML. These templates describe the resources that we want to provision in your AWS CloudFormation stacks. We can use the AWS CloudFormation Designer or any text editor to create and save templates.
Let us how designer works in an another blog entry. For now you can play with designer if you wish.
https://console.aws.amazon.com/cloudformation/designer
Creating Dynamo DB Using AWS Cloud Formation Template.
1. We need to create a custom IAM policy "createstack". This policy hels us to execute aws createstack command.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1449904348000",
"Effect": "Allow",
"Action": [
"cloudformation:CreateStack"
],
"Resource": [
"*"
]
}
]
}
>
2. Attach the above created policy to user through whom we need to create dynamo db table.
3.install awscli and configure
a. sudo apt-get install awscli
b. aws configure
now give proper details like access key and region. This will create a config file in ~/.aws directory.
c. test if configured properly using command 'aws s3 ls'. This should list all the s3 buckets if you have any.
4.Create a Cloud formation temlate like below , for creating dynamo db.
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Resources" : {
"myDynamoDBTable" : {
"Type" : "AWS::DynamoDB::Table",
"Properties" : {
"AttributeDefinitions" : [
{
"AttributeName" : "Name",
"AttributeType" : "S"
},
{
"AttributeName" : "Age",
"AttributeType" : "S"
}
],
"KeySchema" : [
{
"AttributeName" : "Name",
"KeyType" : "HASH"
},
{
"AttributeName" : "Age",
"KeyType" : "RANGE"
}
],
"ProvisionedThroughput" : {
"ReadCapacityUnits" : "5",
"WriteCapacityUnits" : "5"
},
"TableName" : "Person"
}
}
}
}
5. Save the above file in a s3 bucket and copy the URL of this file.
6. Now on your command line , you can enter following command to create dynamodb table.
aws cloudformation create-stack --stack-name <stack_name> --template-url <s3_bucket_template_url>
----------------------------------------------------------------------------------------------------------------------------
Now, this is too much of manual process. This can be done using a python code as well. ( or java , node.js etc, lets see python for now ).
Here is how.
1. Create a config file like below. Save it as 'awsconfig'
[default]
aws_access_key_id = xxxxxxxx
aws_secret_access_key = xxxxxxxxxxxxxxxxxxx
region = us-west-2
2. Create a shell script like below.
sudo apt-get install -fy --force-yes awscli python
sudo curl -s 'https://bootstrap.pypa.io/get-pip.py' | python2.7 && pip install boto awscli
sudo mkdir ~/.aws
cp awsconfig ~/.aws/config
The above script should install all the required tools for python to create a dynamo db. Allow execution permission and execute the script.
3. Create a python file using following code.
from __future__ import print_function # Python 2/3 compatibility
import boto3
dynamodb = boto3.resource('dynamodb', region_name='us-west-2')
table = dynamodb.create_table(
TableName='Person',
KeySchema=[
{
'AttributeName': 'name',
'KeyType': 'HASH' #Partition key
},
{
'AttributeName': 'age',
'KeyType': 'RANGE' #Sort key
}
],
AttributeDefinitions=[
{
'AttributeName': 'name',
'AttributeType': 'S'
},
{
'AttributeName': 'age',
'AttributeType': 'N'
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 5,
'WriteCapacityUnits': 5
}
)
print("Table status:", table.table_status)
4. Execute python code .
python create_dynamo_table.py
5. Check your Dynamo DB service , table called person should have been created.