| AWSTemplateFormatVersion: '2010-09-09' |
| Description: 'Lambda Function for FRED ML Analysis' |
|
|
| Parameters: |
| FunctionName: |
| Type: String |
| Default: fred-ml-processor |
| Description: Name of the Lambda function |
| |
| S3BucketName: |
| Type: String |
| Default: fredmlv1 |
| Description: S3 bucket for storing reports |
| |
| Runtime: |
| Type: String |
| Default: python3.9 |
| AllowedValues: [python3.8, python3.9, python3.10, python3.11] |
| Description: Python runtime version |
| |
| Timeout: |
| Type: Number |
| Default: 300 |
| Description: Lambda function timeout in seconds |
| |
| MemorySize: |
| Type: Number |
| Default: 512 |
| Description: Lambda function memory size in MB |
|
|
| Resources: |
| |
| FredMLLambdaFunction: |
| Type: AWS::Lambda::Function |
| Properties: |
| FunctionName: !Ref FunctionName |
| Runtime: !Ref Runtime |
| Handler: lambda_function.lambda_handler |
| Code: |
| ZipFile: | |
| import json |
| def lambda_handler(event, context): |
| return { |
| 'statusCode': 200, |
| 'body': json.dumps('Hello from Lambda!') |
| } |
| Timeout: !Ref Timeout |
| MemorySize: !Ref MemorySize |
| Environment: |
| Variables: |
| FRED_API_KEY: !Ref FredAPIKey |
| S3_BUCKET: !Ref S3BucketName |
| Role: !GetAtt LambdaExecutionRole.Arn |
| ReservedConcurrencyLimit: 10 |
|
|
| |
| LambdaExecutionRole: |
| Type: AWS::IAM::Role |
| Properties: |
| RoleName: !Sub '${FunctionName}-execution-role' |
| AssumeRolePolicyDocument: |
| Version: '2012-10-17' |
| Statement: |
| - Effect: Allow |
| Principal: |
| Service: lambda.amazonaws.com |
| Action: sts:AssumeRole |
| ManagedPolicyArns: |
| - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole |
| Policies: |
| - PolicyName: FredMLLambdaPolicy |
| PolicyDocument: |
| Version: '2012-10-17' |
| Statement: |
| - Effect: Allow |
| Action: |
| - s3:GetObject |
| - s3:PutObject |
| - s3:DeleteObject |
| - s3:ListBucket |
| Resource: |
| - !Sub 'arn:aws:s3:::${S3BucketName}' |
| - !Sub 'arn:aws:s3:::${S3BucketName}/*' |
| - Effect: Allow |
| Action: |
| - logs:CreateLogGroup |
| - logs:CreateLogStream |
| - logs:PutLogEvents |
| Resource: '*' |
|
|
| |
| LambdaLogGroup: |
| Type: AWS::Logs::LogGroup |
| Properties: |
| LogGroupName: !Sub '/aws/lambda/${FunctionName}' |
| RetentionInDays: 30 |
|
|
| |
| FredAPIKey: |
| Type: AWS::SSM::Parameter |
| Properties: |
| Name: !Sub '/fred-ml/api-key' |
| Type: SecureString |
| Value: 'your-fred-api-key-here' |
| Description: FRED API Key for Lambda function |
|
|
| |
| LambdaFunctionUrl: |
| Type: AWS::Lambda::Url |
| Properties: |
| FunctionName: !Ref FredMLLambdaFunction |
| AuthType: NONE |
| Cors: |
| AllowCredentials: true |
| AllowHeaders: ['*'] |
| AllowMethods: ['GET', 'POST'] |
| AllowOrigins: ['*'] |
| MaxAge: 86400 |
|
|
| Outputs: |
| LambdaFunctionArn: |
| Description: ARN of the Lambda function |
| Value: !GetAtt FredMLLambdaFunction.Arn |
| Export: |
| Name: !Sub '${AWS::StackName}-LambdaFunctionArn' |
| |
| LambdaFunctionUrl: |
| Description: URL for direct Lambda function invocation |
| Value: !Ref LambdaFunctionUrl |
| Export: |
| Name: !Sub '${AWS::StackName}-LambdaFunctionUrl' |
| |
| LambdaExecutionRoleArn: |
| Description: ARN of the Lambda execution role |
| Value: !GetAtt LambdaExecutionRole.Arn |
| Export: |
| Name: !Sub '${AWS::StackName}-LambdaExecutionRoleArn' |