AWS Design High Availability Program Architecture – Lambda-Timing-Job

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

Guess you like

Origin blog.csdn.net/black0707/article/details/125483224
Recommended