Abhängigkeit: Dieser Artikel erfordert ein Verständnis der Grundlagen des AWS-Architekturdesigns
AWS-Lambda
AWS Lambda ist ein Serverless-Computing -Service, der Code als Reaktion auf Ereignisse ausführt und die zugrunde liegenden Computerressourcen automatisch für Sie verwaltet. Diese Ereignisse können Zustandsänderungen oder -aktualisierungen umfassen, z. B. wenn ein Benutzer einen Artikel in einen Einkaufswagen auf einer E-Commerce-Website legt. Sie können AWS Lambda verwenden, um andere AWS-Services mit benutzerdefinierter Logik zu erweitern, oder Ihre eigenen Back-End-Services erstellen, die in AWS-Skalierung, -Leistung und -Sicherheit betrieben werden. AWS Lambda kann als Reaktion auf mehrere Ereignisse automatisch Code ausführen, z. B. HTTP-Anforderungen, die über Amazon API Gateway gesendet werden , Objektänderungen in DynamoDBAmazonTabellenaktualisierungen in(Amazon S3)-Buckets,Amazon Simple Storage Service
Erstellen Sie eine IAM-Rolle
Hosting-Richtlinie für Anhänge
AWSLambdaVPCAccessExecutionRole
AWSLambdaRole
CloudWatchAgentServerPolicy
SecretsManagerReadWrite
AmazonS3FullAccess
AmazonSNSFullAccess
Vertrauensverhältnis
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"secretsmanager.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
Erstellen Sie einen Lambda-Trigger
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Parameters:
Environment:
Type: String
Default: DEV
EnvironmentName:
Type: String
Default: d
CustomerName:
Description: The name of the customer
Type: String
Default: [your-compony-name]
ProjectName:
Description: The name of the project
Type: String
Default: [your-project-name]
#Secret infomations
SecretManagerARN:
Type: String
Default: [your-secretmanager-arn]
S3BktName:
Type: String
Default: [your-s3-name]
BaseLayerS3FileName:
Type: String
Default: [your-lambda-base-layer-named-in-s3]
LambdaSubnetIds:
Description: The subnet ids of the lambda service
Type: List<AWS::EC2::Subnet::Id>
Default: xxxxxxx,xxxxxxx
LambdaSecurityGroups:
Description: security groups for lambda
Type: List<AWS::EC2::SecurityGroup::Id>
Default: xxxxxxxxx
Globals:
Function:
Timeout: 3
Runtime: nodejs14.x
Resources:
LambdaFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub ${
CustomerName}-${
ProjectName}-job-xxx-${
EnvironmentName}-lambda
InlineCode: |
exports.handler = function(event, context) {
console.log('Empty lambda need to be replaced!');
};
Handler: index.handler
Layers:
- Ref: ServerlessBaseLayer
Role: !Sub 'arn:aws-cn:iam::${AWS::AccountId}:role/${CustomerName}-${ProjectName}-lambda-vpc-role-${EnvironmentName}-iamr'
Timeout: 900
VpcConfig:
SecurityGroupIds: !Ref LambdaSecurityGroups
SubnetIds: !Ref LambdaSubnetIds
Environment:
Variables:
LOG_LEVEL: DEBUG
Tags:
ApplName: Your-APP-NAME
Metadata:
SamResourceId: LambdaFunction
ScheduledRule:
Type: AWS::Events::Rule
Properties:
Name: !Sub ${
CustomerName}-${
ProjectName}-job-xxx-${
EnvironmentName}-event
# Run at 16:10 pm (UTC) every day
ScheduleExpression: cron(10 16 * * ? *)
State: 'ENABLED'
Targets:
- Arn:
Fn::GetAtt:
- LambdaFunction
- Arn
Id: 'LambdaFunctionV1'
PermissionForEventsToInvokeLambda:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !Ref LambdaFunction
Action: 'lambda:InvokeFunction'
Principal: 'events.amazonaws.com'
SourceArn:
Fn::GetAtt:
- ScheduledRule
- Arn
#All resource base on layers
ServerlessBaseLayer:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: !Sub ${
CustomerName}-${
ProjectName}-job-layerbase-${
EnvironmentName}-lambda
ContentUri:
Bucket: !Ref S3BktName
Key: !Ref BaseLayerS3FileName
CompatibleRuntimes:
- nodejs14.x
LicenseInfo: MIT
RetentionPolicy: Retain
Metadata:
SamResourceId: ServerlessBaseLayer