![](/img/trans.png)
[英]How can I copy a file from s3 bucket into an ec2 instance using userdata inside a cloudformation template
[英]How do I copy data from AWS S3 to EC2 in a CloudFormation template?
我創建了一個 CloudFormation 模板來啟動 AutoScaling 組。 在啟動期間,允許s3:GetObject
訪問的策略附加到每個 EC2 實例。 之后,我使用 User Data 安裝 Apache Web 服務器和 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 {} +"
]
]
}
}
為了堅持您已經在做的事情,您可以從您的用戶數據腳本中運行 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 讀取文件的權限。
另一種方法是使用AWS::CloudFormation::Init :它是一個預定義的元數據鍵,您可以將其附加到EC2::Instance
或AutoScaling::LaunchConfiguration
資源,它允許您配置包、服務和單個文件(包括從 S3 檢索和解壓縮文件)。
有一個教程在這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.