@ 适应worx/iac- aws
用于 AWS 的可再使用的 Pulumi 基础设施组件,用 TypeScript 写成.
部分 适应WorX iac-core a 包括:
一组开源的 IaC 库,用于多云的 Pulumi 部署.
安装
pnpm add @adaptiveworx/iac-aws @pulumi/aws @pulumi/pulumi
@pulumi/aws 财务报告和审定财务报表 @pulumi/pulumi 是同伴的依赖关系——带来自己的
各个版本.
构成部分
| 构成部分 | 目的 |
|---|---|
SharedVpc | 多级 VPC 有 NAT, 流程日志, RAM 共享, 可配置的每级 CIDR, 在每个子网上可选的 IPv6 二重装 |
CrossAccountIAMRoles | 跨账户 Pulumi 角色+ 产品线架构的基础接入角色 |
GitHubActionsOIDC | OIDC 供应商+GitHub Actions CI/CD的部署角色 |
| IAM 政策助手 | 可编译的政策文件构建者 |
使用量
import { SharedVpc, CrossAccountIAMRoles, GitHubActionsOIDC } from "@adaptiveworx/iac-aws";
const vpc = new SharedVpc("dev-use1", {
environment: "dev",
region: "us-east-1",
accountId: "123456789012",
orgPrefix: "worx",
vpcCidr: "10.10.0.0/16",
availabilityZones: ["us-east-1a", "us-east-1b", "us-east-1c"],
natGatewayCount: 3,
enableIpv6: true, // dual-stack: a /64 on every subnet
subnetTiers: [
// With enableIpv6 every tier declares a unique, permanent ipv6Slot (0–15). role names the
// workloads a tier holds; shareWith names the accounts it is shared with.
{ name: "public", role: "load-balancers", routeToInternet: true, shareWith: [], ipv6Slot: 0 },
{ name: "private", role: "apps", routeToInternet: false, shareWith: ["worx-app-dev"], ipv6Slot: 1 },
{ name: "data", role: "databases", routeToInternet: false, shareWith: ["worx-app-dev"], ipv6Slot: 2 },
],
flowLogs: { enabled: true, trafficType: "ALL", retentionDays: 90 },
sharedAccounts: { "210987654321": "worx-app-dev" },
tags: {},
});
共享 Vpc 和 IPv6
enableIpv6: true * 将《维也纳公约》的两层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层层
每个子网 a/64 (netnum = ipv6Slot * 16 + AZ-letter index,所以添加一个 AZ 或一个级
重新编号一个已存在的子网),其中 IPv6 被分配到新的网络接口; IPv6 规则每条
级 NACL(编号IPv4对应方+1000,加上UDP返回和ICMPv6包太大); ::/0
进入公共层级的互联网网关,进入私人层级的独家网关,有或有
没有NAT;服务支持IPv6的双层存储 VPC端点.
allowIpv4PublicIngress(默认)false,自0.5.0起):没有互联网启动的IPv4进入 公共级别。 准备吧true它增加了IPv4,443/80 入境 (第100/110条规则).allowIpv6PublicIngress(默认)false:没有互联网启动的IPv6输入;等级保持 他们需要的入侵 和它的回程交通。 准备吧true只为生产优势 它增加了IPv6 4443/80, 并向公众开放。 这个 公开::/0路径总是存在的(它是 IPv6 egress),所以安全小组仍然是控制 进入IPv6.- IPv6 egress 无法到达 IPv4 唯一的目的地(例如.
github.com, (中文(简体) ),ghcr.io),没有 DNS64/NAT64 (英语).natGatewayCount: 0仅当其工作量使用 VPC 时才有效 端点或IPv6功能专用目的地.
细节 : 文件/安保-实施。 。 。 .
等级角色、共享和重命名
role列出一个级别的工作量。 有标记Role在层层的子网和NACL. 所需(0.6.0美元).shareWith列出账户(按账户名称分列)sharedAccounts)一个层次的子网共享 通过内存。 与每个账户分级的主要份额; 狭义的组合 自己的份额;[]无账户的股份。 要求 (0. 6.0); 必须在sharedAccounts(未关闭).shareViaRam改为:shareViaRam: true每一个账户sharedAccounts, (中文(简体) ),false与[]默认分级 (单位:千美元)defaultSubnetTiers(sharedAccounts)与每个账户共享私人和数据.formerNames重命名一个级别而不替换任何内容: 每个资源以级别命名 将它的旧逻辑名作为 Pulumi 化名携带,所以预览仅显示标签更新. 这个 标准产出publicSubnetIds, (中文(简体) ),privateSubnetIds, (中文(简体) ),dataSubnetIds)和NAT的安置 依旧名重新命名的等级.tierSubnetIds以当前 名称.- 每个子网都有标记
AzId及其区号(区名图到每个账户的物理区). 过availabilityZoneIds或让组件查取它们(aws.getAvailabilityZones页:1 普鲁米嘲笑,回来names财务报告和审定财务报表zoneIds为了那个电话. - 导出助手 :
tierAliases, (中文(简体) ),tierNamed, (中文(简体) ),validateTierSharing, (中文(简体) ),tierShareTargets, (中文(简体) ),legacyRamAssociationNames。 。 。 .
请查看每个组件的源代码来获取其完整的选项接口.
升级至0.6.0
每个消费者: 下一个预览从运行中的索引重命名每个子网的RAM关联
(单位:千美元)<env>-ram-<tier>-<n>改为分级和AZ字母(<env>-ram-<tier>-<a…p>通过别名,和
添加 AzId 标签( 加) Role 以至子网, 没有东西被替换。 测试套件
在嘲笑下必须回答 aws:index/getAvailabilityZones:getAvailabilityZones 与 names 财务报告和审定财务报表
zoneIds,或通过 availabilityZoneIds。 。 。 .
重命名等级的堆栈,移动到 shareWith 或停止共享同一应用程序中的分级数字 :
通过 legacyRamSharedTiers 与以前主要份额的等级,按名称分列
适用(例如:. ["public", "private", "data"]) (中文(简体) ). 没有它,它所维持的协会将被删除
并重新创建,它会短暂地解析他们的子网. 检查预览: 保留级
关联必须显示为重命名, 绝不显示为创建加删除 .
升级至0.5.0
谁必须行动:具有公共层级的消费者,其公共子网使用互联网
HTTPS/HTTP 在IPv4(例如公共负载平衡器)之上. 设定 allowIpv4PublicIngress: true 为了他们.
公共级别 NACL的TCP 443和80规则来自 0.0.0.0/0 (第100和110条)现在被选入,
与 allowIpv6PublicIngress。没有旗帜,下一次预览会删除这两个规则
每个公共等级的条目,没有什么变化。 VPC CIDR规则(95)和回程交通
规则(120)留下,所以公共层面的目标仍然可以从VPC内部到达,并保持它们的进取.
升级到0.4.0
0:4.0是将"共享Vpc IPv6"更改标记为断裂的放出. 变化本身首先 运入 0.3.4 (中文(简体) ),它已经贬值:它作为补丁发行,尽管它打破了一些 消费者。 平到0.3.3或移动到0.4.0;不要使用0.3.4.
谁必须行动: 设定的消费者 enableIpv6: true。 。 。 .
- 自定义
subnetTiers: 每一级必须声明ipv6Slot(整数 0 - 15, 跨 (第1款) 没有它,部件投向建筑, 所以没有部署。 选择 插槽一次而永不更改:分级槽会修正子网的64. - 默认等级:它们搭载了0/1/2槽,所以构造成功,但下个预览会转动 在IPv6上到处都是。 每个子网都获得一个64和指定创建(在位更新,从不) ,每一级 NACL 获得IPv6规则, 私人级获得一个只进入的网关路径, 终点会变成双层点 将它视为一种有意的网络变化,每个环境.
allowIpv6PublicIngress现在默认为false,与公众::/0路径总是存在的 与 IPv6 (参见 共享 Vpc 和 IPv6) (中文(简体) ).
没有消费者 enableIpv6 见无变化.
版本发布( L)
这个包裹是独立铸造的 1.0以下,一个突破的更改会撞出小版本
(0.3.x-0.4.0) 和地物和固定物会撞出补丁. 已标记断开的更改 (!因此,一个
^0.y.z 范围从来不承认一个。 见
根变换组公约
这个包裹 变动情况。 。 。 .