AWS入門:Terraformを利用したECR環境の構築

スポンサーリンク
AWS入門:Terraformを利用したECR環境の構築 環境構築
AWS入門:Terraformを利用したECR環境の構築
この記事は約11分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、Terrafromを利用したECR環境の構築についてご紹介します。

スポンサーリンク

前提

構築するECR環境は下記のサイトをベースにしています。

背景

ECS環境を構築する機会がありましたので、上記のサイトを参考にTerraformで構築してみました。ECS環境を構築するにあたり、ECRの作成が必要だったので、この記事ではECR環境の構築をご紹介しています。次回以降に、ECS環境の構築をご紹介したいと思います。

作業ディレクトリの作成

下記のコマンドで作業ディレクトリを作成します。

mkdir 20_learn_terraform-aws-ecr
cd 20_learn_terraform-aws-ecr

使用するコマンドのバージョン指定

下記のコマンドを実行します。

asdf local terraform 1.5.3
asdf local awscli 2.13.2

もし、指定のバージョンがインストールされていなければ、下記の手順でインストールできます。

# terraform
asdf install terraform 1.5.4

# awscli
asdf install awscli 2.13.7

詳しくは下記のサイトをご覧ください。

下記のコマンドで指定のバージョンが利用できることを確認します。

% terraform --version
Terraform v1.5.4
on darwin_arm64

% aws --version   
aws-cli/2.13.7 Python/3.11.4 Darwin/22.5.0 exe/x86_64 prompt/off

ファイル作成

下記のファイルを新規作成します。

        new file:   main.tf
        new file:   output.tf
        new file:   variables.tf
        new file:   ecr/ecr.tf
        new file:   ecr/output.tf
        new file:   ecr/variables.tf

main.tf

下記の内容で新規作成します。

terraform {

  cloud {
    organization = "(自身の組織名を入力)"
    workspaces {
      name = "learn-aws-ecr"
    }
  }

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.16"
    }
  }

  required_version = ">= 1.2.0"
}

provider "aws" {
  region = "ap-northeast-1"
}

# ECR
module "ecr" {
  source = "./ecr"

  name_prefix = var.name_prefix
  region      = var.region
  tag_name    = var.tag_name
  tag_group   = var.tag_group
}

output.tf

下記の内容で新規作成します。

# ECRのURL
output "ecr_url" {
  value = module.ecr.repository_url
}

variables.tf

下記の内容で新規作成します。

variable "region" {
  default = "ap-northeast-1"
}

variable "name_prefix" {
  default = "lae"
}

variable "tag_name" {
  default = "learn-aws-ecr"
}

variable "tag_group" {
  default = "learn-aws-ecr"
}

ecr/ecr.tf

下記の内容で新規作成します。

resource "aws_ecr_repository" "learn_aws_ecr" {
  name         = "learn_aws_ecr"
  force_delete = true
}

ecr/output.tf

下記の内容で新規作成します。

output "repository_url" {
  value = aws_ecr_repository.learn_aws_ecr.repository_url
}

ecr/variables.tf

下記の内容で新規作成します。

variable "name_prefix" {}
variable "region"      {}
variable "tag_name"    {}
variable "tag_group"   {}

ECR作成

下記のコマンドを実行します。

terraform login

Yesで確認し、自動的に開くブラウザウィンドウでワークフローに従います。プロンプトが表示されたら、生成された API キーを Terminal に貼り付ける必要があります。

TerraformCloudで初めてワークスペースを利用する場合は、下記の環境変数を設定する必要があります。

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

詳しくは下記のサイトをご覧ください。

下記のコマンドを実行します。

# プロジェクトの初期化
terraform init

# フォーマット
terraform fmt

# バリデーション
terraform validate

# 作成内容の確認
terraform plan

ここまで特に問題なければ、下記のコマンドを実行します。

# AWSリソースの作成
terraform apply

下記のような出力なっていれば成功です。

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:
ecr_url = "xxx.dkr.ecr.ap-northeast-1.amazonaws.com/learn_aws_ecr"

解説

main.tf

このTerraformコードは、AWSのECR(Elastic Container Registry)リソースを管理するための設定を含んでいます。ECRは、コンテナイメージを保存、管理、配布するための完全に管理型のDockerコンテナレジストリです。

コード全体の構造と目的を要約すると、以下のようになります。

  1. terraform ブロック: Terraformの設定を開始します。このブロック内では、Terraformのバージョンやプロバイダ、クラウド組織などの設定が行われます。
    • cloud ブロック: Terraform Cloudの組織情報を指定します。組織名とワークスペース名が定義されています。
    • required_providers ブロック: 使用するプロバイダの情報を指定します。ここでは、aws プロバイダを使うことを宣言し、バージョンを指定しています。
    • required_version: Terraformの最低バージョン要件を指定しています。
  2. provider "aws" ブロック: AWSプロバイダの設定を行います。ここでは、リージョンを “ap-northeast-1″(東京リージョン)に設定しています。
  3. module "ecr" ブロック: 別のTerraformモジュールである “ecr” モジュールを利用して、ECRリソースの設定を行います。
    • source: 使用するモジュールのソースパスを指定します。ここでは、カレントディレクトリの “ecr” ディレクトリにあるモジュールを使用しています。
    • モジュールの変数への引き渡し: name_prefixregiontag_nametag_group という4つの変数を使って、モジュール内のリソース設定に値を渡しています。これにより、ECRリソースの詳細な設定を外部で指定できるようになります。

このコードの目的は、ECRリソースを管理するための基本的な設定を提供することです。モジュール内の具体的なリソース設定やロジックは、モジュール自体の定義で行われています。このコードを実行することで、指定されたECRリソースがTerraformで作成・管理されることになります。var.name_prefixvar.regionvar.tag_namevar.tag_group といった変数がどのように定義されているかによって、動作を変更することができます。

ecr/ecr.tf

このTerraformコードは、AWSのECR(Elastic Container Registry)リソースを作成するための設定を含んでいます。ECRは、コンテナイメージを保存、管理、配布するための完全に管理型のDockerコンテナレジストリです。

コードの内容を解説すると以下の通りです:

  1. resource "aws_ecr_repository" "learn_aws_ecr" ブロック: これはTerraformによって管理されるECRリソースを定義しています。
    • name: ECRリポジトリの名前を指定します。ここでは “learn_aws_ecr” という名前を設定しています。
    • force_delete: このオプションを true に設定することで、Terraformがリソースを削除する際に強制的に削除するよう指示しています。ECRリポジトリは通常、イメージが存在する場合には削除ができないため、このオプションを有効にすることで削除時にイメージがあってもリポジトリを削除できるようになります。

このコードを実行すると、指定された名前のECRリポジトリが作成されます。このリポジトリは、コンテナイメージを保存し、Dockerコンテナイメージをプッシュおよびプルするための場所として機能します。また、force_delete オプションが true に設定されているため、リソースを削除する際にイメージが存在していても、リポジトリは削除されるでしょう。

ECRとは

AWS ECR(Elastic Container Registry)は、Amazon Web Services(AWS)が提供する完全に管理されたDockerコンテナレジストリです。Dockerコンテナイメージを保存、管理、配布するためのプライベートなレジストリを提供するサービスです。以下にECRの主な特徴と利点を説明します。

  1. プライベートなコンテナレジストリ: ECRはプライベートなコンテナレジストリとして機能します。これにより、セキュリティ上の懸念やコンプライアンス要件を満たしながら、コンテナイメージを保存できます。
  2. 完全に管理されたサービス: ECRはAWSによって管理されており、スケーリング、バックアップ、アップデートなどの面倒な管理タスクを気にすることなく利用できます。
  3. 高い可用性と信頼性: ECRはAWSのインフラストラクチャに基づいており、高い可用性と信頼性を提供します。コンテナイメージは複数のアベイラビリティーゾーンに分散して保存されます。
  4. 統合セキュリティ: ECRはAWS Identity and Access Management(IAM)と連携しており、コンテナイメージへのアクセスを厳密に制御できます。また、イメージの署名や暗号化などのセキュリティ機能も提供されます。
  5. 高速なイメージプッシュとプル: ECRは高速で低遅延のネットワークを利用しており、コンテナイメージのプッシュとプルが効率的に行えます。
  6. Docker CLIとの統合: ECRはDocker CLIとシームレスに統合されています。これにより、既存のDockerツールやワークフローを維持しながら、ECRを利用できます。
  7. バージョン管理とイメージタグ: ECRはイメージのバージョン管理をサポートし、異なるバージョンのコンテナイメージをタグ付けして管理できます。これにより、開発およびデプロイメントのコントロールが向上します。

ECRを使用することで、コンテナベースのアプリケーションを効果的に管理し、配布することができます。Dockerコンテナイメージのセキュリティ、可用性、管理を強化するための重要なツールとなっています。

おわりに

今日は、Terrafromを利用したECR環境の構築についてご紹介しました。

本記事でご紹介したソースは、下記のリポジトリにあります。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました