@anvil-cloud/sdk (英语)
云基础设施是默认安全的——不是偶然的.
Anvil将生云资源包装成有见解,有生产准备的部分. 没有200行Terraform模块. 没有复制安全配置 。 只要说出你需要什么 安维尔处理其余的.
建造在 普鲁米。 。 。 .
安装
npm install @anvil-cloud/sdk
默认安全
每艘Anvil组件船,自第一天起就与生产保持一致——公共访问被封锁,加密强制,成本标记被应用. 目标不是让遵守自动化,而是让它成为你实际上可以建设的平台.
App类
每个 Anvil 程序开始 new App()编辑 run 回调收到一个 Context 改为:
ctx.stage—— 当前部署阶段( dev 隔离默认为您的 OS 用户名)ctx.project- 项目名称来自anvil.yamlctx.export(name, value)出口堆栈产出ctx.providers- 为多区域/多账户指定云供应商ctx.ref(id)- 参考其他地方申报的资源(见下文)
转发参考资料( E)ctx.ref(中文(简体) )
通常你通过它分配给的变量来引用资源
表示必须先申报. ctx.ref('id') 让您引用资源
联合国 逻辑名称 - 甚至一个宣布 待会 在程序中:
import { App } from '@anvil-cloud/sdk';
import * as anvil from '@anvil-cloud/sdk';
export default new App({
run(ctx) {
const fn = new anvil.aws.Lambda('processor', {
runtime: 'nodejs20.x',
handler: 'src/index.handler',
environment: {
// forward reference — `db` is declared below
DSQL_ENDPOINT: ctx.ref<anvil.aws.DSQL>('db').endpoint,
},
});
const db = new anvil.aws.DSQL('db', { /* ... */ });
},
});
ctx.ref('db').endpoint 决定: 不变 输出为 db.endpoint - 他们是
可互换. 通用语言(<anvil.aws.DSQL>)只是自动完成.
这个 逃生舱门 (a) 宣布令尴尬的情况 代码直接引用资源。 有两件事要知道:
- 使参考文献向一个方向流动. 因为你可以指向任何一种方式,你 能够意外创建循环( A 引用 B 的输出) 财务报告和审定财务报表 B参考 A's. 这种僵局是部署的僵局,而不是错误地——所以不要这样做.
- 一种打字或从未申报的ID失败,在任何部署之前都有明显的错误.
赠款
补助金是Anvil电线在资源之间允许的。 而不是用手写IAM政策,你叫 .grant() anvil自动处理IAM角色政策和环境变量注入.
一个Lambda读取从一桶:
import { App } from '@anvil-cloud/sdk';
import * as anvil from '@anvil-cloud/sdk';
export default new App({
run(ctx) {
const bucket = new anvil.aws.Bucket('uploads', {
dataClassification: 'sensitive',
});
const fn = new anvil.aws.Lambda('processor', {
runtime: 'nodejs20.x',
handler: 'src/index.handler',
});
// Grants the Lambda read access to the bucket and scopes down to specific bucket paths
// Anvil creates the IAM policy and injects UPLOADS_BUCKET_NAME
// into the Lambda's environment automatically.
//
bucket.grant(fn, { actions: ['read'], path: ['user/*'] });
},
});
安维尔在引擎盖下做什么:
- 创建 IAM
RolePolicy范围为要求采取的确切行动 - 将资源标识符作为目标上的环境变量(例如.
UPLOADS_BUCKET_NAME(中文(简体) ) - 没有手工 ARN 接线, 没有被遗忘的权限
SvelteKit 部署
向有单一组件的AWS部署一个SvelteKit应用程序。 Anvil protects S3, CloudFront, ACM, Lambda (通过 Lambda Web 适配器), 和 Route 53 — 有 HTTPS 和自定义域从框外出:
import { App } from '@anvil-cloud/sdk';
import * as anvil from '@anvil-cloud/sdk';
export default new App({
run(ctx) {
const site = new anvil.aws.SvelteKitSite('web', {
path: 'web', // the SvelteKit project folder — Anvil runs the build
domain: 'myapp.com',
});
ctx.export('url', site.url);
},
});
逃逸舱门
每个组件接受a hatch 参数 —— 当您需要突破默认时, 用于覆盖基础资源配置的逃生舱:
const bucket = new anvil.aws.Bucket('custom', {
dataClassification: 'non-sensitive',
hatch: {
bucket: { forceDestroy: true, tags: { env: 'dev' } },
},
});
链接
许可证
阿帕奇 - 2.0