| | 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' |