-
Notifications
You must be signed in to change notification settings - Fork 0
/
template.yaml
88 lines (79 loc) · 3.2 KB
/
template.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Transform: AWS::Serverless-2016-10-31
Description: Slackrock - Conversational AI assistant powered by Amazon Bedrock & Lambda
Parameters:
SlackSecretsName:
Type: String
Description: The name of the AWS Secrets Manager secret containing Slack bot token and signing secret.
Default: slackrock
MemorySize:
Type: Number
Description: |
The amount of memory (in MB) allocated to the Lambda function.
Increasing this may improve performance since the CPU power allocated to a Lambda function is proportional
to the amount of memory configured for the function. However, this does have cost implications.
512 MB seems to work well based on testing, but you may adjust this value based on your specific requirements.
Default: "512"
MinValue: "128"
MaxValue: "10240"
ConstraintDescription: Must be a value between 128 MB and 10240 MB
Resources:
Slackrock:
Type: AWS::Serverless::Function
Properties:
FunctionName: Slackrock
Description: Slackrock - Conversational AI assistant powered by Amazon Bedrock & Lambda
Architectures: [arm64]
MemorySize: !Ref MemorySize
CodeUri: ./src/
FunctionUrlConfig:
AuthType: NONE
Handler: slackrock.lambda_handler
Runtime: python3.12
Timeout: 300 # 5 Minutes
# Using provisioned concurrency can potentially increase performance but also increases costs.
# Since one of my goals is to run this solution with the lowest cost possible I'm leaving it disabled by default.
# AutoPublishAlias: live
# ProvisionedConcurrencyConfig:
# ProvisionedConcurrentExecutions: 5
# Use CloudWatch metric ConcurrentExecutions to determine if you need to increase this.
ReservedConcurrentExecutions: 10
Environment:
Variables:
SLACK_BOT_TOKEN: !Sub "{{resolve:secretsmanager:${SlackSecretsName}:SecretString:SLACK_BOT_TOKEN}}"
SLACK_SIGNING_SECRET: !Sub "{{resolve:secretsmanager:${SlackSecretsName}:SecretString:SLACK_SIGNING_SECRET}}"
BEDROCK_MODEL_ID: anthropic.claude-3-5-sonnet-20240620-v1:0
DYNAMODB_TABLE_NAME: !Ref SlackrockTable
Policies:
- Version: "2012-10-17"
Statement:
- Sid: AllowLambdaSelfInvoke
Effect: Allow
Action:
- lambda:InvokeFunction
Resource: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:Slackrock*"
- Sid: AllowBedrockInvoke
Effect: Allow
Action:
- bedrock:InvokeModel
Resource: "*"
- Sid: AllowDynamoDBAccess
Effect: Allow
Action:
- dynamodb:PutItem
- dynamodb:GetItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
- dynamodb:Query
- dynamodb:Scan
Resource: !GetAtt SlackrockTable.Arn
SlackrockTable:
Type: AWS::Serverless::SimpleTable
Properties:
TableName: Slackrock
PrimaryKey:
Name: user_id
Type: String
Outputs:
SlackrockUrl:
Description: "Lambda Function URL for Slackrock endpoint"
Value: !GetAtt SlackrockUrl.FunctionUrl