import { Composite, mergeDefaults } from "@intentius/chant"; import { Role, InstanceProfile } from "../generated"; import { Ref } from "../intrinsics"; export interface Ec2InstanceRoleProps { ManagedPolicyArns?: string[]; Policies?: ConstructorParameters[0]["Policies"]; defaults?: { role?: Partial[0]>; instanceProfile?: Partial[0]>; }; } const EC2_ASSUME_ROLE = { Version: "2012-10-17" as const, Statement: [ { Effect: "Allow" as const, Principal: { Service: "ec2.amazonaws.com" }, Action: "sts:AssumeRole", }, ], }; export const Ec2InstanceRole = Composite((props: Ec2InstanceRoleProps) => { const { defaults } = props; const role = new Role(mergeDefaults({ AssumeRolePolicyDocument: EC2_ASSUME_ROLE, ManagedPolicyArns: props.ManagedPolicyArns ?? [], Policies: props.Policies ?? [], }, defaults?.role)); const instanceProfile = new InstanceProfile(mergeDefaults({ Roles: [Ref(role)], }, defaults?.instanceProfile)); return { role, instanceProfile }; }, "Ec2InstanceRole");