Как скопировать данные из AWS S3 в EC2 в шаблоне CloudFormation? - PullRequest
1 голос
/ 05 марта 2020

Я создал шаблон CloudFormation, который запускает группу AutoScaling. Во время запуска политика, разрешающая доступ s3:GetObject, присоединяется к каждому экземпляру EC2. После этого я использую Данные пользователя для установки веб-сервера Apache и PHP, а затем изменяю настройки для соответствующих папок. Затем мне нужно скопировать несколько файлов из корзины S3 (которая не имеет доступа publi c) в папку / var / www/html в каждом экземпляре, но я не могу понять, как это сделать, не возвращаясь к ручному копированию или синхронизировать файлы с CLI после завершения стека CloudFormation - это должен быть полностью автоматизированный процесс.

Пользовательские данные в шаблоне выглядят следующим образом:

"UserData": {
    "Fn::Base64": {
        "Fn::Join": [
            "\n",
            [
                "#!/bin/bash",
                "yum update -y",
                "yum install -y httpd24 php56",
                "service httpd start",
                "chkconfig httpd on",
                "groupadd DMO",
                "usermod -a -G DMO ec2-user",
                "chgrp -R DMO /var/www",
                "chmod 2775 /var/www",
                "find /var/www -type d -exec chmod 2775 {} +",
                "find /var/www -type f -exec chmod 0664 {} +"
            ]
        ]
    }
}

1 Ответ

5 голосов
/ 05 марта 2020

Чтобы придерживаться того, что вы уже делаете, вы можете запустить CLI AWS из своего скрипта userdata:

"UserData": {
    "Fn::Base64": {
        "Fn::Join": [
            "\n",
            [
                "#!/bin/bash",
                "yum update -y",
                "yum install -y httpd24 php56",
                "service httpd start",
                "chkconfig httpd on",
                "groupadd DMO",
                "usermod -a -G DMO ec2-user",
                "chgrp -R DMO /var/www",
                "chmod 2775 /var/www",
                "aws s3 cp s3://MYBUCKET/MYFILE.zip /tmp",
                "unzip -d /var/www /tmp/MYFILE.zip",
                "rm /tmp/MYFILE.zip",
                "find /var/www -type d -exec chmod 2775 {} +",
                "find /var/www -type f -exec chmod 0664 {} +"
            ]
        ]
    }
}

Чтобы сделать это, ваш профиль экземпляра EC2 должен предоставить разрешение на читать файл с S3.

Альтернативой является использование AWS :: CloudFormation :: Init : это предопределенный ключ метаданных, который вы можете присоединить к EC2::Instance или * Ресурс 1009 *, который позволяет настраивать пакеты, службы и отдельные файлы (включая получение и разархивирование файла из S3).

Здесь есть учебное пособие

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...