Adding buildspec file

This commit is contained in:
Bryan Valencia 2023-12-10 14:49:59 -05:00
parent 8b8304fa25
commit 112d405d34
3 changed files with 158 additions and 0 deletions

11
Dockerfile Normal file
View file

@ -0,0 +1,11 @@
FROM openjdk:17-jdk
WORKDIR /app
COPY build/libs/spring-petclinic-3.2.0.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java"]
CMD ["-jar", "app.jar"]

27
buildspec.yml Normal file
View file

@ -0,0 +1,27 @@
version: 0.2
phases:
install:
runtime-versions:
java: corretto11
pre_build:
commands:
- echo Pre-build phase...
- echo Compile and running tests using Gradle Wrapper...
- chmod +x gradlew
- ./gradlew build
build:
commands:
- echo Build phase...
- echo Build Docker image and tag it...
- docker build -t bryanvalencia94/petclinic:$CODEBUILD_BUILD_NUMBER .
post_build:
commands:
- echo Post-build phase...
- echo Push Docker image to repository...
- docker push bryanvalencia94/petclinic:$CODEBUILD_BUILD_NUMBER
#artifacts:
# files:
# - '**/*'
# name: DevOpsAppArtifacts

View file

@ -0,0 +1,120 @@
Resources:
SecurityGroupPetClinic:
Type: "AWS::EC2::SecurityGroup"
Properties:
GroupName: "SecurityGroupPetClinic"
GroupDescription: "Security group to allow SSH and HTTP over 8080"
VpcId: "vpc-fe0d6d84"
SecurityGroupEgress:
- IpProtocol: "-1"
CidrIp: 0.0.0.0/0
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 8080
ToPort: 8080
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
LaunchConfigurationPetClinic2:
Type: "AWS::AutoScaling::LaunchConfiguration"
Properties:
ImageId: "ami-04c97e62cb19d53f1"
InstanceType: "t4g.small"
KeyName: "devops-keypair"
LaunchConfigurationName: "LaunchConfigurationPetClinic2"
SecurityGroups:
- !GetAtt SecurityGroupPetClinic.GroupId
UserData:
Fn::Base64:
!Sub |
#!/bin/bash
sudo yum update -y
sudo yum install docker -y
sudo service docker start
sudo docker pull bryanvalencia94/petclinic:1.0.0-mac-arm
sudo docker run -p 8080:8080 bryanvalencia94/petclinic:1.0.0-mac-arm
AutoScalingGroupPetClinic:
Type: "AWS::AutoScaling::AutoScalingGroup"
Properties:
MaxSize: 2
MinSize: 1
LaunchConfigurationName:
!Ref LaunchConfigurationPetClinic2
VPCZoneIdentifier:
- subnet-3da0f161
- subnet-3304e07e
TargetGroupARNs:
- Ref: TargetGroupPetClinic
AutoScalingPolicyPetClinic:
Type: AWS::AutoScaling::ScalingPolicy
Properties:
AdjustmentType: "ChangeInCapacity"
AutoScalingGroupName:
!Ref AutoScalingGroupPetClinic
Cooldown: "300"
ScalingAdjustment: "1"
LoadBalancerPetClinic:
Type: "AWS::ElasticLoadBalancingV2::LoadBalancer"
Properties:
Name: LoadBalancerPetClinic
Subnets:
- subnet-3da0f161
- subnet-3304e07e
SecurityGroups:
- !Ref SecurityGroupPetClinic
Type: application
TargetGroupPetClinic:
Type: "AWS::ElasticLoadBalancingV2::TargetGroup"
Properties:
Name: TargetGroupPetClinic
Port: 8080
Protocol: HTTP
VpcId: "vpc-fe0d6d84"
TargetType: instance
ListenerPetClinic:
Type: "AWS::ElasticLoadBalancingV2::Listener"
Properties:
DefaultActions:
- Type: forward
TargetGroupArn:
Ref: TargetGroupPetClinic
LoadBalancerArn:
Ref: LoadBalancerPetClinic
Port: 80
Protocol: HTTP
CloudFrontDistributionPetClinic:
Type: "AWS::CloudFront::Distribution"
Properties:
DistributionConfig:
DefaultCacheBehavior:
TargetOriginId: LoadBalancerOrigin
ViewerProtocolPolicy: allow-all
CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6 # This is the AWS Managed CacheOptimized CachePolicyId
Enabled: true
Origins:
- CustomOriginConfig:
HTTPPort: 80
OriginProtocolPolicy: http-only
DomainName: !GetAtt LoadBalancerPetClinic.DNSName
Id: LoadBalancerOrigin
Outputs:
LoadBalancerDNSName:
Description: The DNS name of the load balancer.
Value:
Fn::GetAtt:
- LoadBalancerPetClinic
- DNSName