Elastic-Beanstalk:如何从EB实例中找到S3存储桶

时间:2017-12-31 03:59:12

标签: amazon-web-services elastic-beanstalk aws-cli

我有兴趣将当前应用程序的备份创建为应用程序版本。因此,我想尝试跟踪保存应用程序版本的S3 Bucket,以将新文件保存到该位置。

有谁知道这是怎么做的?

2 个答案:

答案 0 :(得分:0)

要做到这一点:

  1. 获取实例ID
  2. 获取环境ID。
  3. 获取应用名称
  4. 获取应用版本
  5. 数据位于应用程序版本的响应中。

    基于以上所述,这是我的整个备份脚本。它将找出上面的步骤1-4,然后压缩当前的应用程序目录,将其发送到S3,并基于它创建一个新的应用程序版本。

    #/bin/bash
    EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
    test -n "$EC2_INSTANCE_ID" || die 'cannot obtain instance-id'
    EC2_AVAIL_ZONE="`wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone || die \"wget availability-zone has failed: $?\"`"
    test -n "$EC2_AVAIL_ZONE" || die 'cannot obtain availability-zone'
    EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"
    EB_ENV_ID="`aws ec2 describe-instances --instance-ids $EC2_INSTANCE_ID --region $EC2_REGION | grep -B 1  \"elasticbeanstalk:environment-id\" | grep -Po '\"Value\":\\s+\"[^\"]+\"' | cut -d':' -f 2 | grep -Po '[^\"]+'`"
    EB_APP_NAME="`aws elasticbeanstalk describe-environments --environment-id $EB_ENV_ID --region $EC2_REGION | grep 'ApplicationName' | cut -d':' -f 2 | grep -Po '[^\\",]+'`"
    EB_BUCKET_NAME="`aws elasticbeanstalk describe-application-versions --application-name $EB_APP_NAME --region $EC2_REGION | grep -m 1 'S3Bucket' | cut -d':' -f 2  | grep -Po '[^\", ]+'`"
    DATE=$(date -d "today" +"%Y%m%d%H%M")
    FILENAME=application.$DATE.zip
    
    
    cd /var/app/current
    sudo -u webapp zip -r -J /tmp/$FILENAME *
    sudo mv /tmp/$FILENAME ~/.
    sudo chmod 755 ~/$FILENAME
    cd ~
    aws s3 cp $FILENAME s3://$EB_BUCKET_NAME/
    rm -f ~/$FILENAME
    aws elasticbeanstalk create-application-version --application-name $EB_APP_NAME --version-label "$DATE-$FILENAME" --description "Auto-Save $DATE" --source-bundle S3Bucket="$EB_BUCKET_NAME",S3Key="$FILENAME" --no-auto-create-application --region $EC2_REGION
    

答案 1 :(得分:0)

tldr:很可能想要

jq -r '..|.url?' /etc/elasticbeanstalk/metadata-cache | grep -oP '//\K(.*)(?=\.s3)

详细版本:

添加到您的任何.ebextensions

packages: 
  yum:
    jq: []

(假设您使用的是Amazon Linux或Centos) 然后运行

export BUCKET="$(jq -r '..|.url?' /etc/elasticbeanstalk/metadata-cache | grep -oP '//\K(.*)(?=\.s3)' || sudo !!)"
echo bucketname: $BUCKET

然后可以在以下位置访问完整的s3路径

bash -c 'source /etc/elasticbeanstalk/.aws-eb-stack.properties; echo s3:\\${BUCKET} -r ${region:-eu-east-3}'