#はじめに
本記事では、Terraform で AWS App Runner + CodeCommit + CodeBuild + CodePipeline のデプロイ環境を構築する手順を記載しています。
下記の記事を読ませていただいて、自分も試行してみようと思いたって、この環境を構築してみました。
TerraformでAWS App Runnerを爆速構築してみる
#Terraform のコードと構成
$ tree aws-terraform-app-runner-deploy
aws-terraform-app-runner-deploy
├── apprun.tf
├── cloudwatch-event.tf
├── codebuild.tf
├── codecommit.tf
├── codepipeline.tf
├── default-sample-apprun
│ ├── Dockerfile
│ ├── buildspec.yml
│ └── src
│ └── index.php
├── ecr.tf
├── iam-policy
│ ├── apprunner-trust-policy.json
│ ├── cloudwatch-event-policy.json
│ ├── cloudwatch-event-trust-policy.json
│ ├── codebuild-policy.json
│ ├── codebuild-trust-policy.json
│ ├── codepipeline-policy.json
│ └── codepipeline-trust-policy.json
├── iam-role.tf
├── output.tf
├── terraform.tf
├── terraform.tfvars-
└── variables.tf
#事前準備
・Terraform のインストール
・tfenv のインストール
・Terraform を実行するための IAM のアクセスキーとシークレットキー
・CodeCommit への HTTPS 接続用の Git 認証情報
#Terraform の動作確認環境
$ terraform -version
Terraform v0.15.4
on darwin_amd64
+ provider registry.terraform.io/hashicorp/aws v3.42.0
#Terrraform で CodePipeline + CodeCommit + CodeBuild の環境を構築する
本手順は、Mac環境で実施することを想定しています。
Terraformのコードをダウンロードします。
$ git clone https://github.com/okubo-t/aws-terraform-app-runner-deploy.git
Terraform のコードがあるディレクトへ移動します。
$ cd aws-terraform-app-runner-deploy/
terraform.tfvars ファイルを作成します。
$ cp -p terraform.tfvars- terraform.tfvars
作成した terraform.tfvars 内の各パラメータを環境に応じて、任意で変更します。(下記のキーはサンプルです。)
# アクセスキー
aws_access_key = "AKIAIOSFODNN7EXAMPLE"
# シークレットキー
aws_secret_key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
# リージョン
aws_region = "ap-northeast-1"
# Docker ファイルを Push する Codecommit のリポジトリ名
repo_name = "sample-apprun"
# Codecommit のリポジトリの説明
repo_description = "App for App Runner"
# AWS App Runner のサービス名
service_name = "sample-apprun"
下記コマンドで、Terraform の初期設定をします。
$ terraform init
下記コマンドで、環境のデプロイを実行します。
$ terraform apply
デプロイ後に出力される Outputsの内容をメモします。(下記の値は例です。)
Apply complete! Resources: 19 added, 0 changed, 0 destroyed.
Outputs:
codecommit_repository = "https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/sample-apprun"
ecr_repository = "123456789.dkr.ecr.ap-northeast-1.amazonaws.com/sample-apprun"
下記コマンドで、構築されたAWS環境のコンポーネントを確認できます。
$ terraform state list
これで、CodePipeline + CodeCommit + Codebuild の環境の構築が完了です。
Docker イメージ構築用のパイプラインの実行
下記コマンドを実行して、CodeCommit のリポジトリをクローンします。(メモしたOutputsの codecommit_repository の値を参照します。)
$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/sample-apprun
クローンしたリポジトリに、構築したい Docker イメージのファイル群を作成します。
(※ここで記載している手順では、Terraform のコード内のディレクトリ(default-sample-app)のDocker ファイル群を使用しています。)
$ tree default-sample-apprun
sample-apprun
├── Dockerfile
├── buildspec.yml
└── src
└── index.php
1 directory, 3 files
FROM php:7.4.0-apache
COPY src/ /var/www/html/
<!DOCTYPE html>
<html lang="ja">
<head>
<title>PHP Sample</title>
</head>
<body>
<?php echo "Hello World v1"; ?> </body>
ここでは、CodeBuild 実行用の buildspec.yml を下記のように記載しています。
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- aws --version
- echo $AWS_DEFAULT_REGION
- $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
- REPOSITORY_URI=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME
- COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
- IMAGE_TAG=${COMMIT_HASH:=latest}
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build -t $REPOSITORY_URI:latest .
- docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
commands:
- echo Build completed on `date`
- docker push $REPOSITORY_URI:latest
- docker push $REPOSITORY_URI:$IMAGE_TAG
CodeCommit のリポジトリに にDocker ファイル群をプッシュします。
$ git push
CodePipeline の管理コンソールからデプロイパイプラインが成功していることを確認します。
ECR の管理コンソールからイメージがプッシュされていることを確認します。
これで、Docker イメージ構築のパイプラインが実行され、ECR へのアップロードが完了です。
Terraform でAWS App Runner のサービスを構築する
下記コマンドで、App Runnerのサービスの構築用の tfファイルの拡張子を変更します。(tfファイルを有効にします。)
$ mv apprun.tf- apprun.tf
下記コマンドで、App Runnerのサービスを構築します。
$ terraform apply
コマンドを実行後、App Runnerの管理コンソールから、サービスの構築のステータスが in progress となっていることを確認します。
ステータスが、 Suceeded になったことを確認したら、デフォルトドメインをクリックします。
下記のようにブラウザで表示されることを確認できれば、App Runneのサービスの構築は完了です。
これで
コードのCodeCommit へのプッシュ
↓
Dockerイメージの CodeBuild による構築
↓
イメージのECRへのプッシュ
↓
App Runnerへのデプロイ
のパイプラインの構築が完了です。
#後片付け
下記コマンドで、Terraform で作成したAWS環境を削除します。
$ terraform destroy
#さいごに
需要があるか分からないですが、何かの助けになれば幸いです。
AWS App Runner サービスの今後に期待大ですね。