2015-08-17 93 views
5

我正在將舊應用程序遷移到Elastic Beanstalk。它需要持久存儲(暫時)。我想掛載EBS卷。將EBS卷(不是快照)掛載到Elastic Beanstalk EC2

我希望以下內容將在.ebextensions/ebs.config工作:

commands: 
    01mkdir: 
    command: "mkdir /data" 
    02mount: 
    command: "mount /dev/sdh /data" 

option_settings: 
    - namespace: aws:autoscaling:launchconfiguration 
    option_name: BlockDeviceMappings 
    value: /dev/sdh=vol-XXXXX 

https://blogs.aws.amazon.com/application-management/post/Tx224DU59IG3OR9/Customize-Ephemeral-and-EBS-Volumes-in-Elastic-Beanstalk-Environments

但不幸的是我得到的參數snapshotId以下錯誤「(第一卷-XXXX)是無效的預計:「卡扣......'。」

很明顯,這種方法只允許快照。任何人都可以提出修正或替代方法。

回答

7

我找到了解決方案。可以通過刪除「睡眠10」來改進,但不幸的是,因爲aws ec2 attach-volume是異步的並且在附件發生之前立即返回,所以需要這樣做。

container_commands: 
    01mount: 
    command: "aws ec2 attach-volume --volume-id vol-XXXXXX --instance-id $(curl -s http://169.254.169.254/latest/meta-data/instance-id) --device /dev/sdh" 
    ignoreErrors: true 
    02wait: 
    command: "sleep 10" 
    03mkdir: 
    command: "mkdir /data" 
    test: "[ ! -d /data ]" 
    04mount: 
    command: "mount /dev/sdh /data" 
    test: "! mountpoint -q /dev/sdh" 

注意。理想情況下,它將運行在commands部分不是container_commands但環境變量沒有及時設置。

+0

而不是'ignoreErrors'可以'測試: 「[!-b的/ dev/SDH]」'。 – Dan

+0

我不明白你的說明:什麼環境變量? 如果這是在'commands'而不是'container_commands'中,您是否需要像@hashinclude提到的那樣重新啓動Docker容器? –

2

要添加到@西蒙的回答(以避免粗心的陷阱):

  • 如果安裝最終將泊塢窗容器(例如裏面,如果你正在運行詹金斯使用,要持久存儲堅持jenkins_home),您需要在運行安裝後重新啓動Docker容器。
  • 您需要在EB中假定針對EC2實例(或實例/ * ARN)和要附加的卷(或卷/ * ARN)允許的'ec2:AttachVolumes'操作角色政策。沒有這個,aws ec2 attach-volume命令失敗。
  • 您需要在--region傳遞給aws ec2 ...命令以及(至少在寫這篇文章的)
0

這是有缺失的配置:

commands: 
    01mount: 
    command: "export AWS_ACCESS_KEY_ID=<replace by your AWS key> && export AWS_SECRET_ACCESS_KEY=<replace by your AWS secret> && aws ec2 attach-volume --volume-id <replace by you volume id> --instance-id $(curl -s http://169.254.169.254/latest/meta-data/instance-id) --device /dev/xvdf --region <replace with your region>" 
    ignoreErrors: true 
    02wait: 
    command: "sleep 10" 
    03mkdir: 
    command: "mkdir /home/lucene" 
    test: "[ ! -d /home/lucene ]" 
    04mount: 
    command: "mount /dev/xvdf /home/lucene" 
    test: "! mountpoint -q /dev/xvdf"