-
Notifications
You must be signed in to change notification settings - Fork 0
Terraform Examples
Dominique Hosea edited this page Jul 12, 2024
·
1 revision
provider "aws" {
region = "us-east-1"
}
resource "aws_s3_bucket" "frontend" {
bucket = "my-lms-frontend"
acl = "public-read"
website {
index_document = "index.html"
error_document = "index.html"
}
}
resource "aws_cloudfront_distribution" "cdn" {
origin {
domain_name = aws_s3_bucket.frontend.bucket_regional_domain_name
origin_id = "myS3Origin"
}
enabled = true
is_ipv6_enabled = true
comment = "LMS Frontend"
default_root_object = "index.html"
default_cache_behavior {
allowed_methods = ["GET", "HEAD", "OPTIONS"]
cached_methods = ["GET", "HEAD"]
target_origin_id = "myS3Origin"
forwarded_values {
query_string = false
cookies {
forward = "none"
}
}
viewer_protocol_policy = "redirect-to-https"
min_ttl = 0
default_ttl = 3600
max_ttl = 86400
}
viewer_certificate {
cloudfront_default_certificate = true
}
}
resource "aws_codecommit_repository" "repo" {
repository_name = "lms-repo"
description = "LMS Source Code Repository"
}
resource "aws_codebuild_project" "build" {
name = "lms-build"
description = "Build project for LMS"
build_timeout = 5
service_role = aws_iam_role.codebuild_role.arn
artifacts {
type = "S3"
location = aws_s3_bucket.frontend.bucket
packaging = "ZIP"
}
environment {
compute_type = "BUILD_GENERAL1_SMALL"
image = "aws/codebuild/standard:4.0"
type = "LINUX_CONTAINER"
}
source {
type = "CODECOMMIT"
location = aws_codecommit_repository.repo.clone_url_http
buildspec = "buildspec.yml"
}
}
resource "aws_codepipeline" "pipeline" {
name = "lms-pipeline"
role_arn = aws_iam_role.codepipeline_role.arn
artifact_store {
type = "S3"
location = aws_s3_bucket.frontend.bucket
}
stage {
name = "Source"
action {
name = "Source"
category = "Source"
owner = "AWS"
provider = "CodeCommit"
version = "1"
output_artifacts = ["source_output"]
configuration = {
RepositoryName = aws_codecommit_repository.repo.name
BranchName = "main"
}
}
}
stage {
name = "Build"
action {
name = "Build"
category = "Build"
owner = "AWS"
provider = "CodeBuild"
version = "1"
input_artifacts = ["source_output"]
output_artifacts = ["build_output"]
configuration = {
ProjectName = aws_codebuild_project.build.name
}
}
}
stage {
name = "Deploy"
action {
name = "Deploy"
category = "Deploy"
owner = "AWS"
provider = "S3"
version = "1"
input_artifacts = ["build_output"]
configuration = {
BucketName = aws_s3_bucket.frontend.bucket
Extract = "true"
}
}
}
}Here's an example Terraform script to create an S3 bucket and DynamoDB table:
provider "aws" {
region = "us-west-2"
}
resource "aws_s3_bucket" "lms_bucket" {
bucket = "my-lms-app-bucket"
acl = "public-read"
website {
index_document = "index.html"
error_document = "error.html"
}
}
resource "aws_dynamodb_table" "courses" {
name = "courses"
billing_mode = "PAY_PER_REQUEST"
hash_key = "course_id"
attribute {
name = "course_id"
type = "S"
}
attribute {
name = "title"
type = "S"
}
attribute {
name = "instructor_id"
type = "S"
}
tags = {
Name = "courses-table"
Environment = "production"
}
}© 2024 Mun-e. All rights reserved.