Notes on CI/CD
See the figure:
To implement gitflow with AWS:
Elastic Container Repository. ECR is like a docker hub where we can save Docker images. We can pull and push docker images from ECR.
Elastic Container Service. Note: It is not Elastic Bean Stalk.
Pipeline dashboard will be very useful: https://github.com/stelligent/pipeline-dashboard
# Step 1: Setup for master and dev branch
aws cloudformation create-stack --stack-name GitFlowEnv \
--template-body https://s3.amazonaws.com/devops-workshop-0526-2051/
git-flow/aws-devops-workshop-environment-setup.template \
--capabilities CAPABILITY_IAM # It may create IAM resources.
aws cloudformation create-stack --stack-name GitFlowCiCd \
--template-body https://s3.amazonaws.com/devops-workshop-0526-2051/
git-flow/aws-pipeline-commit-build-deploy.template \
--capabilities CAPABILITY_IAM \
--parameters ParameterKey=MainBranchName,ParameterValue=master
ParameterKey=DevBranchName,ParameterValue=develop
# Update the stack to create another pipeline for feature-x branch.
aws cloudformation update-stack --stack-name GitFlowCiCd \
--template-body https://s3.amazonaws.com/devops-workshop-0526-2051/
git-flow/aws-pipeline-commit-build-deploy-update.template \
--capabilities CAPABILITY_IAM \
--parameters ParameterKey=MainBranchName,ParameterValue=master
ParameterKey=DevBranchName,ParameterValue=develop
ParameterKey=FeatureBranchName,ParameterValue=feature-x
# Update stack again without feature branch to remove it from stack.
You can change variables in variables.tfvars
For example: I want to create a VPC with CIDR ( 10.0.0.0/16 ), two public subnet and two private subnet :
vpc_cidr = "10.0.0.0/16"
environment = "production"
public_subnet_cidrs = ["10.0.0.0/24", "10.0.1.0/24"]
private_subnet_cidrs = ["10.0.50.0/24", "10.0.51.0/24"]
availibility_zones = ["us-west-2a", "us-west-2b"]
region = "us-west-2"
ami_image = "ami-09568291a9d6c804c"
ecs_key = "demo"
instance_type = "t2.medium"
repo_owner = "vankhoa011"
repo_name = "demo-cicd-codepipeline"
github_oauth_token = "github_oauth_token"
Then run :
terraform init
terraform plan -var-file=variables.tfvars
terraform apply -var-file=variables.tfvars