1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package serverless
- import (
- "fmt"
- "os"
- "time"
- "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_manager/aws_manager"
- "github.com/langgenius/dify-plugin-daemon/internal/utils/cache"
- )
- var (
- AWS_LAUNCH_LOCK_PREFIX = "aws_launch_lock_"
- )
- // UploadPlugin uploads the plugin to the AWS Lambda
- func UploadPlugin(r *aws_manager.AWSPluginRuntime) error {
- r.Log("Starting to initialize environment")
- // check if the plugin has already been initialized, at most 300s
- if err := cache.Lock(AWS_LAUNCH_LOCK_PREFIX+r.Checksum(), 300*time.Second, 300*time.Second); err != nil {
- return err
- }
- defer cache.Unlock(AWS_LAUNCH_LOCK_PREFIX + r.Checksum())
- r.Log("Started to initialize environment")
- identity, err := r.Identity()
- if err != nil {
- return err
- }
- function, err := FetchLambda(identity.String(), r.Checksum())
- if err != nil {
- if err != ErrNoLambdaFunction {
- return err
- }
- } else {
- // found, return directly
- r.LambdaURL = function.FunctionURL
- r.LambdaName = function.FunctionName
- r.Log(fmt.Sprintf("Found existing lambda function: %s", r.LambdaName))
- return nil
- }
- // create it if not found
- r.Log("Creating new lambda function")
- // create lambda function
- packager := NewPackager(r, r.Decoder)
- context, err := packager.Pack()
- if err != nil {
- return err
- }
- defer os.Remove(context.Name())
- defer context.Close()
- response, err := LaunchLambda(identity.String(), r.Checksum(), context)
- if err != nil {
- return err
- }
- for response.Next() {
- response, err := response.Read()
- if err != nil {
- return err
- }
- switch response.Event {
- case Error:
- return fmt.Errorf("error: %s", response.Message)
- case LambdaUrl:
- r.LambdaURL = response.Message
- case Lambda:
- r.LambdaName = response.Message
- case Info:
- r.Log(fmt.Sprintf("installing: %s", response.Message))
- }
- }
- return nil
- }
|