Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Computação
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
Gerenciamento e governança
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
Migração
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álises
MapReduce Service
Data Lake Insight
CloudTable Service
Cloud Search Service
Data Lake Visualization
Data Ingestion Service
GaussDB(DWS)
DataArts Studio
IoT
IoT Device Access
Outros
Product Pricing Details
System Permissions
Console Quick Start
Common FAQs
Instructions for Associating with a HUAWEI CLOUD Partner
Message Center
Segurança e conformidade
Security Technologies and Applications
Web Application Firewall
Host Security Service
Cloud Firewall
SecMaster
Anti-DDoS Service
Data Encryption Workshop
Database Security Service
Cloud Bastion Host
Data Security Center
Cloud Certificate Manager
Situation Awareness
Managed Threat Detection
Blockchain
Blockchain Service
Serviços de mídia
Media Processing Center
Video On Demand
Live
SparkRTC
Armazenamento
Object Storage Service
Elastic Volume Service
Cloud Backup and Recovery
Cloud Server Backup Service
Storage Disaster Recovery Service
Scalable File Service
Volume Backup Service
Data Express Service
Dedicated Distributed Storage Service
Containers
Cloud Container Engine
SoftWare Repository for Container
Application Service Mesh
Ubiquitous Cloud Native Service
Cloud Container Instance
Bancos de dados
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
Aplicações de negócios
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
Distribuição de conteúdo e computação de borda
Content Delivery Network
Intelligent EdgeFabric
CloudPond
Soluções
SAP Cloud
High Performance Computing
Serviços para desenvolvedore
ServiceStage
CodeArts
CodeArts PerfTest
CodeArts Req
CodeArts Pipeline
CodeArts Build
CodeArts Deploy
CodeArts Artifact
CodeArts TestPlan
CodeArts Check
Cloud Application Engine
MacroVerse aPaaS
KooPhone
KooDrive
Central de ajuda/ FunctionGraph/ Guia de usuário/ Gestão de dependências

Gestão de dependências

Atualizado em 2022-11-16 GMT+08:00

O FunctionGraph permite gerenciar dependências de maneira unificada. Você pode carregar dependências de um caminho local ou por meio do OBS, se elas forem muito grandes, e especificar nomes para elas.

Para obter detalhes, consulte Como posso criar dependências de função?

  • O nome de cada arquivo no pacote de dependência não pode terminar com um til (~).
  • Um pacote de dependência pode conter até 30.000 arquivos.
  • Se sua dependência privada for grande, é aconselhável definir o tempo de execução da função para um valor grande.

Criação de uma dependência

  1. Entre ao console do FunctionGraph, e escolha Functions > Dependencies no painel de navegação.
  2. Clique em Create Dependency.
  3. Defina os seguintes parâmetros:

    • Name: Digite um nome de dependência.
    • Runtime: Selecione um tempo de execução.
    • Description: Insira uma descrição para a dependência. Este parâmetro é opcional.
    • Upload Mode: Carregue um arquivo ZIP ou carregue um arquivo do OBS.

  4. Clique em OK.

Configuração de dependências para uma Função

  1. Faça login no console do FunctionGraph e escolha Functions > Function List no painel de navegação.
  2. Clique no nome da função desejada.
  3. Na página de detalhes da função exibida, clique na guia Code, clique em Add na área Dependencies.
  4. Na caixa de diálogo Select Dependency exibida, selecione dependências e clique em OK.

    • Você pode adicionar um máximo de 20 dependências para uma função.
    • Exceto suas dependências privadas, o FunctionGraph fornece algumas dependências públicas, que você pode escolher ao criar uma função.

Exclusão de uma dependência

  1. Entre ao console do FunctionGraph, e escolha Functions > Dependencies no painel de navegação.
  2. Click Delete in the Operation column of the target dependency.
  3. Clique em Sim.

    Dependências referenciadas por funções não podem ser excluídas.

Bibliotecas dependentes

Supported Dependent Libraries

O FunctionGraph oferece suporte a bibliotecas padrão e de terceiros.

  • Bibliotecas padrão

    Ao usar bibliotecas padrão, você pode importá-las para seu código ou pacote embutido e enviá-las para FunctionGraph.

  • Bibliotecas não-padrão suportadas

    O FunctionGraph fornece componentes de terceiros integrados listados em Tabela 1 e Tabela 2. Você pode importar essas bibliotecas para o código embutido da mesma maneira que importa bibliotecas padrão.

    Tabela 1 Componentes de terceiros integrados com o runtime do Node.js

    Nome

    Uso

    Versão

    q

    Encapsulamento assíncrono do método

    1.5.1

    co

    Controle assíncrono do processo

    4.6.0

    lodash

    Biblioteca de ferramentas e métodos comuns

    4.17.10

    esdk-obs-nodejs

    SDK do OBS

    2.1.5

    express

    Framework simplificado de desenvolvimento de aplicativos baseado na web

    4.16.4

    fgs-express

    Fornece uma estrutura de aplicativos Node.js para FunctionGraph e API Gateway para executar aplicativos sem servidor e as API de REST. Este componente fornece um exemplo do uso da estrutura Express para criar aplicativos ou serviços da web sem servidor e as API de RESTful.

    1.0.1

    request

    Simplifica a invocação HTTP e suporta HTTPS e redirecionamento.

    2.88.0

    Tabela 2 Bibliotecas não-padrão suportadas pelo tempo de execução do Python

    Módulo

    Uso

    Versão

    dateutil

    Processamento de data e hora

    2.6.0

    requests

    Biblioteca HTTP

    2.7.0

    httplib2

    Cliente HTTP

    0.10.3

    numpy

    Computação matemática

    1.13.1

    redis

    Cliente Redis

    2.10.5

    obsclient

    Cliente de OBS

    -

    smnsdk

    Acesso a SMN

    1.0.1

  • Outras bibliotecas de terceiros (O FunctionGraph não tem bibliotecas internas de terceiros não padrão, exceto as listadas na tabela anterior.)

    Para usar funções de bibliotecas de terceiros, empacote essas bibliotecas e carregue-as em um intervalo OBS especificado e cole o URL do link OBS dessas bibliotecas ao criar uma função.

Importing Dependent Libraries

O código para processamento de imagens é o seguinte:

# -*- 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 = 'your region'
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 bibliotecas padrão e bibliotecas não-padrão suportadas, você pode usá-las diretamente em sua função.

Para bibliotecas de terceiros não padrão que não são fornecidas pelo FunctionGraph você pode usá-las executando as seguintes etapas:

  1. Empacote as bibliotecas dependentes em um arquivo ZIP, faça o upload do arquivo ZIP em um bucket do OBS e obtenha o URL do link do OBS.
  2. Entre ao console do FunctionGraph, e escolha Functions > Dependencies no painel de navegação.
  3. Clique em Create Dependency.
  4. Defina o nome da dependência e o tempo de execução, especifique a URL do link do OBS e clique em OK.
    Para obter detalhes sobre como obter a URL do link OBS, consulte Acesso de um objeto por usar seu URL. (A figura a seguir é apenas para referência. Use o URL real do pacote de arquivos carregado.)
    Figura 1 Obtenção do URL do link do OBS
    Figura 2 Configuração da dependência
  5. Na página Detalhes da função, clique na guia Code, clique em Add na área Dependencies, selecione a dependência criada em 4 (consulte Figura 3), e clique em OK.
    Figura 3 Seleção de uma dependência

  6. Clique em Save.

    Cada pacote de dependência não pode conter um arquivo com o mesmo nome de um arquivo de código. Caso contrário, os dois arquivos podem ser mesclados ou substituídos incorretamente. Por exemplo, se o pacote de dependência depends.zip contém um arquivo chamado index.py, o manipulador de uma função não pode ser definido como index.handler. Caso contrário, um arquivo de código também chamado index.py será gerado.

Usamos cookies para aprimorar nosso site e sua experiência. Ao continuar a navegar em nosso site, você aceita nossa política de cookies. Saiba mais

Feedback

Feedback

Feedback

0/500

Conteúdo selecionado

Envie o conteúdo selecionado com o feedback