2015-02-11 25 views
0

我正在使用.ebextensions文件初始化我的系統,並從S3存儲桶中拉出一些.pem文件。但是,當我嘗試在我的node.js應用程序中讀取此文件時,我經常遇到訪問被拒絕的錯誤。我已經確認從S3提取的文件的內容是正確的。Elastic Beanstalk:無法從node.js應用程序中讀取從S3中提取的文件

我的配置文件有問題嗎?

files: 
    "/home/ec2-user/certificates/cert.pem": 
    mode: "000777" 
    owner: nodejs 
    group: users 
    source: "https://s3-us-west-2.amazonaws.com/myBucket/folder/cert.pem" 

Resources: 
    AWSEBAutoScalingGroup: 
    Metadata: 
     AWS::CloudFormation::Authentication: 
     S3Access: 
      type: S3 
      roleName: aws-elasticbeanstalk-ec2-role 
      buckets: myBucket 

錯誤的node.js中給出:

Error: EACCES, permission denied '/home/ec2-user/certificates/cert.pem' 
+0

您是否嘗試登錄到機器並手動訪問S3文件以檢查權限? – Frank 2015-02-11 07:41:33

+0

是的,權限和預期的一樣。我在這臺機器上安裝了nvm進行測試,並且能夠使用fs模塊來讀取它。然而,我的node.js應用程序沒有這樣的運氣。 – 2015-02-11 14:03:20

回答

0

你的Node.js應用程序的用戶,的NodeJS,不允許下載文件到EC2用戶的主目錄。您可以將文件下載到/tmp目錄,然後使用容器命令移動它。容器命令在部署前從臨時應用程序的根目錄執行。

files: 
    "/tmp/cert.pem": 
    mode: "000777" 
    owner: nodejs 
    group: users 
    source: "https://s3-us-west-2.amazonaws.com/myBucket/folder/cert.pem" 

Resources: 
    AWSEBAutoScalingGroup: 
    Metadata: 
     AWS::CloudFormation::Authentication: 
     S3Access: 
      type: S3 
      roleName: aws-elasticbeanstalk-ec2-role 
      buckets: myBucket 

container_commands: 
    file_transfer_1: 
    command: "mkdir -p certificates" 
    file_transfer_2: 
    command: "mv /tmp/cert.pem certificates/."