diff --git a/CLAUDE.md b/CLAUDE.md index f8b434d..b3faecc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -372,10 +372,23 @@ kubectl apply -f deployment/kubernetes/service.yaml - 资源限制:256Mi-512Mi 内存,250m-500m CPU - 健康检查:存活探针 (/healthz),就绪探针 (/readyz) -### 阿里云函数计算 +### 阿里云函数计算(FC 3.0) ```bash -fun deploy -t deployment/serverless/aliyun-fc.yaml +# 安装 Serverless Devs(如未安装) +npm install -g @serverless-devs/s + +# 配置阿里云凭证(首次使用) +s config add + +# 部署到阿里云函数计算 +cd deployment/serverless && s deploy + +# 验证配置语法 +cd deployment/serverless && s plan + +# 查看函数日志 +cd deployment/serverless && s logs --tail ``` ### AWS Lambda diff --git a/deployment/serverless/aliyun-fc.yaml b/deployment/serverless/aliyun-fc.yaml deleted file mode 100644 index c87c1dc..0000000 --- a/deployment/serverless/aliyun-fc.yaml +++ /dev/null @@ -1,72 +0,0 @@ -# 阿里云函数计算配置 -ROSTemplateFormatVersion: '2015-09-01' -Transform: 'Aliyun::Serverless-2018-04-03' -Resources: - functional-scaffold: - Type: 'Aliyun::Serverless::Service' - Properties: - Description: '算法工程化 Serverless 脚手架' - LogConfig: - Project: functional-scaffold-logs - Logstore: function-logs - VpcConfig: - VpcId: 'vpc-xxxxx' - VSwitchIds: - - 'vsw-xxxxx' - SecurityGroupId: 'sg-xxxxx' - prime-checker: - Type: 'Aliyun::Serverless::Function' - Properties: - Description: '质数判断算法服务(API)' - Runtime: custom-container - MemorySize: 512 - Timeout: 60 - InstanceConcurrency: 10 - CAPort: 8000 - CustomContainerConfig: - Image: 'registry.cn-hangzhou.aliyuncs.com/your-namespace/functional-scaffold:latest' - Command: '["/app/entrypoint.sh"]' - EnvironmentVariables: - APP_ENV: production - LOG_LEVEL: INFO - METRICS_ENABLED: 'true' - RUN_MODE: api - REDIS_HOST: 'r-xxxxx.redis.rds.aliyuncs.com' - REDIS_PORT: '6379' - Events: - httpTrigger: - Type: HTTP - Properties: - AuthType: ANONYMOUS - Methods: - - GET - - POST - job-worker: - Type: 'Aliyun::Serverless::Function' - Properties: - Description: '异步任务 Worker' - Runtime: custom-container - MemorySize: 512 - Timeout: 900 - InstanceConcurrency: 1 - CustomContainerConfig: - Image: 'registry.cn-hangzhou.aliyuncs.com/your-namespace/functional-scaffold:latest' - Command: '["/app/entrypoint.sh"]' - EnvironmentVariables: - APP_ENV: production - LOG_LEVEL: INFO - METRICS_ENABLED: 'true' - RUN_MODE: worker - REDIS_HOST: 'r-xxxxx.redis.rds.aliyuncs.com' - REDIS_PORT: '6379' - WORKER_POLL_INTERVAL: '1.0' - MAX_CONCURRENT_JOBS: '5' - JOB_MAX_RETRIES: '3' - JOB_EXECUTION_TIMEOUT: '300' - Events: - timerTrigger: - Type: Timer - Properties: - CronExpression: '0 */1 * * * *' - Enable: true - Payload: '{}' diff --git a/deployment/serverless/s.yaml b/deployment/serverless/s.yaml new file mode 100644 index 0000000..ea8f038 --- /dev/null +++ b/deployment/serverless/s.yaml @@ -0,0 +1,98 @@ +# 阿里云函数计算 FC 3.0 配置 +# 使用 Serverless Devs 部署: cd deployment/serverless && s deploy +edition: 3.0.0 +name: functional-scaffold +access: default + +vars: + region: cn-hangzhou + image: registry.cn-hangzhou.aliyuncs.com/your-namespace/functional-scaffold:latest + redis_host: r-xxxxx.redis.rds.aliyuncs.com + redis_port: "6379" + +resources: + # API 服务函数 + prime-checker-api: + component: fc3 + props: + region: ${vars.region} + functionName: prime-checker-api + description: 质数判断算法服务(API) + runtime: custom-container + cpu: 0.35 + memorySize: 512 + diskSize: 512 + timeout: 60 + instanceConcurrency: 10 + handler: not-used + customContainerConfig: + image: ${vars.image} + port: 8000 + command: + - /app/entrypoint.sh + healthCheckConfig: + httpGetUrl: /healthz + initialDelaySeconds: 3 + periodSeconds: 5 + timeoutSeconds: 3 + failureThreshold: 3 + successThreshold: 1 + environmentVariables: + APP_ENV: production + LOG_LEVEL: INFO + METRICS_ENABLED: "true" + RUN_MODE: api + REDIS_HOST: ${vars.redis_host} + REDIS_PORT: ${vars.redis_port} + vpcConfig: auto + logConfig: auto + triggers: + - triggerName: http-trigger + triggerType: http + triggerConfig: + authType: anonymous + methods: + - GET + - POST + - PUT + - DELETE + + # 异步任务 Worker 函数 + job-worker: + component: fc3 + props: + region: ${vars.region} + functionName: job-worker + description: 异步任务 Worker + runtime: custom-container + cpu: 0.35 + memorySize: 512 + diskSize: 512 + timeout: 900 + instanceConcurrency: 1 + handler: not-used + customContainerConfig: + image: ${vars.image} + port: 8000 + command: + - /app/entrypoint.sh + environmentVariables: + APP_ENV: production + LOG_LEVEL: INFO + METRICS_ENABLED: "true" + RUN_MODE: worker + REDIS_HOST: ${vars.redis_host} + REDIS_PORT: ${vars.redis_port} + WORKER_POLL_INTERVAL: "1.0" + MAX_CONCURRENT_JOBS: "5" + JOB_MAX_RETRIES: "3" + JOB_EXECUTION_TIMEOUT: "300" + vpcConfig: auto + logConfig: auto + triggers: + - triggerName: timer-trigger + triggerType: timer + triggerConfig: + cronExpression: "0 */1 * * * *" + enable: true + payload: "{}"