Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Cómputo
Elastic Cloud Server
Bare Metal Server
Auto Scaling
Image Management Service
Dedicated Host
FunctionGraph
Cloud Phone Host
Huawei Cloud EulerOS
Redes
Virtual Private Cloud
Elastic IP
Elastic Load Balance
NAT Gateway
Direct Connect
Virtual Private Network
VPC Endpoint
Cloud Connect
Enterprise Router
Enterprise Switch
Global Accelerator
Gestión y gobernanza
Cloud Eye
Identity and Access Management
Cloud Trace Service
Resource Formation Service
Tag Management Service
Log Tank Service
Config
Resource Access Manager
Simple Message Notification
Application Performance Management
Application Operations Management
Organizations
Optimization Advisor
Cloud Operations Center
Resource Governance Center
Migración
Server Migration Service
Object Storage Migration Service
Cloud Data Migration
Migration Center
Cloud Ecosystem
KooGallery
Partner Center
User Support
My Account
Billing Center
Cost Center
Resource Center
Enterprise Management
Service Tickets
HUAWEI CLOUD (International) FAQs
ICP Filing
Support Plans
My Credentials
Customer Operation Capabilities
Partner Support Plans
Professional Services
Análisis
MapReduce Service
Data Lake Insight
CloudTable Service
Cloud Search Service
Data Lake Visualization
Data Ingestion Service
GaussDB(DWS)
DataArts Studio
IoT
IoT Device Access
Otros
Product Pricing Details
System Permissions
Console Quick Start
Common FAQs
Instructions for Associating with a HUAWEI CLOUD Partner
Message Center
Seguridad y cumplimiento
Security Technologies and Applications
Web Application Firewall
Host Security Service
Cloud Firewall
SecMaster
Data Encryption Workshop
Database Security Service
Cloud Bastion Host
Data Security Center
Cloud Certificate Manager
Situation Awareness
Managed Threat Detection
Blockchain
Blockchain Service
Servicios multimedia
Media Processing Center
Video On Demand
Live
SparkRTC
Almacenamiento
Object Storage Service
Elastic Volume Service
Cloud Backup and Recovery
Storage Disaster Recovery Service
Scalable File Service
Volume Backup Service
Cloud Server Backup Service
Data Express Service
Dedicated Distributed Storage Service
Contenedores
Cloud Container Engine
SoftWare Repository for Container
Application Service Mesh
Ubiquitous Cloud Native Service
Cloud Container Instance
Bases de datos
Relational Database Service
Document Database Service
Data Admin Service
Data Replication Service
GeminiDB
GaussDB
Distributed Database Middleware
Database and Application Migration UGO
TaurusDB
Middleware
Distributed Cache Service
API Gateway
Distributed Message Service for Kafka
Distributed Message Service for RabbitMQ
Distributed Message Service for RocketMQ
Cloud Service Engine
EventGrid
Dedicated Cloud
Dedicated Computing Cluster
Aplicaciones empresariales
ROMA Connect
Message & SMS
Domain Name Service
Edge Data Center Management
Meeting
AI
Face Recognition Service
Graph Engine Service
Content Moderation
Image Recognition
Data Lake Factory
Optical Character Recognition
ModelArts
ImageSearch
Conversational Bot Service
Speech Interaction Service
Huawei HiLens
Developer Tools
SDK Developer Guide
API Request Signing Guide
Terraform
Koo Command Line Interface
Distribución de contenido y cómputo de borde
Content Delivery Network
Intelligent EdgeFabric
CloudPond
Soluciones
SAP Cloud
High Performance Computing
Servicios para desarrolladores
ServiceStage
CodeArts
CodeArts PerfTest
CodeArts Req
CodeArts Pipeline
CodeArts Build
CodeArts Deploy
CodeArts Artifact
CodeArts TestPlan
CodeArts Check
Cloud Application Engine
aPaaS MacroVerse
KooPhone
KooDrive
Centro de ayuda/ FunctionGraph/ Guía del usuario/ Gestión de dependencias

Gestión de dependencias

Actualización más reciente 2022-11-07 GMT+08:00

FunctionGraph le permite gestionar la dependencias de manera unificada. Puede cargar dependencias desde una ruta local o a través de OBS si son demasiado grandes, y especificar nombres para ellas.

Para obtener más información, consulte ¿Cómo puedo crear dependencias de función?

  • El nombre de cada archivo en el paquete de dependencias no puede terminar con una tilde (~).
  • Un paquete de dependencias puede contener hasta archivos 30,000.
  • Si su dependencia privada es grande, se recomienda establecer el tiempo de ejecución de la función en un valor grande.

Creación de una dependencia

  1. Inicie sesión en la consola FunctionGraph y elija Functions > Dependencies en el panel de navegación.
  2. Haga clic en Create Dependency.
  3. Establezca los siguientes parámetros:

    • Name: Introduzca un nombre de dependencia.
    • Runtime: seleccione un tiempo de ejecución.
    • Description: Introduzca una descripción para la dependencia. Este parámetro es por elección.
    • Upload Mode: Sube un archivo ZIP o sube un archivo desde OBS.

  4. Haga clic en OK.

Configuración de dependencias para una función

  1. Inicie sesión en la consola FunctionGraph y seleccione Functions > Function List en el panel de navegación.
  2. Haga clic en el nombre de la función deseada.
  3. En la página de detalles de función mostrada, haga clic en la ficha Code y haga clic en Add en el área Dependencies.
  4. En el cuadro de diálogo Select Dependency que se muestra, seleccione dependencias y haga clic en OK.

    • Puede agregar un máximo de 20 dependencias para una función.
    • Excepto sus dependencias privadas, el FunctionGraph proporciona algunas dependencias comunes, que puede elegir al crear una función.

  5. Después de configurar las dependencias, haga clic en Save en la esquina superior derecha.

Eliminación de una dependencia

  1. Inicie sesión en la consola FunctionGraph y elija Functions > Dependencies en el panel de navegación.
  2. Haga clic en Delete en la columna Operation de la dependencia de destino.
  3. En el cuadro de diálogo Delete Dependency, haga clic en Yes.

    Las dependencias a las que hacen referencia las funciones no se pueden eliminar.

Bibliotecas dependientes

Bibliotecas dependientes admitidas

FunctionGraph es compatible con bibliotecas estándar y de terceros.

  • Bibliotecas estándar

    Si utiliza bibliotecas estándar, puede importarlas a su código o paquete en línea y subirlas a FunctionGraph.

  • Bibliotecas no estándar admitidas

    FunctionGraph ofrece componentes integrados de terceros enumerados en Tabla 1 y Tabla 2. Puede importar estas bibliotecas al código en línea de la misma manera que importa bibliotecas estándar.

    Tabla 1 Componentes de terceros integrados con el tiempo de ejecución de Node.js

    Nombre

    Uso

    Versión

    q

    Encapsulación de método asincrónico

    1.5.1

    co

    Control de proceso asincrónico

    4.6.0

    lodash

    Biblioteca común de herramientas y métodos

    4.17.10

    esdk-obs-nodejs

    SDK de OBS

    2.1.5

    express

    Marco de desarrollo de aplicaciones basado en web simplificado

    4.16.4

    fgs-express

    Proporciona un marco de aplicación Node.js para FunctionGraph y API Gateway para ejecutar aplicaciones sin servidor y las REST API. Este componente proporciona un ejemplo del uso del framework Express para crear aplicaciones o servicios web sin servidor y API RESTful.

    1.0.1

    request

    Simplifica la invocación de HTTP y admite HTTPS y redirección.

    2.88.0

    Tabla 2 Bibliotecas no estándar soportadas por el tiempo de ejecución de Python

    Módulo

    Uso

    Versión

    dateutil

    Fecha y hora de procesamiento

    2.6.0

    requests

    Biblioteca de HTTP

    2.7.0

    httplib2

    Cliente de HTTP

    0.10.3

    numpy

    Cómputo matemática

    1.13.1

    redis

    Cliente de Redis

    2.10.5

    obsclient

    Cliente de OBS

    -

    smnsdk

    Acceso de SMN

    1.0.1

  • Otras bibliotecas de terceros (FunctionGraph no tiene bibliotecas integradas de terceros no estándar, excepto las enumeradas en la tabla anterior.)

    Para usar funciones de bibliotecas de terceros, empaquete estas bibliotecas y cárguelas en un bucket OBS especificado, y pegue la URL de enlace OBS de estas bibliotecas al crear una función.

Importación de bibliotecas dependientes

El código para procesar imágenes es el siguiente:

# -*- coding: utf-8 -*-
from PIL import Image, ImageEnhance

from com.obs.client.obs_client import ObsClient

import sys
import os

current_file_path = os.path.dirname(os.path.realpath(__file__))
# append current path to search paths, so that we can import some third party libraries.
sys.path.append(current_file_path)
region = 'china'
obs_server = 'obs.xxxxxxcloud.com'
def newObsClient(context):
    ak = context.getAccessKey()
    sk = context.getSecretKey()
    return ObsClient(access_key_id=ak, secret_access_key=sk, server=obs_server,
                     path_style=True, region=region, ssl_verify=False, max_retry_count=5, timeout=20)
def downloadFile(obsClient, bucket, objName, localFile):
    resp = obsClient.getObject(bucket, objName, localFile)
    if resp.status < 300:
        print 'download file', file, 'succeed'
    else:
        print('download failed, errorCode: %s, errorMessage: %s, requestId: %s' % resp.errorCode, resp.errorMessage,
              resp.requestId)
def uploadFileToObs(client, bucket, objName, file):
    resp = client.putFile(bucket, objName, file)
    if resp.status < 300:
        print 'upload file', file, 'succeed'
    else:
        print('upload failed, errorCode: %s, errorMessage: %s, requestId: %s' % resp.errorCode, resp.errorMessage,
              resp.requestId)
def getObjInfoFromObsEvent(event):
    s3 = event['Records'][0]['s3']
    eventName = event['Records'][0]['eventName']
    bucket = s3['bucket']['name']
    objName = s3['object']['key']
    print "*** obsEventName: %s, srcBucketName: %s, objName: %s", eventName, bucket, objName
    return bucket, objName
def set_opacity(im, opacity):
    """Set the transparency."""
    if im.mode != "RGBA":
        im = im.convert('RGBA')
    else:
        im = im.copy()
    alpha = im.split()[3]
    alpha = ImageEnhance.Brightness(alpha).enhance(opacity)
    im.putalpha(alpha)
    return im
def watermark(im, mark, opacity=0.6):
    """Add a watermark."""
    try:
        if opacity < 1:
            mark = set_opacity(mark, opacity)
        if im.mode != 'RGBA':
            im = im.convert('RGBA')
        if im.size[0] < mark.size[0] or im.size[1] < mark.size[1]:
            print "The mark image size is larger size than original image file."
            return False
        x = (im.size[0] - mark.size[0]) / 2
        y = (im.size[1] - mark.size[1]) / 2
        layer = Image.new('RGBA', im.size, )
        layer.paste(mark, (x, y))
        return Image.composite(layer, im, layer)
    except Exception as e:
        print ">>>>>>>>>>> WaterMark EXCEPTION:  " + str(e)
        return False
def watermark_image(localFile, fileName):
    im = Image.open(localFile)
    watermark_image_path = os.path.join(current_file_path, "watermark.png")
    mark = Image.open(watermark_image_path)
    out = watermark(im, mark)
    print "**********finish water mark"
    name = fileName.split('.')
    outFileName = name[0] + '-watermark.' + name[1]
    outFilePath = "/tmp/" + outFileName
    if out:
        out = out.convert('RGB')
        out.save(outFilePath)
    else:
        print "Sorry, Save watermarked file Failed."
    return outFileName, outFilePath
def handler(event, context):
    srcBucket, srcObjName = getObjInfoFromObsEvent(event)
    outputBucket = context.getUserData('obs_output_bucket')
    client = newObsClient(context)
    # download file uploaded by user from obs
    localFile = "/tmp/" + srcObjName
    downloadFile(client, srcBucket, srcObjName, localFile)
    outFileName, outFile = watermark_image(localFile, srcObjName)
    # Upload converted files to a new OBS bucket.
    uploadFileToObs(client, outputBucket, outFileName, outFile)
    return 'OK'

Para las bibliotecas estándar y las bibliotecas no estándar compatibles, puede usarlas directamente en su función.

Para las bibliotecas de terceros no estándar que no son proporcionadas por FunctionGraph puede usarlas siguiendo los siguientes pasos:

  1. Empaquete las bibliotecas dependientes en un archivo ZIP, cargue el archivo ZIP en un bucket OBS y obtenga la URL de enlace OBS.
  2. Inicie sesión en la consola FunctionGraph y elija Functions > Dependencies en el panel de navegación.
  3. Haga clic en Create Dependency.
  4. Establezca el nombre de la dependencia y el tiempo de ejecución, especifique el vínculo OBS y haga clic en OK.
    Para obtener más información sobre cómo obtener la URL de enlace OBS, consulte Acceso a un objeto mediante su URL. (La siguiente figura se incluye solo para referencia. Por favor, utilice la URL real del paquete de archivo subido.)
    Figura 1 Obtención de la URL del enlace OBS
    Figura 2 Establecer la dependencia
  5. En la página de detalles de la función, haga clic en la ficha Code, haga clic en Select junto a Dependencies, seleccione la dependencia creada en 4(ver Figura 3), y haga clic en OK.
    Figura 3 Selección de una dependencia

  6. Haga clic en Save.

    Cada paquete de dependencias no puede contener un archivo con el mismo nombre que un archivo de código. De lo contrario, los dos archivos pueden fusionarse o sobrescribirse incorrectamente. Por ejemplo, si el paquete de dependencias depends.zip contiene un archivo llamado index.py, el controlador de una función no se puede establecer en index.handler. De lo contrario, se generará un archivo de código también llamado index.py.

Utilizamos cookies para mejorar nuestro sitio y tu experiencia. Al continuar navegando en nuestro sitio, tú aceptas nuestra política de cookies. Descubre más

Comentarios

Comentarios

Comentarios

0/500

Seleccionar contenido

Enviar el contenido seleccionado con los comentarios