1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Terraformで AWS App Runner + CodeCommit + CodeBuild + CodePipeline のデプロイ環境を構築する

Posted at

#はじめに
本記事では、Terraform で AWS App Runner + CodeCommit + CodeBuild + CodePipeline のデプロイ環境を構築する手順を記載しています。

下記の記事を読ませていただいて、自分も試行してみようと思いたって、この環境を構築してみました。

TerraformでAWS App Runnerを爆速構築してみる

#Terraform で構築する全体構成図
00_terraform_apprunner.png

#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 内の各パラメータを環境に応じて、任意で変更します。(下記のキーはサンプルです。)

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
Dockerfile.file
FROM php:7.4.0-apache
COPY src/ /var/www/html/
./src/index.php
<!DOCTYPE html>
<html lang="ja">
<head>
<title>PHP Sample</title>
  </head>
  <body>
<?php echo "Hello World v1"; ?> </body>

ここでは、CodeBuild 実行用の buildspec.yml を下記のように記載しています。

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 の管理コンソールからデプロイパイプラインが成功していることを確認します。
01_terraform_apprunner.png

ECR の管理コンソールからイメージがプッシュされていることを確認します。
02_terraform_apprunner.png

これで、Docker イメージ構築のパイプラインが実行され、ECR へのアップロードが完了です。

Terraform でAWS App Runner のサービスを構築する

下記コマンドで、App Runnerのサービスの構築用の tfファイルの拡張子を変更します。(tfファイルを有効にします。)

$ mv apprun.tf- apprun.tf

下記コマンドで、App Runnerのサービスを構築します。

$ terraform apply

コマンドを実行後、App Runnerの管理コンソールから、サービスの構築のステータスが in progress となっていることを確認します。
03_terraform_apprunner.png
ステータスが、 Suceeded になったことを確認したら、デフォルトドメインをクリックします。
04_terraform_apprunner.png
下記のようにブラウザで表示されることを確認できれば、App Runneのサービスの構築は完了です。
05_terraform_apprunner.png

これで
コードのCodeCommit へのプッシュ

Dockerイメージの CodeBuild による構築

イメージのECRへのプッシュ

App Runnerへのデプロイ

のパイプラインの構築が完了です。

#後片付け
下記コマンドで、Terraform で作成したAWS環境を削除します。

$ terraform destroy

#さいごに
需要があるか分からないですが、何かの助けになれば幸いです。
AWS App Runner サービスの今後に期待大ですね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?