Advertisement
Guest User

Untitled

a guest
Aug 24th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.04 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. source $1
  4. source $HOME/.python3/bin/activate
  5.  
  6. ############ IAM CONFIG ############
  7.  
  8. aws iam create-user --user-name ${SERVICE_IAM_USER} --profile iam
  9.  
  10. aws iam attach-user-policy \
  11. --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccess \
  12. --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforAWSCodeDeploy \
  13. --user-name ${SERVICE_IAM_USER} \
  14. --profile iam
  15.  
  16. aws iam attach-user-policy \
  17. --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforAWSCodeDeploy \
  18. --user-name ${SERVICE_IAM_USER} \
  19. --profile iam
  20.  
  21. aws iam attach-user-policy \
  22. --policy-arn arn:aws:iam::aws:policy/AWSElasticBeanstalkFullAccess \
  23. --user-name ${SERVICE_IAM_USER} \
  24. --profile iam
  25.  
  26. aws iam attach-user-policy \
  27. --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess \
  28. --user-name ${SERVICE_IAM_USER} \
  29. --profile iam
  30.  
  31. aws iam attach-user-policy \
  32. --policy-arn arn:aws:iam::aws:policy/AmazonRDSFullAccess \
  33. --user-name ${SERVICE_IAM_USER} \
  34. --profile iam
  35.  
  36. aws iam attach-user-policy \
  37. --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess \
  38. --user-name ${SERVICE_IAM_USER} \
  39. --profile iam
  40.  
  41. aws iam attach-user-policy \
  42. --policy-arn arn:aws:iam::aws:policy/AWSCodeDeployFullAccess \
  43. --user-name ${SERVICE_IAM_USER} \
  44. --profile iam
  45.  
  46. aws iam create-access-key --user-name ${SERVICE_IAM_USER} --profile iam
  47.  
  48. read -p "User id: " AWS_ID
  49. read -p "User secret: " AWS_SECRET
  50. echo "IAM_USER_ID=${AWS_ID}" >> ./aws-eb.env
  51. echo "IAM_USER_SECRET=${AWS_SECRET}" >> ./aws-eb.env
  52.  
  53. aws configure set region ${SERVICE_AWS_REGION} --profile ${SERVICE_IAM_USER}
  54. aws configure set aws_access_key_id ${AWS_ID} --profile ${SERVICE_IAM_USER}
  55. aws configure set aws_secret_access_key ${AWS_SECRET} --profile ${SERVICE_IAM_USER}
  56.  
  57. ############ ECR & EB CONFIG ############
  58.  
  59. # Create ECR repository
  60.  
  61. aws ecr create-repository \
  62. --repository-name ${SERVICE_DOCKER_REPO} \
  63. --profile ${SERVICE_IAM_USER}
  64.  
  65. aws ecr describe-repositories \
  66. --repository-names ${SERVICE_DOCKER_REPO} \
  67. --profile ${SERVICE_IAM_USER}
  68.  
  69. read -p "ECR repo URL: " ECR_URI
  70. echo "ECR_URI=${ECR_URI}" >> ./aws-eb.env
  71.  
  72. # Create VPC
  73.  
  74. # aws ec2 create-vpc \
  75. # --cidr-block 10.0.0.0/16
  76. # read -p "VPC ID:" VPC_ID
  77. #echo "export VPC_ID=${VPC_ID}" >> ./aws.env
  78.  
  79. # Create Elastic Beanstalk Environment
  80.  
  81. cd "${APP_FOLDER}"
  82.  
  83. eb init -p docker ${SERVICE_NAME} --profile ${SERVICE_IAM_USER} --region ${SERVICE_AWS_REGION}
  84. echo -e "deploy:" >> ./.elasticbeanstalk/config.yml
  85. echo -e " artifact: ./Dockerrun.aws.json" >> ./.elasticbeanstalk/config.yml
  86.  
  87. cat << EOF > ./Dockerrun.aws.json
  88. {
  89. "AWSEBDockerrunVersion": "1",
  90. "Image": {
  91. "Name": "${ECR_URI}",
  92. "Update": "true"
  93. },
  94. "Ports": [
  95. {
  96. "ContainerPort": "${APP_PORT}"
  97. }
  98. ]
  99. }
  100. EOF
  101.  
  102. git archive --format=tar \
  103. --output ${SERVICE_NAME}.tar 5fc9c7e
  104.  
  105. docker build --build-arg service_name=${SERVICE_NAME} \
  106. --build-arg react_folder=${REACT_FOLDER} \
  107. --tag ${SERVICE_NAME} \
  108. --file Dockerfile .
  109.  
  110. #docker tag ${SERVICE_NAME}/go:latest ${SERVICE_DOCKER_REPO}
  111. docker tag ${SERVICE_NAME}:latest ${ECR_URI}
  112.  
  113. $(aws ecr get-login --no-include-email --region ${SERVICE_AWS_REGION} --profile ${SERVICE_IAM_USER})
  114. docker push ${ECR_URI}
  115.  
  116. # Assign policy to EB role to enable
  117. # ElasticBeanstalk to access ECR
  118. # This is going to work as long as
  119. # the EB instance has the default ec2 role
  120. aws iam attach-role-policy \
  121. --role-name aws-elasticbeanstalk-ec2-role \
  122. --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \
  123. --profile iam
  124.  
  125. # to create a vpc use --vpc
  126. eb create ${SERVICE_ENVIRONMENT_NAME} --region ${SERVICE_AWS_REGION} --profile ${SERVICE_IAM_USER}
  127.  
  128. ############ DB CONFIG ############
  129.  
  130. cd "${APP_FOLDER}"
  131.  
  132. # Create a new security group
  133. # for the VPC the DB is in.
  134. # Otherwise, the DB is going
  135. # to belong to the default security group
  136.  
  137. # Get RDS VPC name
  138. aws ec2 describe-vpcs --profile ${SERVICE_IAM_USER}
  139. read -p "RDS_VPC_ID: " RDS_VPC_ID
  140. echo "RDS_VPC_ID=${RDS_VPC_ID}" >> /home/federico/qualivita/aws-eb.env
  141.  
  142. aws ec2 create-security-group --group-name ${RDS_SECURITY_GROUP} \
  143. --description "${DB_NAME} security group" \
  144. --vpc-id ${RDS_VPC_ID} \
  145. --profile ${SERVICE_IAM_USER}
  146.  
  147. read -p "Enter database Group Id: " RDS_GROUP_ID
  148. echo "RDS_GROUP_ID=${RDS_GROUP_ID}" >> /home/federico/qualivita/aws-eb.env
  149. # Get EC2 group id
  150. aws ec2 describe-instances --query 'Reservations[*].Instances[*].[SecurityGroups, Tags[?Key==`Name`].Value]' --profile ${SERVICE_IAM_USER}
  151. read -p "Enter service Group Id: " EC2_GROUP_ID
  152. echo "EC2_GROUP_ID=${EC2_GROUP_ID}" >> ./aws-eb.env
  153. # Create a NEW security group for
  154. # the DB's VPC to
  155. # accept incoming requests from another
  156. # security group: the ElasticBeanstalk
  157. # instance's security group.
  158.  
  159. cat << EOF > ./sg-ip-permissions-rds.json
  160. [
  161. {
  162. "PrefixListIds": [],
  163. "IpRanges": [],
  164. "IpProtocol": "tcp",
  165. "Ipv6Ranges": [],
  166. "UserIdGroupPairs": [
  167. {
  168. "Description": "Enable access to ${DB_NAME} from EC2 security group",
  169. "UserId": "711464981613",
  170. "GroupId": "${EC2_GROUP_ID}"
  171. }
  172. ],
  173. "ToPort": 5432,
  174. "FromPort": 5432
  175. }
  176. ]
  177. EOF
  178.  
  179. IP_PERMISSIONS="$(cat ./sg-ip-permissions-rds.json)"
  180.  
  181. aws ec2 authorize-security-group-ingress \
  182. --ip-permissions "${IP_PERMISSIONS}" \
  183. --group-id $RDS_GROUP_ID \
  184. --profile ${SERVICE_IAM_USER}
  185.  
  186. aws rds create-db-instance \
  187. --vpc-security-group-ids ${RDS_GROUP_ID} \
  188. --allocated-storage 20 \
  189. --db-instance-class db.t2.micro \
  190. --db-instance-identifier ${DB_NAME} \
  191. --engine postgres \
  192. --master-username ${DB_USER} \
  193. --port ${DB_PORT} \
  194. --enable-iam-database-authentication \
  195. --master-user-password ${DB_PASSWORD} \
  196. --profile ${SERVICE_IAM_USER}
  197.  
  198. aws rds describe-db-instances --profile ${SERVICE_IAM_USER} -- --query 'DBInstances[*].Endpoint'
  199. read -p "DB URI: " DB_HOST
  200. echo "export DB_HOST=${DB_HOST}" >> ./aws-eb.env
  201. aws ec2 describe-instances --query 'Reservations[*].Instances[*].[PublicDnsName, Tags[?Key==`Name`].Value]' --profile ${SERVICE_IAM_USER}
  202. read -p "EC2 URL: " BASE_URL
  203.  
  204. DB_CONNECTION_STRING="postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/postgres?sslmode=disable"
  205.  
  206. cd ${APP_FOLDER}
  207. eb setenv AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \
  208. AWS_SECRET_KEY=${AWS_SECRET_KEY} \
  209. APP_PORT=${APP_PORT} \
  210. BASE_URL=${BASE_URL} \
  211. JWT_SECRET=${JWT_SECRET} \
  212. DB_CONNECTION_STRING=${DB_CONNECTION_STRING} \
  213. SENDGRID_API_KEY=${SENDGRID_API_KEY} \
  214. SENDGRID_PASSWORD=${SENDGRID_PASSWORD} \
  215. SENDGRID_USERNAME=${SENDGRID_USERNAME} --profile ${SERVICE_IAM_USER}
  216. cd -
  217.  
  218. ############ S3 CONFIG ############
  219.  
  220. # S3 create bucket
  221.  
  222. aws s3api create-bucket \
  223. --bucket ${S3_BUCKET_NAME} \
  224. --acl private \
  225. --region ${SERVICE_AWS_REGION} --profile ${SERVICE_IAM_USER}
  226.  
  227. # S3 update ACL for bucket
  228.  
  229. # S3 update CORS for bucket
  230.  
  231. cat << EOF > ./cors.json
  232. {
  233. "CORSRules": [
  234. {
  235. "AllowedOrigins": ["${BASE_URL}"],
  236. "AllowedHeaders": ["*"],
  237. "AllowedMethods": ["PUT", "POST", "DELETE", "OPTIONS", "GET", "PATCH"],
  238. "MaxAgeSeconds": 3000,
  239. "ExposeHeaders": ["x-amz-server-side-encryption"]
  240. },
  241. {
  242. "AllowedOrigins": ["*"],
  243. "AllowedHeaders": ["Authorization"],
  244. "AllowedMethods": ["GET"],
  245. "MaxAgeSeconds": 3000
  246. }
  247. ]
  248. }
  249. EOF
  250.  
  251. aws s3api put-bucket-cors \
  252. --bucket ${S3_BUCKET_NAME} \
  253. --cors-configuration file://cors.json
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement