Terraformとは?
Terraformはオープンソースであり、HashiCorpによってGo言語で開発されました。具体的にはTerraformではインフラの構成をコードで宣言します。構造化された構成ファイルでは、手動で操作することなくインフラ構成を自動で管理できます。インフラの初期プロビジョニング、更新、破棄、いずれもTerraformではコードにより宣言し、実行します。
AWS の Terraform モジュールは、AWS 統合と自動化ネームスペースページの Terraform レジストリで入手できます。提供されているリンクを使用して、Terraform レジストリのモジュールや GitHub のソースコードにアクセスします。
Terraformビルド順番
①IAMアカウント作成
➁CLIユーザー作成
③Terraformインストール
④DynamoDBとS3作成
⑤Terraform展開
①IAMアカウントを作成する
➁CLIユーザー作成
アクセスタイプはProgramatic accessをチェックする
CLIユーザー作成後権限グループを作成してアクセス権限へ付与する。
Showボタンを押下でAccess key IDとSecret access key ーを取得して、アップデートを行います。
ここまでIAMアカウントとcliユーザーの作成が完了しました。これからTerraformビルドを紹介したいと思います。
AWSでCLIをインストールする
https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html
ローカル環境により適切なOSバージョンを選択の上、インストールを実行する。
CLIインストールが完了したらterminalを開き、「aws configure」コマンドを実行する。
$ aws configure
AWS Access Key ID [None]: [Access Key ID]
AWS Secret Access Key [None]: [Secret Access Key]
Default region name [None]: ap-xxxxx-1
Default output format [None]: json
③Terraformインストール
まずは下記のリンクにてTerraformをインストールする
https://learn.hashicorp.com/tutorials/terraform/install-cli
インストールが完了したら下記のコマンドを実行する
terraform -v
④DynamoDBとS3作成
情報を確認の上、インフラ構成の作成を行います。
Terraformの設定を保存するために、DynamoDBとS3の作成を行い。
Terraformファイルで環境設定を指定する必要があります、下記のように環境を合わせて修正する。
variable "env"{
default="prod"
}
variable "developer"{
default="dev"
}
variable "project_version"{
default="v01"
}
Terraformの必要なモジュールの設定ため、Terminalで下記のコマンドを実行する
terraform init
このメッセージが表示されます。
│ If you wish to attempt automatic migration of the state, use "terraform
│ init -migrate-state".
│ If you wish to store the current configuration with no changes to the
│ state, use "terraform init -reconfigure".
エラーが発生しない場合はAWSに展開するもののバリデーションと成果テストのため、下記のコマンドを実行します。
terraform plan
AWSへ適用ため、applyコマンドを実行します。
terraform apply
⑤Terraform展開
Teraformファイルで作成したdynamodbとs3バケットをコピーする。
teraform{
required_version=">=0.12.0"
backend="S3"{
region ="ap-xxxx-1"
bucket =prod-xxxx-terraform-v01"
dynamodb_table ="prod-xxxx-terraform-state-lock-v01"
key ="./terraform.tfsate"
}
}
更新後Terminalを開いて下記のコマンドを実行する
terraform init
terraform plan (※)
terraform apply
※lock stateエラーが発生する時に、コマンドに -lock=falseを追加してから実行します。
実行が完了したら、下記のイメージで表示されます。
Run terraform success
output updateを上にコピーします
Outputs:
bastion_security_group = "prod-abc-testsite-bastion-sg-20210811125740118500000005"
examinator_cloudfront = "d3pxoqov8cscxi.cloudfront.net"
examinator_domain = "prod-examinator.kh-site_services.net"
examinator_s3_bucket = "prod-examinator.kh-site_services.net"
kh_cloudfront = "d1fvmjxi4u4mf7.cloudfront.net"
kh_domain = "prod-cms-kh.kh-site_service.net"
kh_s3_bucket = "prod-cms-kh.kh-site_service.net"
domain_certificate = "Region: {us-xxx-1}. Cer: *.kh-site_service.net"
abc_ecs_alb = "prod-abc-xxx-alb-1805414999.ap-northeast-1.elb.amazonaws.com"
abc_vpc = "vpc-0788d809b4d578c05"
abc_vpc_security_group = "sg-0da36f8fd568866c1"
abc_vpc_subnet_database = [
"subnet-10a6ea0769944a11a0",
"subnet-209a6bc288ef8cb88c",
"subnet-30d8aa8be98e25b86a",
]
abc_vpc_subnet_private = [
"subnet-10b9fa501f91b3b3c8",
"subnet-10db375eec3d7bf36a",
"subnet-103ec0e4a4d174dce0",
]
abc_vpc_subnet_public = [
"subnet-003adb19f3424eb1adf",
"subnet-003db18f87d41965dd8",
"subnet-00c619164e9187f2287",
]
s3_bucket_name = "prod-abc-xxx-logo-upload"
owner_cloudfront = "d3ghdpxv1nxu3f.cloudfront.net"
owner_domain = "prod-cms-owner.kh-site_service.net"
owner_s3_bucket = "prod-cms-owner.kh-site_service.net"
Teraformビルドが完了しました。
AWSサーバーレスに関して、詳細に関して下記のホームページへ問い合わせください。
Source: https://onetech.jp/