Typescript CDK, как добавить файлы в экземпляр ec2?

#typescript #amazon-web-services #aws-cdk

#typescript #amazon-web-services #aws-cdk

Вопрос:

Я знаю, как использовать Here docs для запуска сценариев на недавно запущенном экземпляре, таком как

 instance.addUserData(
      bash << EOF
      #!/usr/bin/bash 
      ...
      EOF,
);
  

но я не хочу делать это для файлов конфигурации, поскольку они управляются git.

Итак, как мне включить текстовые файлы во вновь запущенный экземпляр? Amazon, похоже, хочет, чтобы вы использовали S3 в соответствии с приведенной здесь документацией по ресурсамhttps://docs.aws.amazon.com/cdk/latest/guide/assets.html но я думаю, что в родном CDK должен быть способ сделать это, я просто не могу найти его в документах API.

Ответ №1:

Конструкция Ec2 имеет параметр инициализации, который вы можете использовать, как описано здесь

Для этого вам необходимо использовать как класс CloudFormationInit, так и класс InitFile.

Это позволит вам предоставлять файлы во время запуска вашего экземпляра из нескольких источников. Для того, чтобы вместить размер вашего шаблона, рекомендуется хранить ресурсы в корзине S3, если файл слишком большой.

Собрав все это вместе, вы должны записать что-то вроде этого:

     // prepare the file as an s3 asset
     const s3Asset = new Asset(this, 'SampleSingleFileAsset', {
        path: './local/path/tofile/file.extension',
    });

    // prepare the file as an asset and put it in the cfinit
    const initData = CloudFormationInit.fromElements(
InitFile.fromExistingAsset('/destination/path/filename.extension', s3Asset, {})
);

    // create the EC2 Instance with the initData parameter
    const ec2Instance = new Instance(this, 'ec2-instance', {
                   
        //other parameters...

        init: initData
    });