Um gatilho de CDN invoca sua função sempre que o Alibaba Cloud CDN gera um arquivo de log offline para um nome de domínio acelerado especificado. Use gatilhos de CDN para automatizar o processamento de logs, o gerenciamento de cache e os fluxos de trabalho do ciclo de vida de domínios, sem necessidade de polling ou intervenção manual.
Casos de uso
|
Cenário |
Ação recomendada |
|
Processamento de logs |
Arquive ou analise arquivos de log offline do CDN assim que forem gerados. |
|
Gerenciamento de cache |
Execute lógicas personalizadas quando objetos em cache forem atualizados ou pré-enviados para nós de borda. |
|
Ciclo de vida de domínios |
Acione fluxos de trabalho ao adicionar, remover, iniciar ou parar um domínio acelerado por CDN. |
Cenário de exemplo
Este guia usa o Object Storage Service (OSS) como servidor de origem. Crie um bucket no console do OSS, obtenha o nome de domínio correspondente para usar como origem e adicione um nome de domínio acelerado para essa origem. Para obter instruções sobre como alterar o tipo de servidor de origem, consulte Configurar um servidor de origem.
O Alibaba Cloud CDN oferece suporte a vários tipos de servidor de origem: nomes de domínio do OSS, endereços IP, nomes de domínio de origem e nomes de domínio do Function Compute. Em cenários com múltiplas origens, defina prioridades primária/secundária e valores de peso para balancear a carga entre os servidores de origem.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma função do Function Compute (Criar uma função)
Um bucket do OSS (Criar um bucket)
Um nome de domínio acelerado por CDN (Adicionar um nome de domínio acelerado)
Etapa 1: Crie um gatilho de CDN
Faça login no console do Function Compute. No painel de navegação à esquerda, clique em Functions.
Na barra de navegação superior, selecione uma região. Na página Functions, clique na função que deseja gerenciar.
Na página de detalhes da função, clique na aba Triggers e, em seguida, clique em Create Trigger.
-
No painel Create Trigger, configure os parâmetros a seguir e clique em OK.
Se esta for a primeira vez que você cria um gatilho de CDN, clique em OK no painel e, depois, clique em Authorize Now na caixa de diálogo exibida. Essa ação concede permissão ao CDN para invocar sua função.
Parâmetro
Valor a inserir
Exemplo
Trigger type
Selecione CDN.
CDN
Name
Insira um nome para o gatilho.
cdn-triggerVersion or alias
O padrão é LATEST. Para vincular o gatilho a uma versão ou alias específico, selecione-o primeiro na lista suspensa Version Or Alias na página de detalhes da função. Consulte Gerencie versões e Gerencie aliases.
LATEST
Triggering event
Selecione o tipo de evento de CDN que deve invocar a função. Consulte Definições de eventos de CDN para obter uma descrição de cada tipo.
CdnDomainStartedTriggering event version
Mantenha como
1.0.0. Esta é a única versão suportada.1.0.0Domain name
Insira o nome de domínio acelerado por CDN.
bucket*******.oss-cn-chengdu-internal.aliyuncs.comDescription
(Opcional) Insira uma descrição para o gatilho.
cdntriggerRole name
Selecione AliyunCDNEventNotificationRole.
AliyunCDNEventNotificationRole
Após a criação, o gatilho aparece na aba Triggers. Para modificá-lo ou excluí-lo, consulte Gerencie gatilhos.
Etapa 2: Configure parâmetros de teste
Configure um evento de teste para verificar se sua função processa corretamente os eventos de CDN.
Na aba Code da página de detalhes da função, clique no ícone
ao lado de Test Function e selecione Configure Test Parameters na lista suspensa.No painel Configure Test Parameters, selecione Create New Test Event ou Edit Existing Test Event, insira um nome e o conteúdo do evento e clique em OK.
Todos os eventos de gatilho de CDN compartilham a mesma estrutura de nível superior. Apenas o campo eventParameter varia conforme o tipo de evento.
Campos de evento compartilhados
Os campos a seguir estão presentes em todos os tipos de evento de CDN.
|
Campo |
Tipo |
Descrição |
|
|
String |
O tipo de evento de CDN, como |
|
|
String |
Sempre |
|
|
String |
A região onde o CDN está localizado, como |
|
|
String |
A versão do esquema do evento. Sempre |
|
|
String |
O horário em que o evento ocorreu, no formato ISO 8601. |
|
|
String |
Um ID de rastreamento do CDN, usado para solução de problemas. |
|
|
String |
O ID da conta Alibaba Cloud. |
|
|
String |
O nome de domínio acelerado por CDN que gerou o evento. |
|
|
Map |
Campos específicos do evento. Consulte as tabelas abaixo. |
Campos de eventParameter por tipo de evento
LogFileCreated — acionado quando o CDN gera um arquivo de log offline
Substitua filePath pelo caminho do seu arquivo de log do CDN ou de qualquer arquivo de teste.
{
"events": [
{
"eventName": "LogFileCreated",
"eventSource": "cdn",
"region": "cn-hangzhou",
"eventVersion": "1.0.0",
"eventTime": "2018-06-14T15:31:49+08:00",
"traceId": "c6459282-6a4d-4413-894c-e4ea3968****",
"userIdentity": {
"aliUid": "164901546557****"
},
"resource": {
"domain": "example.com"
},
"eventParameter": {
"domain": "example.com",
"startTime": 1528959600,
"endTime": 1528959900,
"fileSize": 1788115,
"filePath": "http://cdnlog.cn-hangzhou.oss.aliyun-inc.com/www.aliyun.com/2017_12_27/www.aliyun.com_2017_12_27_0800_0900.gz?OSSAccessKeyId=xxxx&Expires=xxxx&Signature=xxxx"
}
}
]
}
|
Campo |
Tipo |
Descrição |
|
|
String |
O nome de domínio. |
|
|
String |
O horário inicial do arquivo de log (timestamp Unix). |
|
|
String |
O horário final do arquivo de log (timestamp Unix). |
|
|
String |
O tamanho do arquivo de log, em bytes. |
|
|
String |
A URL de download do arquivo de log. Este é o principal campo processado pela sua função. |
CachedObjectsRefreshed / CachedObjectsPushed — acionado na atualização de cache ou pré-envio
{
"events": [
{
"eventName": "CachedObjectsRefreshed",
"eventVersion": "1.0.0",
"eventSource": "cdn",
"region": "cn-hangzhou",
"eventTime": "2018-03-16T14:19:55+08:00",
"traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e2****",
"resource": {
"domain": "example.com"
},
"eventParameter": {
"domain": "example.com",
"taskId": 2089687230,
"objectType": "File",
"objectPath": [
"/2018/03/16/13/33b430c57e7.mp4",
"/2018/03/16/14/4ff6b9bd54d.mp4"
],
"createTime": 1521180769,
"completeTime": 1521180777
},
"userIdentity": {
"aliUid": "164901546557****"
}
}
]
}
|
Campo |
Tipo |
Descrição |
|
|
String |
O nome de domínio. |
|
|
String |
O ID da tarefa de limpeza de recursos. |
|
|
String |
O tipo de limpeza: |
|
|
String |
O identificador do recurso. |
|
|
String |
Horário de início da atualização (timestamp Unix). |
|
|
String |
O horário em que a tarefa foi concluída (timestamp Unix). |
CdnDomainStarted / CdnDomainStopped — acionado quando um domínio é ativado ou desativado
{
"events": [
{
"eventName": "CdnDomainStarted",
"eventVersion": "1.0.0",
"eventSource": "cdn",
"region": "cn-hangzhou",
"eventTime": "2018-03-16T14:19:55+08:00",
"traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e2****",
"resource": {
"domain": "example.com"
},
"eventParameter": {
"domain": "example.com",
"status": "online"
},
"userIdentity": {
"aliUid": "164901546557****"
}
}
]
}
|
Campo |
Tipo |
Descrição |
|
|
String |
O nome de domínio. |
|
|
String |
O status do domínio: |
CdnDomainAdded / CdnDomainDeleted — acionado quando um domínio é adicionado ou removido
{
"events": [
{
"eventName": "CdnDomainAdded",
"eventVersion": "1.0.0",
"eventSource": "cdn",
"region": "cn-hangzhou",
"eventTime": "2018-03-16T14:19:55+08:00",
"traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e2****",
"resource": {
"domain": "example.com"
},
"eventParameter": {
"domain": "example.com"
},
"userIdentity": {
"aliUid": "164901546557****"
}
}
]
}
|
Campo |
Tipo |
Descrição |
|
|
String |
O nome de domínio que foi adicionado ou excluído. |
Etapa 3: Escrever e testar o código da função
Após criar o gatilho, escreva o código da função e verifique se ele processa corretamente cada tipo de evento. Em produção, o gatilho invoca a função automaticamente quando ocorre um evento de CDN.
-
Na aba Code, escreva o código no editor e clique em Deploy Code. O exemplo a seguir em Python mostra como lidar com cada tipo de evento de CDN:
# -*- coding: utf-8 -*- import logging import json logger = logging.getLogger("cdn-sample") def handler(event, context): evt = json.loads(event) eventObj = evt["events"][0] eventName = eventObj['eventName'] info = "" eventParam = eventObj['eventParameter'] domain = eventParam['domain'] if eventName == "CachedObjectsRefreshed" or eventName == "CachedObjectsPushed": objPathList = eventParam['objectPath'] info = ",".join(objPathList) elif eventName == "LogFileCreated": info = eventParam['filePath'] elif eventName == "CdnDomainStarted" or eventName == "CdnDomainStopped": # Your business logic here pass elif eventName == "CdnDomainAdded" or eventName == "CdnDomainDeleted": # Your business logic here pass return f"eventName:{eventName}, domain: {domain}, info: {info}" Clique em Test Function. Após a conclusão da execução, o resultado aparece acima da aba Code.
Próximos passos
Além do console do Function Compute, configure gatilhos usando:
Serverless Devs: Consulte Comandos comuns do Serverless Devs.
SDKs: Consulte SDKs.
Para modifique ou exclua um gatilho existente, consulte Gerencie gatilhos.