-
Star
(353)
You must be signed in to star a gist -
Fork
(89)
You must be signed in to fork a gist
-
-
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" | |
| } | |
| ] | |
| } |
Hello All,
I'm doing different.
I'm using AWSEBCLI to deploy the application with the structure bellow:
- .
- .elasticbeanstalk/config.yml
- Dockerrun.aws.json
- (Dockerfile and all files of application)
So in config.yml is necessary put the keys bellow:
deploy:
artifact: Dockerrun.aws.json
The archive will be like this:
branch-defaults:
master:
environment: myEnv
deploy:
artifact: Dockerrun.aws.json
global:
application_name: myApp
default_ec2_keyname: myKey
default_platform: arn:aws:elasticbeanstalk:sa-east-1::platform/Docker running on
64bit Amazon Linux/2.8.4
default_region: sa-east-1
include_git_submodules: true
instance_profile: null
platform_name: null
platform_version: null
profile: null
sc: git
workspace_type: Application
then is just execute the command 'eb deploy' in main directory os your app.
@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
If you are using
docker-composeinstead ofdocker buildIn
deploy.shinstead of
put this
and add the
image:key to yourdocker-compose.ymlfileReference:
https://stackoverflow.com/questions/33816456/how-to-tag-docker-image-with-docker-compose