terraform - AdedeAppunnerでnodejsアプリケーションを展開する


本稿では、どのようにNodeJSアプリケーションを展開するかについて話します.

AWSのアプリランナーは、開発者が迅速にコンテナのWebアプリケーションとAPIを展開し、スケールで、事前のインフラストラクチャの経験が必要になります完全に管理サービスです.ソースコードまたはコンテナイメージで起動します.アプリケーションランナーが自動的に構築し、Webアプリケーションを展開し、暗号化とトラフィックの負荷を負担します.アプリランナーもスケールアップまたはダウントラフィックのニーズを満たすために自動的に.アプリランナーではなく、サーバーやスケーリングについて考えるよりも、あなたのアプリケーションに集中するより多くの時間があります.

必要条件

  • AWS IAM APIキー(アクセスキーと秘密キー)を必要とし、すべてのAWSリソースのアクセス許可を作成および削除します.
  • githubアカウントと新しいリポジトリ.
  • terraformは、マシンにインストールする必要があります.terraformが存在しない場合は、ここからダウンロードしてインストールできます.
  • デモNodeJSアプリケーションを準備する


    デモディレクトリという名前のプロジェクトディレクトリをシステム内に作成し、現在のディレクトリにします.
    mkdir demo-application
    cd demo-application
    
    デモアプリケーションディレクトリ内のノードを初期化するには、次のコマンドを実行します.デフォルト設定のJSプロジェクト
    npm init -y
    

    ノードでエクスプレスを設定します。js


    Expressフレームワークをアプリケーションで使用するには、プロジェクト依存性としてインストールします.
    npm i express
    
    パッケージの後.Jsonは以下のようになります
    {
      "name": "demo-application",
      "version": "1.0.0",
      "description": "demo-application",
      "main": "index.js",
      "scripts": {
        "start": "node index.js",
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [
        "express",
        "hello-world"
      ],
      "author": "Prashant_B",
      "license": "MIT",
      "dependencies": {
        "express": "^4.15.0"
      }
    }
    
    次に、アプリケーションのエントリポイントを作成します.js
    touch index.js
    
    インデックスに次のコードを追加します.jsファイル.
    var express = require('express')
    var app = express() 
    app.get('/', function (req, res) {
      res.send('Hello World!')
    }) 
    app.listen(3000, function () {
      console.log('Listening on port 3000...')
    })
    
    このアプリは、サーバーを起動し、接続のポート3000を聞きます.アプリは“こんにちは世界!”ルートURL (/)またはルートへのリクエストに対して.他のすべてのパスについては、404が見つかりません.
    私たちのデモのアプリケーションは、現在Goto Gituub、新しいリポジトリを作成し、Githubリポジトリにアプリケーションのソースコードをプッシュ準備ができました.
    地形に移りましょう
    バージョン
    AWSアプリランナーをビルドするには、次のバージョンを満たす必要があります.
  • terraform v 012以上の
  • AWSプロバイダーの
  • 最新版(3.42.0)
    テララーAWSプロバイダー
  • のアプリランナーの設定
    今回は、次のバージョンで構築しました.
    $ terraform version
    Terraform v1.0.0
    on linux_amd64
    
    地形を使って作成されるアマゾン資源
    terraformモジュールは、単一のディレクトリ内の地形形式ファイルの集合です.一つ以上のディレクトリからなる単純な構成であっても.tfファイルはモジュールです.このディレクトリから直接terraformコマンドを実行すると、ルートモジュールと見なされます
  • IAMモジュール
  • IAM役割と方針
  • のアプリプナーモジュール
  • 自動スケーリング設定
  • AWS Apprunnerサービス
  • AWS Apprunner Gitthub接続
  • アプリケーションランナーに付与するIAMの役割を作成します
    次のコードを作成するAAMの役割とポリシーをビルドAWSのアプリケーションランナーサービス.
    キーbuild.apprunner.amazonaws.comは、前提となるサービスが指定されるサービスを指定するためにtasks.apprunner.amazonaws.comである.
    その後、AWSはアプリランナーのためのポリシーを準備しているので、IAMの役割にそれを添付してください.
    resource "aws_iam_role" "role" {
       name = "test-role"
       assume_role_policy = <<EOF 
    {
       "Version": "2012-10-17",
       "Statement": [
         {
           "Action": "sts:AssumeRole",
           "Principal": {
             "Service": [
               "build.apprunner.amazonaws.com",
               "tasks.apprunner.amazonaws.com"
             ]
           },
           "Effect": "Allow",
           "Sid": ""
         }
       ]
     } EOF 
    }
    resource "aws_iam_role_policy_attachment" "test-attach" {
       role       = aws_iam_role.role.name
       policy_arn = "arn:aws:iam::aws:policy/service-role/AWSAppRunnerServicePolicyForECRAccess"
     }
    

    アプリランナー


    最後に、TraraFormでアプリケーションランナーリソースを作成します.
    いくつかのアプリケーションランナー関連のリソースがありますが、彼らは実際にアプリケーションランナーAWSUNE APPRUNNERRANサービスを作成するための主要なリソースです.
    ソース設定
    我々は2つの方法は、アプリケーションランナーをECRリポジトリを展開する必要があります.
  • は、ECRプライベートリポジトリでアプリランナーを展開
  • は、ECRパブリックリポジトリでアプリランナーを展開
  • アプリケーションランナーを配備する


    resource "aws_apprunner_auto_scaling_configuration_version" "ngnix-apprunner-autoscaling" {
      auto_scaling_configuration_name = "demo_auto_scalling"
      max_concurrency = 100
      max_size        = 5
      min_size        = 1
    
      tags = {
        Name = "demo_auto_scalling"
      }
    }
    
    resource "aws_apprunner_service" "ngnix-apprunner-service-ecr" {
      service_name = "demo_apprunner"
    
      source_configuration {
        image_repository {
          image_configuration {
            port = "80"
          }
          image_identifier      = "XXXXX.dkr.ecr.us-east-2.amazonaws.com/nginx-web:latest"
          image_repository_type = "ECR"
        }
        authentication_configuration{
          access_role_arn = aws_iam_role.role.arn
        }
        auto_deployments_enabled = true
      }
    
      auto_scaling_configuration_arn = aws_apprunner_auto_scaling_configuration_version.ngnix-apprunner-autoscaling.arn
    
      health_check_configuration {
              healthy_threshold   = 1
              interval            = 10
              path                = "/"
              protocol            = "TCP"
              timeout             = 5
              unhealthy_threshold = 5
            }
    
      tags = {
        Name = "demo_apprunner"
      }
    }
    

    アプリケーションのランナーを展開する


    Note: In this approach we don't need IAM role.


    resource "aws_apprunner_auto_scaling_configuration_version" "ngnix-apprunner-autoscaling" {
      auto_scaling_configuration_name = "demo_auto_scalling"
      max_concurrency = 100
      max_size        = 5
      min_size        = 1
    
      tags = {
        Name = "demo_auto_scalling"
      }
    }
    
    resource "aws_apprunner_service" "ngnix-apprunner-service-ecr-public" {
      service_name = "demo_apprunner"
    
      source_configuration {
        image_repository {
          image_configuration {
            port = var.port
          }
          image_identifier      = "public.ecr.aws/nginx/nginx:latest"
          image_repository_type = "ECR_PUBLIC"
        }
        auto_deployments_enabled = false
      }
    
      auto_scaling_configuration_arn = aws_apprunner_auto_scaling_configuration_version.ngnix-apprunner-autoscaling.arn
    
      health_check_configuration {
              healthy_threshold   = 1
              interval            = 10
              path                = "/"
              protocol            = "TCP"
              timeout             = 5
              unhealthy_threshold = 5
            }
    
      tags = {
        Name = "demo_apprunner"
      }
    }
    

    アプリケーションランナーのアプリケーションを作成したのURLをチェック


    アプリケーションコマンドの実行結果として作成したアプリケーションランナーのURLを確認したいので、outputを設定します.
    output "app_runner_url" {
      value = aws_apprunner_service.example.service_url
    }
    
    その後、次のコマンドを実行します.

    terraform init
    terraform plan
    terraform apply


    実行を完了するには2〜3分かかります.
    実行が完了すると、以下のようにURLが表示されます.
    app_runner_url = "xxxxx.us-east-2.awsapprunner.com/"
    
    あなたが応答を送信したり、メモを追加してくださいするために何かを持っている場合は、読んでいただきありがとうございます!