Amazon web services 如何在CloudFormation模板中将数据从AWS S3复制到EC2?
我创建了一个CloudFormation模板,用于启动自动缩放组。在启动期间,允许Amazon web services 如何在CloudFormation模板中将数据从AWS S3复制到EC2?,amazon-web-services,amazon-s3,amazon-ec2,amazon-cloudformation,Amazon Web Services,Amazon S3,Amazon Ec2,Amazon Cloudformation,我创建了一个CloudFormation模板,用于启动自动缩放组。在启动期间,允许s3:GetObject访问的策略附加到每个EC2实例。在此之后,我使用用户数据安装ApacheWeb服务器和PHP,然后更改相关文件夹的设置。然后,我需要将多个文件从一个S3存储桶(没有公共访问权限)复制到每个实例中的/var/www/html文件夹中,但如果不在CloudFormation堆栈完成后恢复到手动复制或与CLI同步文件,我就无法解决这一问题—这必须是一个完全自动化的过程 模板中的用户数据如下所示:
s3:GetObject
访问的策略附加到每个EC2实例。在此之后,我使用用户数据安装ApacheWeb服务器和PHP,然后更改相关文件夹的设置。然后,我需要将多个文件从一个S3存储桶(没有公共访问权限)复制到每个实例中的/var/www/html文件夹中,但如果不在CloudFormation堆栈完成后恢复到手动复制或与CLI同步文件,我就无法解决这一问题—这必须是一个完全自动化的过程
模板中的用户数据如下所示:
"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 {} +"
]
]
}
}
要坚持您已经在做的操作,您可以从userdata脚本中运行AWS CLI:
"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读取文件的权限
另一种方法是使用:它是一个预定义的元数据键,可以附加到EC2::Instance
或AutoScaling::LaunchConfiguration
资源,允许您配置包、服务和单个文件(包括从S3检索和解压缩文件)
有一个教程,您可以在userdata脚本中运行AWS CLI:
"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读取文件的权限
另一种方法是使用:它是一个预定义的元数据键,可以附加到EC2::Instance
或AutoScaling::LaunchConfiguration
资源,允许您配置包、服务和单个文件(包括从S3检索和解压缩文件)
<>有一个教程考虑考虑精彩!我不知道默认情况下CLI安装在EC2服务上(但我想这取决于正在使用的AMI)。@DorianFabre-是的,它只默认安装在AWS Linux AMI上,但对于其他用户,您只需在用户数据中执行
pip安装awscli
(或pip3
)即可。太棒了!我不知道默认情况下CLI安装在EC2服务上(但我想这取决于正在使用的AMI)。@DorianFabre-true,它仅默认安装在AWS Linux AMI上,但对于其他用户,您可以将pip安装awscli
(或pip3
)作为用户数据的一部分。