# CloudFormationInit

A CloudFormation-init configuration.

- Source: [`aws-ec2/lib/cfn-init.ts`](https://github.com/aws/aws-cdk/blob/v2.275.0/packages/aws-cdk-lib/aws-ec2/lib/cfn-init.ts#L16)

## Example

```ts
declare const vpc: ec2.Vpc;
declare const instanceType: ec2.InstanceType;

new ec2.Instance(this, 'Instance', {
  vpc,
  instanceType,
  machineImage: ec2.MachineImage.latestAmazonLinux2023(),

  init: ec2.CloudFormationInit.fromElements(
    // Create a simple config file that runs a Python web server
    ec2.InitService.systemdConfigFile('simpleserver', {
      command: '/usr/bin/python3 -m http.server 8080',
      cwd: '/var/www/html',
    }),
    // Start the server using SystemD
    ec2.InitService.enable('simpleserver', {
      serviceManager: ec2.ServiceManager.SYSTEMD,
    }),
    // Drop an example file to show the web server working
    ec2.InitFile.fromString('/var/www/html/index.html', 'Hello! It\'s working!'),
  ),
});
```

## Methods

- `addConfig(configName: string, config: InitConfig): void` — Add a config with the given name to this CloudFormationInit object.

- `addConfigSet(configSetName: string, configNames?: string[]): void` — Add a config set with the given name to this CloudFormationInit object.

  The new configset will reference the given configs in the given order.

- `attach(attachedResource: CfnResource, attachOptions: AttachInitOptions): void` — Attach the CloudFormation Init config to the given resource.

  As an app builder, use `instance.applyCloudFormationInit()` or
  `autoScalingGroup.applyCloudFormationInit()` to trigger this method.

  This method does the following:

  - Renders the `AWS::CloudFormation::Init` object to the given resource's
    metadata, potentially adding a `AWS::CloudFormation::Authentication` object
    next to it if required.
  - Updates the instance role policy to be able to call the APIs required for
    `cfn-init` and `cfn-signal` to work, and potentially add permissions to download
    referenced asset and bucket resources.
  - Updates the given UserData with commands to execute the `cfn-init` script.

- `fromConfig(config: InitConfig): CloudFormationInit // chainable` (static) — Use an existing InitConfig object as the default and only config.

- `fromConfigSets(props: ConfigSetProps): CloudFormationInit // chainable` (static) — Build a CloudFormationInit from config sets.

- `fromElements(...elements: InitElement[]): CloudFormationInit // chainable` (static) — Build a new config from a set of Init Elements.
