@mapbox/cloudfriend
Version:
Helper functions for assembling CloudFormation templates in JavaScript
166 lines • 4.04 kB
JSON
{
"AWSTemplateFormatVersion": "2010-09-09",
"Metadata": {},
"Parameters": {},
"Rules": {},
"Mappings": {},
"Conditions": {},
"Resources": {
"MyLambdaLogs": {
"Type": "AWS::Logs::LogGroup",
"Properties": {
"LogGroupName": {
"Fn::Sub": [
"/aws/lambda/${name}",
{
"name": {
"Fn::Sub": "${AWS::StackName}-MyLambda"
}
}
]
},
"RetentionInDays": 14
}
},
"MyLambda": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Code": {
"S3Bucket": "my-code-bucket",
"S3Key": "path/to/code.zip"
},
"Description": {
"Fn::Sub": "MyLambda in the ${AWS::StackName} stack"
},
"FunctionName": {
"Fn::Sub": "${AWS::StackName}-MyLambda"
},
"Handler": "index.handler",
"MemorySize": 128,
"Runtime": "nodejs22.x",
"Timeout": 300,
"Role": {
"Fn::GetAtt": [
"MyLambdaRole",
"Arn"
]
}
}
},
"MyLambdaErrorAlarm": {
"Type": "AWS::CloudWatch::Alarm",
"Properties": {
"AlarmName": {
"Fn::Sub": "${AWS::StackName}-MyLambda-Errors-${AWS::Region}"
},
"AlarmDescription": {
"Fn::Sub": [
"Error alarm for ${name} lambda function in ${AWS::StackName} stack",
{
"name": {
"Fn::Sub": "${AWS::StackName}-MyLambda"
}
}
]
},
"AlarmActions": [],
"Period": 60,
"EvaluationPeriods": 5,
"DatapointsToAlarm": 1,
"Statistic": "Sum",
"Threshold": 0,
"ComparisonOperator": "GreaterThanThreshold",
"TreatMissingData": "notBreaching",
"Namespace": "AWS/Lambda",
"Dimensions": [
{
"Name": "FunctionName",
"Value": {
"Ref": "MyLambda"
}
}
],
"MetricName": "Errors"
}
},
"MyLambdaLogPolicy": {
"Type": "AWS::IAM::Policy",
"DependsOn": "MyLambdaRole",
"Properties": {
"PolicyName": "MyLambda-lambda-log-access",
"Roles": [
{
"Ref": "MyLambdaRole"
}
],
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "logs:*",
"Resource": {
"Fn::GetAtt": [
"MyLambdaLogs",
"Arn"
]
}
}
]
}
}
},
"MyLambdaRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"Service": {
"Fn::Sub": "lambda.amazonaws.com"
}
}
}
]
}
}
},
"MyLambdaScheduler": {
"Type": "AWS::Scheduler::Schedule",
"Properties": {
"Name": {
"Fn::Sub": "${AWS::StackName}-MyLambda"
},
"Description": {
"Fn::Sub": [
"Schedule for ${function} in ${AWS::StackName} stack",
{
"function": {
"Fn::Sub": "${AWS::StackName}-MyLambda"
}
}
]
},
"State": "DISABLED",
"ScheduleExpression": "rate(1 hour)",
"FlexibleTimeWindow": {
"Mode": "OFF"
},
"Target": {
"Arn": {
"Fn::GetAtt": [
"MyLambda",
"Arn"
]
},
"RoleArn": "arn:aws:iam::012345678901:role/MyCoolRole"
},
"GroupName": "my-cool-stack"
}
}
},
"Outputs": {}
}