-
-
Save yefim/93fb5aa3291b3843353794127804976f to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# usage: ./deploy.sh staging f0478bd7c2f584b41a49405c91a439ce9d944657 | |
# license: public domain | |
BRANCH=$1 | |
SHA1=$2 | |
AWS_ACCOUNT_ID=12345678900 | |
NAME=name-of-service-to-deploy | |
EB_BUCKET=aws-s3-bucket-to-hold-application-versions | |
VERSION=$BRANCH-$SHA1 | |
ZIP=$VERSION.zip | |
aws configure set default.region us-east-1 | |
# Authenticate against our Docker registry | |
eval $(aws ecr get-login) | |
# Build and push the image | |
docker build -t $NAME:$VERSION . | |
docker tag $NAME:$VERSION $AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/$NAME:$VERSION | |
docker push $AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/$NAME:$VERSION | |
# Replace the <AWS_ACCOUNT_ID> with the real ID | |
sed -i='' "s/<AWS_ACCOUNT_ID>/$AWS_ACCOUNT_ID/" Dockerrun.aws.json | |
# Replace the <NAME> with the real name | |
sed -i='' "s/<NAME>/$NAME/" Dockerrun.aws.json | |
# Replace the <TAG> with the real version number | |
sed -i='' "s/<TAG>/$VERSION/" Dockerrun.aws.json | |
# Zip up the Dockerrun file (feel free to zip up an .ebextensions directory with it) | |
zip -r $ZIP Dockerrun.aws.json | |
aws s3 cp $ZIP s3://$EB_BUCKET/$ZIP | |
# Create a new application version with the zipped up Dockerrun file | |
aws elasticbeanstalk create-application-version --application-name $NAME-application \ | |
--version-label $VERSION --source-bundle S3Bucket=$EB_BUCKET,S3Key=$ZIP | |
# Update the environment to use the new application version | |
aws elasticbeanstalk update-environment --environment-name $NAME \ | |
--version-label $VERSION |
{ | |
"AWSEBDockerrunVersion": "1", | |
"Image": { | |
"Name": "<AWS_ACCOUNT_ID>.dkr.ecr.us-east-1.amazonaws.com/<NAME>:<TAG>", | |
"Update": "true" | |
}, | |
"Ports": [ | |
{ | |
"ContainerPort": "443" | |
} | |
] | |
} |
@javahometech when using elastic beanstalk ,and ecr, you set up an iam role. So then when the following was run:
eval $(aws ecr get-login)
aws ecr get-login prints out a docker login command with a temporary credential. That output then gets executed with the eval statement and that's how auth is handled.
sed
command contains minor "error":
sed -i='' "s/<AWS_ACCOUNT_ID>/$AWS_ACCOUNT_ID/" Dockerrun.aws.json
will make a backup file called Dockerrun.aws.json=
which is not what would be expected. Assume because -i
was used the expectation is that file will be modified in place.
Documentation https://linux.die.net/man/1/sed
-i=''
needs to be replaced with either --in-place=''
or with -i ''
or with a sensible backup extension -i.bak
First 2 options will not work on all systems and I found the last one -i.bak
a bit more reliable when running sed
on OSX and on Linux
Hello All,
I'm doing different.
I'm using AWSEBCLI to deploy the application with the structure bellow:
So in config.yml is necessary put the keys bellow:
The archive will be like this:
then is just execute the command 'eb deploy' in main directory os your app.