{
	"AWSTemplateFormatVersion": "2010-09-09",

	"Description": "This CloudFormation Template spins up an environment for the AES-Kibana Demo",
	"Metadata" : {
  "AWS::CloudFormation::Interface" : {
    "ParameterGroups" : [
      {
        "Label" : { "default" : "Webserver Configuration" },
        "Parameters" : [ "VPCforWebServer", "SubnetforWebServer", "SSHKeyPair","LatestAMIId" ]
      },
      {
        "Label" : { "default":"Amazon Kinesis Data Firehose Configuration" },
        "Parameters" : [ "S3BucketFailedRecords" ]
      },
	  {
        "Label" : { "default":"Kibana Configuration" },
        "Parameters" : [ "UserId", "TempPassword" ]
      }
    ],
    "ParameterLabels" : {
      "VPCforWebServer" : { "default" : "VPC for Webserver deployment" },
	  "SubnetforWebServer" : { "default" : "Public Subnet for Webserver deployment" },
	  "SSHKeyPair" : { "default" : "SSH Keypair for the Webserver" },
	  "LatestAMIId" : { "default" : "Base AMI ID(DONOT CHANGE)" },
	  "S3BucketFailedRecords" : { "default" : "S3 bucket for  failed records" },
	  "UserId" : { "default" : "Kibana User Id" },
	  "TempPassword" : { "default" : "Temporary Kibana Password(min 8 characters)" }
    }
  }
},
	"Parameters": {
		"S3BucketFailedRecords": {
			"Type": "String"

		},
		"VPCforWebServer": {
			"Type": "AWS::EC2::VPC::Id"
		},
		"SubnetforWebServer": {
			"Type": "AWS::EC2::Subnet::Id"
		},

		"SSHKeyPair": {
			"Type": "AWS::EC2::KeyPair::KeyName"
		},
		"LatestAMIId": {
			"Type": "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>",
			"Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
		},
		"UserId": {
			"Type": "String"
	},
		"TempPassword": {
			"Type": "String",
			"NoEcho" : "true",
			"MinLength" : "8"
		}
		
	},


	"Resources": {
		"AesDemoCognitoUserpool": {
			"Type": "AWS::Cognito::UserPool",
			"Properties": {
				"AdminCreateUserConfig": {
					"AllowAdminCreateUserOnly": true
				},
				"Policies": {
					"PasswordPolicy": {
						"MinimumLength": 8
					}
				},
				"UserPoolName": "aes_kibana_demo_userpool"
			}
		},
		"AesDemoCognitoUserpoolclient": {
			"Type": "AWS::Cognito::UserPoolClient",
			"Properties": {
				"ClientName": "cognito_user_pool",
				"UserPoolId": {
					"Ref": "AesDemoCognitoUserpool"
				}
			}
		},
		"AesDemoCognitoIdentitypool": {
			"Type": "AWS::Cognito::IdentityPool",
			"Properties": {
				"IdentityPoolName": "aes_kibana_demo_identitypool",
				"AllowUnauthenticatedIdentities": false,
				"CognitoIdentityProviders": [{
					"ClientId": {
						"Ref": "AesDemoCognitoUserpoolclient"
					},
					"ProviderName": {
						"Fn::GetAtt": ["AesDemoCognitoUserpool", "ProviderName"]
					}
				}]
			}
		},

		"CognitoAuthUserIAMRole": {
			"Type": "AWS::IAM::Role",
			"Properties": {
				"AssumeRolePolicyDocument": {
					"Version": "2012-10-17",
					"Statement": [{
						"Effect": "Allow",
						"Principal": {
							"Federated": "cognito-identity.amazonaws.com"
						},
						"Action": "sts:AssumeRoleWithWebIdentity",
						"Condition": {
							"StringEquals": {
								"cognito-identity.amazonaws.com:aud": {
									"Ref": "AesDemoCognitoIdentitypool"
								}
							},
							"ForAnyValue:StringLike": {
								"cognito-identity.amazonaws.com:amr": "authenticated"
							}
						}
					}]
				},

				"RoleName": "aesdemocognitoauthuserrole"
			}
		},
		"CognitoIdentityPoolRoleAttachment": {
			"Type": "AWS::Cognito::IdentityPoolRoleAttachment",
			"Properties": {
				"IdentityPoolId": {
					"Ref": "AesDemoCognitoIdentitypool"
				},
				"Roles": {
					"authenticated": {
						"Fn::GetAtt": ["CognitoAuthUserIAMRole", "Arn"]
					}
				}
			}
		},
		"KinesisFirehoseRole": {
			"Type": "AWS::IAM::Role",
			"Properties": {
				"AssumeRolePolicyDocument": {
					"Version": "2012-10-17",
					"Statement": [{
						"Sid": "",
						"Effect": "Allow",
						"Principal": {
							"Service": "firehose.amazonaws.com"
						},
						"Action": "sts:AssumeRole",
						"Condition": {
							"StringEquals": {
								"sts:ExternalId": {
									"Ref": "AWS::AccountId"
								}
							}
						}
					}]
				},

				"RoleName": "aes_kibana_demo_firehose_delivery_role"
			}
		},
		"ElasticSearchDomain": {
			"Type": "AWS::Elasticsearch::Domain",
			"Properties": {
				"AccessPolicies": {
					"Version": "2012-10-17",
					"Statement": [{
							"Effect": "Allow",
							"Principal": {
								"AWS": {
									"Fn::GetAtt": ["KinesisFirehoseRole", "Arn"]
								}
							},
							"Action": "es:*",
							"Resource": {
								"Fn::Join": ["", ["arn:aws:es:", {
									"Ref": "AWS::Region"
								}, ":", {
									"Ref": "AWS::AccountId"
								}, ":domain/aes-kibana-demo/*"]]
							}
						},
						{
							"Effect": "Allow",
							"Principal": {
								"AWS": {
									"Fn::GetAtt": ["CognitoAuthUserIAMRole", "Arn"]
								}
							},
							"Action": "es:ESHttp*",
							"Resource": {
								"Fn::Join": ["", ["arn:aws:es:", {
									"Ref": "AWS::Region"
								}, ":", {
									"Ref": "AWS::AccountId"
								}, ":domain/aes-kibana-demo/*"]]
							}
						}
					]
				},

				"DomainName": "aes-kibana-demo",
				"EBSOptions": {
					"EBSEnabled": true,
					"VolumeSize": 100,
					"VolumeType": "gp2"
				},
				"ElasticsearchClusterConfig": {
					"InstanceCount": 1,
					"InstanceType": "m4.large.elasticsearch"
				},
				"ElasticsearchVersion": "6.3"
			}
		},
		"AesdemoFirehoseIAMPolicy": {
			"Type": "AWS::IAM::Policy",
			"Properties": {
				"PolicyDocument": {
					"Version": "2012-10-17",
					"Statement": [{
							"Sid": "",
							"Effect": "Allow",
							"Action": [
								"s3:AbortMultipartUpload",
								"s3:GetBucketLocation",
								"s3:GetObject",
								"s3:ListBucket",
								"s3:ListBucketMultipartUploads",
								"s3:PutObject"
							],
							"Resource": [{
									"Fn::Join": ["", ["arn:aws:s3:::", {
										"Ref": "S3BucketFailedRecords"
									}]]
								},
								{
									"Fn::Join": ["", ["arn:aws:s3:::", {
										"Ref": "S3BucketFailedRecords"
									}, "/*"]]
								}
							]
						},
						{
							"Sid": "",
							"Effect": "Allow",
							"Action": [
								"lambda:InvokeFunction",
								"lambda:GetFunctionConfiguration"
							],
							"Resource": {
								"Fn::GetAtt": ["AesdemoLambdaFunction", "Arn"]
							}
						},
						{
							"Sid": "",
							"Effect": "Allow",
							"Action": [
								"es:DescribeElasticsearchDomain",
								"es:DescribeElasticsearchDomains",
								"es:DescribeElasticsearchDomainConfig",
								"es:ESHttpPost",
								"es:ESHttpPut"
							],
							"Resource": [{
								"Fn::Join": ["", ["arn:aws:es:", {
									"Ref": "AWS::Region"
								}, ":", {
									"Ref": "AWS::AccountId"
								}, ":domain/aes-kibana-demo"]]
							}, {
								"Fn::Join": ["", ["arn:aws:es:", {
									"Ref": "AWS::Region"
								}, ":", {
									"Ref": "AWS::AccountId"
								}, ":domain/aes-kibana-demo/*"]]
							}]
						},
						{
							"Sid": "",
							"Effect": "Allow",
							"Action": [
								"es:ESHttpGet"
							],
							"Resource": [{
									"Fn::Join": ["", ["arn:aws:es:", {
										"Ref": "AWS::Region"
									}, ":", {
										"Ref": "AWS::AccountId"
									}, ":domain/aes-kibana-demo/_all/_settings"]]
								},
								{
									"Fn::Join": ["", ["arn:aws:es:", {
										"Ref": "AWS::Region"
									}, ":", {
										"Ref": "AWS::AccountId"
									}, ":domain/aes-kibana-demo/_cluster/stats"]]
								},
								{
									"Fn::Join": ["", ["arn:aws:es:", {
										"Ref": "AWS::Region"
									}, ":", {
										"Ref": "AWS::AccountId"
									}, ":domain/aes-kibana-demo/apache_logs*/_mapping/access_logs"]]
								},
								{
									"Fn::Join": ["", ["arn:aws:es:", {
										"Ref": "AWS::Region"
									}, ":", {
										"Ref": "AWS::AccountId"
									}, ":domain/aes-kibana-demo/_nodes"]]
								},
								{
									"Fn::Join": ["", ["arn:aws:es:", {
										"Ref": "AWS::Region"
									}, ":", {
										"Ref": "AWS::AccountId"
									}, ":domain/aes-kibana-demo/_nodes/stats"]]
								},
								{
									"Fn::Join": ["", ["arn:aws:es:", {
										"Ref": "AWS::Region"
									}, ":", {
										"Ref": "AWS::AccountId"
									}, ":domain/aes-kibana-demo/_nodes/*/stats"]]
								},
								{
									"Fn::Join": ["", ["arn:aws:es:", {
										"Ref": "AWS::Region"
									}, ":", {
										"Ref": "AWS::AccountId"
									}, ":domain/aes-kibana-demo/_stats"]]
								},
								{
									"Fn::Join": ["", ["arn:aws:es:", {
										"Ref": "AWS::Region"
									}, ":", {
										"Ref": "AWS::AccountId"
									}, ":domain/aes-kibana-demo/apache_logs*/_stats"]]
								}

							]
						},
						{
							"Sid": "",
							"Effect": "Allow",
							"Action": [
								"logs:PutLogEvents"
							],
							"Resource": [{
									"Fn::Join": ["", ["arn:aws:logs:", {
										"Ref": "AWS::Region"
									}, ":", {
										"Ref": "AWS::AccountId"
									}, ":log-group:/aws/kinesisfirehose/aes-kibaba-demo-firehose-stream:log-stream:*"]]
								}

							]
						}
					]
				},
				"PolicyName": "AesdemoFirehoseIAMPolicy",
				"Roles": [{
					"Ref": "KinesisFirehoseRole"
				}]
			}
		},
		"AesDemoLambdaIAMPolicy": {
			"Type": "AWS::IAM::Policy",
			"Properties": {
				"PolicyDocument": {
					"Version": "2012-10-17",
					"Statement": [{
							"Sid": "VisualEditor0",
							"Effect": "Allow",
							"Action": [
								"firehose:PutRecord",
								"firehose:PutRecordBatch"
							],
							"Resource": {
								"Fn::GetAtt": ["AesdemoKinesisFirehoseDeliveryStream", "Arn"]
							}

						},
						{
							"Sid": "VisualEditor1",
							"Effect": "Allow",
							"Action": [
								"logs:CreateLogStream",
								"logs:CreateLogGroup",
								"logs:PutLogEvents"
							],
							"Resource": "*"
						}
					]
				},
				"PolicyName": "AesDemoLambdaIAMPolicy",
				"Roles": [{
					"Ref": "AesdemoLambdaIAMRole"
				}]
			}
		},
		"AesdemoLambdaIAMRole": {
			"Type": "AWS::IAM::Role",
			"Properties": {
				"RoleName": "AesdemoLambdaIAMRole",

				"AssumeRolePolicyDocument": {
					"Version": "2012-10-17",
					"Statement": [{
						"Effect": "Allow",
						"Principal": {
							"Service": "lambda.amazonaws.com"
						},
						"Action": "sts:AssumeRole"
					}]
				}

			}
		},
		"AesdemoCognitoESRole": {
			"Type": "AWS::IAM::Role",
			"Properties": {
				"RoleName": "AesdemoCognitoESRole",

				"AssumeRolePolicyDocument": {
					"Version": "2012-10-17",
					"Statement": [{
						"Effect": "Allow",
						"Principal": {
							"Service": "es.amazonaws.com"
						},
						"Action": "sts:AssumeRole"
					}]
				},
				"ManagedPolicyArns" :["arn:aws:iam::aws:policy/AmazonESCognitoAccess"]

			}
		},
		"AesdemoLambdaFunction": {
			"Type": "AWS::Lambda::Function",
			"DependsOn": ["myWaitCondition"],
			"Properties": {
				"Code": {
					"S3Bucket": {
						"Ref": "TempS3Bucket"
					},
					"S3Key": "aes-kibana-demo/Lambda/AES_Kibana_Demo_Lambda.zip"
				},
				"Handler": "Lambda.lambda_handler",
				"MemorySize": 128,
				"Role": {
					"Fn::GetAtt": ["AesdemoLambdaIAMRole", "Arn"]
				},
				"Runtime": "python3.6",
				"Timeout": 300,
				"FunctionName": "aes-demo-lambda-function"
			}
		},
		"AesdemoKinesisFirehoseDeliveryStream": {
			"Type": "AWS::KinesisFirehose::DeliveryStream",
			"DependsOn": ["AesdemoFirehoseIAMPolicy"],
			"Properties": {
				"DeliveryStreamName": "aes-kibana-demo-firehose-stream",
				"DeliveryStreamType": "DirectPut",
				"ElasticsearchDestinationConfiguration": {
					"BufferingHints": {
						"IntervalInSeconds": 60,
						"SizeInMBs": 5
					},

					"DomainARN": {
						"Fn::GetAtt": ["ElasticSearchDomain", "DomainArn"]
					},
					"IndexName": "apache_logs",
					"IndexRotationPeriod": "NoRotation",
					"ProcessingConfiguration": {
						"Enabled": true,
						"Processors": [{
							"Parameters": [{
									"ParameterName": "LambdaArn",
									"ParameterValue": {
										"Fn::GetAtt": ["AesdemoLambdaFunction", "Arn"]
									}
								},
								{
									"ParameterName": "BufferSizeInMBs",
									"ParameterValue": 1
								},
								{
									"ParameterName": "BufferIntervalInSeconds",
									"ParameterValue": 60
								},
								{
									"ParameterName": "NumberOfRetries",
									"ParameterValue": 5
								},
								{
									"ParameterName": "RoleArn",
									"ParameterValue": {
										"Fn::GetAtt": ["KinesisFirehoseRole", "Arn"]
									}
								}
							],
							"Type": "Lambda"
						}]
					},
					"RetryOptions": {
						"DurationInSeconds": 120
					},
					"RoleARN": {
						"Fn::GetAtt": ["KinesisFirehoseRole", "Arn"]
					},
					"S3BackupMode": "FailedDocumentsOnly",
					"S3Configuration": {
						"BucketARN": {
							"Fn::Join": ["", ["arn:aws:s3:::", {
								"Ref": "S3BucketFailedRecords"
							}]]
						},
						"CompressionFormat": "ZIP",
						"Prefix": "aes-kibana-demo-failed",
						"RoleARN": {
							"Fn::GetAtt": ["KinesisFirehoseRole", "Arn"]
						},
						"BufferingHints": {
							"IntervalInSeconds": 60,
							"SizeInMBs": 1
						},
						"CloudWatchLoggingOptions": {
							"Enabled": true,
							"LogGroupName": "/aws/kinesisfirehose/aes-kibana-demo-firehose-stream",
							"LogStreamName": "S3Delivery"
						}

					},
					"TypeName": "access_logs",
					"CloudWatchLoggingOptions": {
						"Enabled": true,
						"LogGroupName": "/aws/kinesisfirehose/aes-kibana-demo-firehose-stream",
						"LogStreamName": "ElasticsearchDelivery"
					}
				}

			}
		},
		"AesdemoWebserverSecurityGroup": {
			"Type": "AWS::EC2::SecurityGroup",
			"Properties": {
				"GroupName": "AESKibanaDemoWebserverSecurityGroup",
				"GroupDescription": "Security Group for AES Demo Web Server",
				"SecurityGroupIngress": [{
						"IpProtocol": "tcp",
						"FromPort": 22,
						"ToPort": 22,
						"CidrIp": "0.0.0.0/0"
					},
					{
						"IpProtocol": "tcp",
						"FromPort": 80,
						"ToPort": 80,
						"CidrIp": "0.0.0.0/0"
					}
				],
				"VpcId": {
					"Ref": "VPCforWebServer"
				}
			}
		},
		"TempS3Bucket": {
			"Type": "AWS::S3::Bucket",
			"Properties": {}
		},
		"AesDemoWebserverIAMPolicy1": {
			"Type": "AWS::IAM::Policy",
			"Properties": {
				"PolicyDocument": {
					"Version": "2012-10-17",
					"Statement": [
						{
							"Sid": "VisualEditor0",
							"Effect": "Allow",
							"Action": [
								"s3:PutObject","s3:DeleteObject"
							],
							"Resource": {
								"Fn::Join": ["", [{
									"Fn::GetAtt": ["TempS3Bucket", "Arn"]
								}, "/*"]]
							}
						},
						{
							"Sid": "VisualEditor1",
							"Effect": "Allow",
							"Action": [
								"s3:ListBucket"
							],
							"Resource": {
								"Fn::GetAtt": ["TempS3Bucket", "Arn"]
							}
						}
						
					]
				},
				"PolicyName": "AesDemoWebserverIAMPolicy1",
				"Roles": [{
					"Ref": "AesDemoWebserverIAMRole"
				}]
			}
		},
		"AesDemoWebserverIAMPolicy2": {
			"Type": "AWS::IAM::Policy",
			"Properties": {
				"PolicyDocument": {
					"Version": "2012-10-17",
					"Statement": [{
							"Sid": "VisualEditor0",
							"Effect": "Allow",
							"Action": "cloudwatch:PutMetricData",
							"Resource": "*"
						},
						{
							"Sid": "VisualEditor1",
							"Effect": "Allow",
							"Action": [
								"firehose:PutRecord",
								"firehose:PutRecordBatch"
							],
							"Resource": {
								"Fn::GetAtt": ["AesdemoKinesisFirehoseDeliveryStream", "Arn"]
							}
						}

					]
				},
				"PolicyName": "AesDemoWebserverIAMPolicy2",
				"Roles": [{
					"Ref": "AesDemoWebserverIAMRole"
				}]
			}
		},
		"AesDemoWebserverIAMPolicy3": {
			"Type": "AWS::IAM::Policy",
			"Properties": {
				"PolicyDocument": {
					"Version": "2012-10-17",
					"Statement": [
						{
							"Sid": "VisualEditor0",
							"Effect": "Allow",
							"Action": ["es:UpdateElasticsearchDomainConfig","es:DescribeElasticsearchDomains"]
,
							"Resource": {
								"Fn::GetAtt": ["ElasticSearchDomain", "DomainArn"]
							}
						},
						{
							"Sid": "VisualEditor1",
							"Effect": "Allow",
							"Action": ["cognito-idp:*Domain","cognito-idp:AdminCreateUser"],
							"Resource": {
								"Fn::GetAtt": ["AesDemoCognitoUserpool", "Arn"]
							}
						},
						
						{
						"Sid": "VisualEditor2",
						"Effect": "Allow",
						"Action": [ "iam:PassRole" ],
						"Resource": {
								"Fn::Join": ["", ["arn:aws:iam::",{"Ref": "AWS::AccountId"},":role/AesdemoCognitoESRole"]]
							} 
    },
	{
						"Sid": "VisualEditor3",
						"Effect": "Allow",
						"Action": ["lambda:GetFunctionConfiguration"],
						"Resource": {
								"Fn::Join": ["", ["arn:aws:lambda:",{"Ref": "AWS::Region"},":",{"Ref": "AWS::AccountId"},":function:aes-demo-lambda-function"]]
							} 
    }
						

					]
				},
				"PolicyName": "AesDemoWebserverIAMPolicy3",
				"Roles": [{
					"Ref": "AesDemoWebserverIAMRole"
				}]
			}
		},
		"AesDemoWebserverIAMRole": {
			"Type": "AWS::IAM::Role",
			"Properties": {
				"RoleName": "AesDemoWebserverIAMRole",
				"AssumeRolePolicyDocument": {
					"Version": "2012-10-17",
					"Statement": [{
						"Effect": "Allow",
						"Principal": {
							"Service": "ec2.amazonaws.com"
						},
						"Action": "sts:AssumeRole"
					}]
				}

			}
		},

		"AesDemoWebserverInstanceProfile": {
			"Type": "AWS::IAM::InstanceProfile",
			"Properties": {
				"Roles": [{
					"Ref": "AesDemoWebserverIAMRole"
				}],
				"InstanceProfileName": "AesDemoWebserverInstanceprofile"
			}
		},
		"AesdemoWebserverInstance": {
			"Type": "AWS::EC2::Instance",
			"DependsOn": ["AesDemoWebserverIAMPolicy1", "TempS3Bucket","AesDemoWebserverIAMPolicy3"],
			"Properties": {
				"ImageId": {
					"Ref": "LatestAMIId"
				},
				"IamInstanceProfile": {
					"Ref": "AesDemoWebserverInstanceProfile"
				},
				"InstanceType": "t2.micro",
				"KeyName": {
					"Ref": "SSHKeyPair"
				},
				"SecurityGroupIds": [{
					"Ref": "AesdemoWebserverSecurityGroup"
				}],
				"SubnetId": {
					"Ref": "SubnetforWebServer"
				},
				"Tags": [{
					"Key": "Name",
					"Value": "AES Kibana Demo"
				}],
				"UserData": {
					"Fn::Base64": {
						"Fn::Join": ["", [
							"#!/bin/bash\n",
							"wget 'https://s3.amazonaws.com/aws-database-blog/artifacts/aes-kibana-demo/Lambda/AES_Kibana_Demo_Lambda.zip'\n",

							{
								"Fn::Join": ["", ["aws s3 cp AES_Kibana_Demo_Lambda.zip s3://", {
									"Ref": "TempS3Bucket"
								}, "/aes-kibana-demo/Lambda/\n"]]
							},
							{
								"Fn::Join": ["", ["echo ", {
									"Ref": "myWaitHandle"
								}, "\n"]]
							},
							"rm -rf AES_Kibana_Demo_Lambda.zip\n",
							{
								"Fn::Join": ["", ["/opt/aws/bin/cfn-signal -s true \"", {
									"Ref": "myWaitHandle"
								}, "\"\n"]]
							},
							"wget  https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn1.noarch.rpm\n",
							"yum install -y java-1.7.0-openjdk\n",
							"yum install -y aws-kinesis-agent-latest.amzn1.noarch.rpm httpd php\n",
							"cd /etc/aws-kinesis\n",
							"wget https://s3.amazonaws.com/aws-database-blog/artifacts/aes-kibana-demo/WebServer/agent.json\n",
							"mv agent.json.1 agent.json -f\n",
							"cd /etc/httpd/conf\n",
							"wget https://s3.amazonaws.com/aws-database-blog/artifacts/aes-kibana-demo/WebServer/httpd.conf\n",
							"mv -f httpd.conf.1 httpd.conf\n",
							"cd /var/www/html\n",
							"wget https://s3.amazonaws.com/aws-database-blog/artifacts/aes-kibana-demo/WebServer/main.php\n",
							"wget https://s3.amazonaws.com/aws-database-blog/artifacts/aes-kibana-demo/WebServer/search.php\n",
							"wget https://s3.amazonaws.com/aws-database-blog/artifacts/aes-kibana-demo/WebServer/recommendation.php\n",
							"wget https://s3.amazonaws.com/aws-database-blog/artifacts/aes-kibana-demo/WebServer/echo.php\n",
							"wget https://s3.amazonaws.com/aws-database-blog/artifacts/aes-kibana-demo/WebServer/kindle.php\n",
							"wget https://s3.amazonaws.com/aws-database-blog/artifacts/aes-kibana-demo/WebServer/firetvstick.php\n",
							"service httpd start\n",
							"chmod a+rx /var/log/httpd\n",
							"chmod a+r /var/log/httpd/access_log\n",
							{
								"Fn::Join": ["", ["echo '\"cloudwatch.endpoint\" :  \"monitoring.", {
									"Ref": "AWS::Region"
								}, ".amazonaws.com\",' >> /etc/aws-kinesis/agent.json\n"]]
							},
							{
								"Fn::Join": ["", ["echo '\"firehose.endpoint\" :  \"firehose.", {
									"Ref": "AWS::Region"
								}, ".amazonaws.com\"}' >> /etc/aws-kinesis/agent.json\n"]]
							},
							{
								"Fn::Join": ["", ["/opt/aws/bin/cfn-signal -s true \"", {
									"Ref": "myWaitHandle"
								}, "\"\n"]]
							},
							"service aws-kinesis-agent start\n",
							{
								"Fn::Join": ["", ["export AWS_DEFAULT_REGION=", {"Ref": "AWS::Region"},"\n" ]]
							},
														{
								"Fn::Join": ["", ["aws cognito-idp create-user-pool-domain --domain ", {"Ref": "TempS3Bucket"}
								, " --user-pool-id ",{"Ref": "AesDemoCognitoUserpool"}," --region ",{"Ref": "AWS::Region"},"\n" ]]
							},
							
							{
								"Fn::Join": ["", ["aws cognito-idp admin-create-user --message-action SUPPRESS --user-pool-id ", {"Ref": "AesDemoCognitoUserpool"}
								, " --username ",{"Ref": "UserId"}," --temporary-password ",{"Ref": "TempPassword"}," --region ",{"Ref": "AWS::Region"},"\n" ]]
							},
							
							{
								"Fn::Join": ["", ["aws es update-elasticsearch-domain-config --domain-name aes-kibana-demo --cognito-options Enabled=true,UserPoolId=", {"Ref": "AesDemoCognitoUserpool"}
								, ",IdentityPoolId=",{"Ref": "AesDemoCognitoIdentitypool"},",RoleArn=arn:aws:iam::",{"Ref": "AWS::AccountId"},":role/AesdemoCognitoESRole --region  ",{"Ref": "AWS::Region"},"\n" ]]
							},
							"status=$(aws es describe-elasticsearch-domains --domain-names aes-kibana-demo | grep '\"Processing' | cut -d ':' -f 2 | cut -d ',' -f 1 |  cut -d ' ' -f 2)\n",
							"while [ $status != 'false' ] \n",
							"do\n",
							"sleep 30\n",
							"status=$(aws es describe-elasticsearch-domains --domain-names aes-kibana-demo | grep '\"Processing' | cut -d ':' -f 2 | cut -d ',' -f 1 |  cut -d ' ' -f 2)\n",
							"done\n",
							"fnname=$(aws lambda get-function-configuration --function-name aes-demo-lambda-function | grep 'FunctionName' | cut -d ':' -f 2 | cut -d ',' -f 1)\n",
							"while [ $fnname != '\"aes-demo-lambda-function\"' ] \n",
							"do\n",
							"sleep 30\n",
							"fnname=$(aws lambda get-function-configuration --function-name aes-demo-lambda-function | grep 'FunctionName' | cut -d ':' -f 2 | cut -d ',' -f 1)\n",
							"done\n",
							{
								"Fn::Join": ["", ["aws s3 rm --recursive s3://", {"Ref": "TempS3Bucket"	}
								, " \n" ]]
							},
														
							{
								"Fn::Join": ["", ["/opt/aws/bin/cfn-signal -s true \"", {
									"Ref": "myWaitHandleFinal"
								}, "\"\n"]]
							}
						]]
					}
				}

			}
		},
		"myWaitHandle": {
			"Type": "AWS::CloudFormation::WaitConditionHandle"
		},
		"myWaitCondition": {
			"Type": "AWS::CloudFormation::WaitCondition",
			"DependsOn": "AesdemoWebserverInstance",
			"Properties": {
				"Handle": {
					"Ref": "myWaitHandle"
				},
				"Timeout": "900",
				"Count": 1
			}
		},

			"myWaitHandleFinal": {
			"Type": "AWS::CloudFormation::WaitConditionHandle"
		},
		"myWaitConditionFinal": {
			"Type": "AWS::CloudFormation::WaitCondition",
			"DependsOn": "AesdemoWebserverInstance",
			"Properties": {
				"Handle": {
					"Ref": "myWaitHandleFinal"
				},
				"Timeout": "1200",
				"Count": 1
			}
		}
	},
	"Outputs": {
		"WebserverHTTPURL": {
			"Description": "DNSName of the Apache Webserver",
			"Value": {
				"Fn::Join": ["", ["http://", {
					"Fn::GetAtt": ["AesdemoWebserverInstance", "PublicIp"]
				}, "/main.php"]]
			}
		},
		"KibanaHTTPURL": {
			"Description": "Link to Kibana",
			"Value": {
				"Fn::Join": ["", ["https://", {
					"Fn::GetAtt": ["ElasticSearchDomain", "DomainEndpoint"]
				}, "/_plugin/kibana/"]]
			}
		}
		
	}

}