构建 AI 动画故事创作应用 —— 自动部署

自动部署阿里云"构建 AI 动画故事创作应用"解决方案。应用可访问后部署即停止——动手体验留给用户。

架构: OSS Bucket + DashScope(百炼 API Key)+ FC 应用(ComfyUI + WebUI —— 通过 Devs 模板部署两个函数)

安装

前置条件(scripts/ 运行时依赖):
| 依赖 | 最低版本 | 检查命令 | 用途 |
|-----------|-------------|---------------|---------|
| bash | 4.0+ | bash --version | 脚本运行时 |
| aliyun CLI | >= 3.3.7 | aliyun version | 阿里云资源操作(ai-mode 子命令需要 3.3.7+) |
| python3 | 3.6+ | python3 --version | JSON 解析 |
| curl | 任意 | curl --version | HTTP API 调用 |
若 Aliyun CLI 未安装或版本过低,见 references/cli-installation-guide.md 获取安装说明。
然后 [必须] 运行 aliyun configure set --auto-plugin-install true 启用插件自动安装。

CLI 初始化(核心工作流前必须运行)

启用 AI-Mode,设置专用 User-Agent,并更新插件,使后续所有 CLI 调用被正确标记并运行在最新插件版本上:

aliyun configure ai-mode enable
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-tech-solution-animation-creation-auto-deploy"
aliyun plugin update

鉴权

前置检查:需要阿里云凭证
安全规则:
- 绝不读取、回显或打印 AK/SK 值
- 绝不要求用户在对话或命令行中直接输入 AK/SK
- 绝不使用字面凭证值运行 aliyun configure set
- 使用 aliyun configure list 检查凭证状态
```bash
aliyun configure list
```
检查输出中是否有有效 profile(AK、STS 或 OAuth 身份)。
如果不存在有效 profile,就此停止。
1. 从阿里云控制台获取凭证
2. 在本会话之外配置凭证
3. 待 aliyun configure list 显示有效 profile 后再返回并重试

RAM 策略

完整权限列表见 references/ram-policies.md

所需系统策略: AliyunFCFullAccessAliyunOSSFullAccess

额外权限: Devs 相关权限(devs:CreateProjectdevs:RenderServicesByTemplatedevs:UpdateEnvironmentdevs:DeployEnvironmentdevs:ListEnvironmentsdevs:GetEnvironment

核心工作流之前,自动检查并附加所需策略:

bash scripts/attach-policies.sh
[必须] 权限失败处理: 当任何命令或 API 调用在执行过程中因权限错误失败时,遵循以下流程:
1. 阅读 references/ram-policies.md 获取本 Skill 所需的完整权限列表
2. 使用 ram-permission-diagnose skill 引导用户申请必要权限
3. 暂停并等待用户确认所需权限已授予

参数确认

重要:参数确认 —— 执行任何命令或 API 调用前,
所有参数要么是固定值,要么是自动生成 / 创建的——无需用户手动输入。
参数必填说明
RegionId部署地域(FC 和 OSS 在同一地域)固定 cn-hangzhou
BUCKET_NAMEOSS Bucket 名称自动生成 animation-story-<6 个随机小写字母>
API_KEY百炼(DashScope)API Key通过 aliyun modelstudio create-api-key 自动创建
PROJECT_NAMEDevs 项目名称自动生成 animation-creation-<6 个随机小写字母>

开始核心工作流之前,在 shell 中设置以下变量(后续所有命令直接引用它们):

生成随机名称

BUCKET_NAME="animation-story-$(cat /dev/urandom | LC_ALL=C tr -dc 'a-z' | head -c 6)"

PROJECT_NAME="animation-creation-$(cat /dev/urandom | LC_ALL=C tr -dc 'a-z' | head -c 6)"

echo "BUCKET_NAME=$BUCKET_NAME, PROJECT_NAME=$PROJECT_NAME"


---

核心工作流

步骤 1:创建百炼 API Key(CLI)

通过 aliyun modelstudio CLI 自动获取工作空间并创建 API Key:

source scripts/create-api-key.sh
注意: 使用 source 确保 API_KEY 变量导出到当前 shell。脚本自动获取默认工作空间(若无则创建一个),创建 API Key,并打印完整值。

步骤 2:开通 OSS 服务并创建 Bucket(CLI)

注意: OSS CLI 插件使用 --ua 标志(不是 --user-agent)设置 User-Agent。

先开通 OSS 服务(若已开通返回 ORDER.OPEND——可忽略):

aliyun ossadmin open-oss-service --endpoint oss-admin.aliyuncs.com --force --user-agent AlibabaCloud-Agent-Skills/alibabacloud-tech-solution-animation-creation-auto-deploy 2>&1 || true

创建 Bucket:

aliyun oss mb "oss://$BUCKET_NAME" --region cn-hangzhou --ua AlibabaCloud-Agent-Skills/alibabacloud-tech-solution-animation-creation-auto-deploy

验证:

aliyun oss stat "oss://$BUCKET_NAME" --ua AlibabaCloud-Agent-Skills/alibabacloud-tech-solution-animation-creation-auto-deploy

步骤 3:创建 Devs 项目(CLI)

CreateProject API 创建项目。通过 templateConfig 指定模板名和参数——Devs 会自动创建一个 production 环境。

注意: CreateProject 只创建项目和空环境——它自动触发部署。你必须随后用 RenderServicesByTemplate + UpdateEnvironment + DeployEnvironment 完成部署。
aliyun devs create-project --body "{
  \"name\": \"$PROJECT_NAME\",
  \"spec\": {
    \"templateConfig\": {
      \"templateName\": \"animation-creation\",
      \"parameters\": {
        \"region\": \"cn-hangzhou\",
        \"bailian_api_key\": \"$API_KEY\",
        \"ossBucket\": \"$BUCKET_NAME\"
      }
    }
  }
}" --user-agent AlibabaCloud-Agent-Skills/alibabacloud-tech-solution-animation-creation-auto-deploy
模板参数说明(已确认——不要修改):
- region:固定 cn-hangzhou
- bailian_api_key:步骤 1 自动创建的百炼 API Key
- ossBucket:步骤 2 创建的 OSS Bucket 名称(不含 oss:// 前缀)
- 所有参数通过 parameters 传入,不是 variableValues

步骤 4:渲染模板并配置环境(CLI)

本步骤所有命令都使用 shell 变量 MY_UIDPROJECT_NAMEBUCKET_NAMEAPI_KEY——确保步骤 1 和参数确认已执行。

先获取当前用户 UID 并检查角色信任策略:

source scripts/setup-role.sh
注意: 使用 source 确保 MY_UID 变量导出到当前 shell。脚本自动检查角色是否存在,若不存在则创建。该角色是标准 Devs 角色,通常在首次使用 FC 控制台的应用功能时自动创建。

#### 4a. 渲染模板 → 构建 JSON → 更新环境(一体化脚本)

以下脚本自动:渲染模板 → 过滤自定义域名 → 添加 roleArn → 调用 UpdateEnvironment。 Agent 无需手动处理 JSON。
bash scripts/render-and-update.sh
关键说明(已内置于脚本——无需手动处理):
- custom-domain 服务自动过滤(会导致"Unknown service type"错误)
- roleArn 自动添加
- 用 --body 传数据(--spec 无法正确传递深层嵌套 JSON)

#### 4b. 触发部署

内置限流保护: 脚本最多重试 3 次,间隔 60 秒,遇 404 立即停止。直接运行脚本——不要手动调用 deploy-environment
bash scripts/deploy-environment.sh

步骤 5:轮询部署状态

部署是异步的——轮询直到完成(通常 5–15 分钟)。直接运行以下脚本:

bash scripts/poll-deploy-status.sh

步骤 6:创建自定义域名

为什么需要自定义域名? FC 触发 URL(*.fcapp.run)强制 Content-Disposition: attachment 响应头,导致浏览器下载 HTML 而非渲染它。应用要正常工作需要自定义域名(*.devsapp.net)。
必须使用 FC 2.0 API(aliyun fc-open 创建辅助函数:FC 3.0 不支持函数名中的 $fc-open 插件将通过 --auto-plugin-install true 配置自动安装。

直接运行以下完整脚本(只需设置 MY_UIDPROJECT_NAME 变量):

bash scripts/create-custom-domain.sh

步骤 7:获取访问 URL(在此停止)

访问 URL 在步骤 6 脚本末尾自动打印。格式:

http://${PROJECT_NAME}-web.fcv3.${MY_UID}.cn-hangzhou.fc.devsapp.net/

在此停止。将步骤 6 输出中的访问 URL 提供给用户,让他们自行体验应用。不要代替用户操作应用。

⚠️ 安全提醒 —— 展示访问 URL 时必须告知用户:
该 URL 可通过公网直接访问,请勿随意分享给不信任的人。未经授权的访问可能导致:
- 云资源被消耗: 每次访问都会消耗函数计算资源和百炼 API 调用额度,可能产生额外费用。
- 隐私信息泄露: 生成的动画故事、上传的图片等内容可能包含个人或敏感信息。

清理

要清理已部署资源,按以下顺序删除(需要 PROJECT_NAMEMY_UIDBUCKET_NAMEAPI_KEY_ID 变量):

1. 删除 FC 自定义域名

aliyun fc delete-custom-domain --domain-name "${PROJECT_NAME}-web.fcv3.${MY_UID}.cn-hangzhou.fc.devsapp.net" --region cn-hangzhou --user-agent AlibabaCloud-Agent-Skills/alibabacloud-tech-solution-animation-creation-auto-deploy

2. 删除 Devs 项目(同时删除关联的 FC 函数;--force true 跳过环境资源检查)

aliyun devs delete-project --name "$PROJECT_NAME" --force true --user-agent AlibabaCloud-Agent-Skills/alibabacloud-tech-solution-animation-creation-auto-deploy

3. 删除 OSS Bucket(先递归删除所有对象,再删除 Bucket)

aliyun oss rm "oss://$BUCKET_NAME" -r -f --region cn-hangzhou --ua AlibabaCloud-Agent-Skills/alibabacloud-tech-solution-animation-creation-auto-deploy

aliyun oss rm "oss://$BUCKET_NAME" -b -f --region cn-hangzhou --ua AlibabaCloud-Agent-Skills/alibabacloud-tech-solution-animation-creation-auto-deploy

4. 删除百炼 API Key(API_KEY_ID 在 create-api-key.sh 执行期间输出)

aliyun modelstudio delete-api-key --api-key-id "$API_KEY_ID" --user-agent AlibabaCloud-Agent-Skills/alibabacloud-tech-solution-animation-creation-auto-deploy


---

工作流拆除

工作流完成后(或清理后),禁用 AI-Mode:

aliyun configure ai-mode disable

无法通过 CLI/SDK 完成的汇总

完整 CLI 命令参考见 references/related-commands.md

关键限制: FC 首次开通无 CLI/API 支持——用户必须在控制台手动开通。
自动开通: OSS 服务通过 aliyun ossadmin open-oss-service(内置于步骤 2)。百炼工作空间通过 aliyun modelstudio create-workspace(内置于步骤 1)。

最佳实践

  1. 地域固定为 cn-hangzhou(FC 和 OSS 在同一地域)
  2. DashScope API Key 通过 Devs 模板参数传递——不硬编码
  3. OSS Bucket 名称含随机后缀以避免冲突
  4. 部署完成后记录访问 URL 和已创建资源

参考链接

参考说明
references/ram-policies.mdRAM 权限策略
references/related-commands.mdCLI/SDK 命令参考
references/verification-method.md部署验证步骤
references/acceptance-criteria.md验收标准
references/cli-installation-guide.mdCLI 安装指南