もっと詳しく

AWSなどのクラウドへのアプリケーションのデプロイは、手動または自動化ツールを介して行うことができます。 ほんの一握りのクラウドリソースで基本的なアプリケーションを使用していると仮定します。 手動展開は管理可能である可能性があります。 しかし、複雑さが増すにつれて、手動展開はもはや実用的ではなくなります。 そのような場合、 AWSクラウド開発キット(CDK) 命の恩人になります。 この記事では、AWSCDKの例をいくつか学びます。

AWS CDKは、クラウドを定義するためのオープンソース開発フレームワークです コードとしてのインフラストラクチャ(IaC)。 CDKを使用すると、JavaやPythonなどの最新のプログラミング言語でコーディングしてAWSインフラストラクチャを自動化できます。

このチュートリアルに従うことで、プロジェクトの初期化から結果のAWSのデプロイまで、基本的なAWSCDKアプリを作成してデプロイする方法を学びます。 CloudFormation レンプレート。 アプリには、1つのリソースを含む1つのスタックが含まれます。 Amazon API Gateway を呼び出すには ラムダ関数

前提条件

このハンズオンチュートリアルに従うには、次の要件があることを確認してください。

  • AWSアカウント。 A 無料利用枠 アカウントで十分です。
  • WindowsまたはLinuxコンピューター。 このチュートリアルでは、Windows10PCを使用します。
  • お使いのコンピュータは、フォローするために次のソフトウェアを持っている必要があります。

Node.jsバージョン13.0.0から13.6.0は、依存関係との互換性の問題のため、AWSCDKと互換性がありません。

    • ギット、ここで使用されるバージョンは2.36.0です。
    • 最新の AWSCLI バージョン、ここでは2.6.2が使用されます。
    • Python バージョン3.10.4が使用されます(最小3.6)。

AWSCDKのインストール

AWS CDKは、実行前にインフラストラクチャコードをCloudFormationスクリプトに変換します。 AWS CDKには、次のようなAWSサービスごとのAWSコンストラクターのライブラリが含まれています。 AmazonS3バケットラムダ関数AmazonDynamoDBテーブル、 等々。

メインのCDKパッケージは aws-cdk-lib、のような基本クラスが含まれています StackApp ほとんどのCDKアプリケーションで使用されます。

ガイドには、 Python CDKを使用してクラウドリソースをプロビジョニングするためのプログラミング言語として。 開始する前に、クレデンシャルとAWSリージョンをまだ構成していない場合は、ワークステーションを構成してください。

1.ターミナルを開き、以下のコマンドを実行してAWSCLI設定を開始します。

2.入力します AWSアクセスキーIDシークレットアクセスキー、 と デフォルトのリージョン名。 変更しないでください デフォルトの出力形式 空。

3.次のコマンドを入力して、呼び出し元のIAMユーザーIDを確認します。 この役割は、CDKアプリを作成し、完全にアクセスできる役割になります。

aws sts get-caller-identity
AWSプロファイルIDの確認
AWSプロファイルIDの確認

4.次に、AWS CDK CLIをインストールします(aws-cdk)ノードパッケージマネージャーを実行して、コンピューター上で(npm) 指図。

AWSCDKCLIのインストール
AWSCDKCLIのインストール

5.ターミナルを再起動し、インストールしたAWSCDKのバージョンを確認します。 この記事の執筆時点では、最新のCDKバージョンは2.23.0(ビルド50444aa)です。

  CDKバージョンの確認
CDKバージョンの確認

6.最後に、次のコマンドを実行して、 aws-cdk-lib モジュール。ほとんどのCDKアプリケーションの基本クラスが含まれています。

python -m pip install aws-cdk-lib

インストールが完了するのを待ちます。

AWSCDKのインストール
AWSCDKのインストール

最初のAWSCDKサンプルアプリケーションの作成

AWSCDKの2つのコアコンセプトは次のとおりです。 スタックコンストラクトスタック AWSCDKでデプロイ可能な最小のユニットです。 スタックで定義されたリソースは、単一のユニットであると見なされます。 これらのスタックには、AWSリソースをカプセル化して再利用可能なクラウドコンポーネントを作成する構造が含まれています。

たとえば、リソースは s3.Bucket これはAmazonS3バケットを表しますまたは sqs.Queue これはAmazonSQSキューを表します。

これで、AWS CDK CLIとそのPythonモジュールが正常にインストールされました。次のステップは、新しいCDKプロジェクトを作成することです。

1.空のディレクトリを作成し、呼び出します cdk init AWSCDKプロジェクトを作成します。 アクセスできる場所であればどこでもプロジェクトディレクトリを作成できます。 この例では、ディレクトリはユーザーのデスクトップにあります。

# Create an empty directory for the project
mkdir cdk_py_project && cd cdk_py_project

# Create the CDK project and set Python as its language
cdk init app --language python
CDKプロジェクトの作成
CDKプロジェクトの作成

2. cdk init コマンドで作成されたファイルとディレクトリ構造。 コマンドはまた作成しました 仮想環境 Pythonを実行し、パッケージとAWSCDKコアの依存関係をインストールします。

仮想環境をアクティブ化するには、以下のコマンドを実行します。

.venvScriptsactivate.bat

以下に示すように、これで仮想環境に入りました。 プロンプトが(.venv)プレフィックス。

仮想環境のアクティブ化
仮想環境のアクティブ化

3.次に、以下のコマンドを実行してCDKプロジェクト要件をインストールし、インストールを完了します。

python -m pip install -r requirements.txt
必要な人をインストールする
要件のインストール

4.要件のインストール後、ディレクトリの内容を一覧表示して、ファイルとフォルダを表示します。

以下のような出力が表示されます。 使用するフォルダは cdk_py_project。 ザ app.py fileは、作成するスタックのインスタンスをインスタンス化します。

プロジェクトディレクトリの内容を一覧表示する
プロジェクトディレクトリの内容を一覧表示する

5.最後に、次のコマンドを使用してアプリのスタックを一覧表示し、すべてが正しく機能していることを確認します。

この時点で、スタックは1つだけ表示されます。

アプリケーションからのAWSCloudFormationテンプレートの合成

スタックへのリソースの定義が完了しました。 次に、合成と呼ばれるプロセスを使用して、これらのリソースをAWSCloudFormationテンプレートに変換する必要があります。

以下のコマンドを実行して、CDKアプリをCloudFormationテンプレートに合成します。 このプロセスは、完了するまでに数秒から数分かかる場合があります。

アプリに複数のスタックが含まれている場合は、コマンドにスタック名を追加して、合成するスタックを指定する必要があります。 例えば、cdk synth <stack name>

コマンドが終了すると、以下のスクリーンショットのような同様の出力が表示されます。

AWSCloudFormationテンプレートの合成
AWSCloudFormationテンプレートの合成

このコマンドは、テンプレートをというJSONドキュメントに保存します。 <stack name>.template.jsoncdk.out ディレクトリ。 確認するには、そのようにディレクトリの内容をリストします。

テンプレートディレクトリの内容を一覧表示する
テンプレートディレクトリの内容を一覧表示する

環境のブートストラップ

AWS CDKには、デプロイを実行するためのリソースが必要です。 具体的には、CDKが必要とするリソースは、ストレージ用のS3バケットと、展開を実行するための特定のIAMロールです。 これらの初期リソースをプロビジョニングするプロセスは、 ブートストラップ

ブートストラップスタック、別名 CDKToolkit、これらすべての必要なリソースが含まれています。 以下の手順に従って、ブートストラップを開始します。

1.以下のコマンドを実行して、ブートストラップスタックを仮想環境にインストールし、プロセスが完了するのを待ちます。 cdk bootstrap

Listing the template directory contents

以下のスクリーンショットのような出力が画面に表示されます。

環境のブートストラップ
環境のブートストラップ

2.次に、以下のコマンドを実行して、CDKToolkitをAWSにデプロイします。

出力には次のものが含まれます アカウントIDスタックID、領域 アプリを作成した場所。

CDKスタックのデプロイ
CDKスタックのデプロイ

3.次に、Webブラウザーを開き、に移動します。 AWSCloudFormationコンソール。 あなたが正しい地域にいることを確認してください。 これで、デプロイしたスタックが表示されます。

AWSCloudFormationコンソール
AWSCloudFormationコンソール

アプリケーションコードの更新

AWS CDKスタックをデプロイしましたが、まだコードを追加していないため、アプリケーションは何もしません。 アプリを使用するには、アプリで実行するコードを追加する必要があります。

多くありますが AWSCDKの例 試すことができるものが存在しますが、独自のAWSCDKサンプルアプリケーションを最初から作成することに勝るものはありません。 このセクションでは、インフラストラクチャを処理し、アプリケーションのイベントを処理するLambda関数を作成します。

簡単にするために、HTTPステータスコードとHTTPヘッダーを含む現在の日付と時刻を返す関数を作成します。

1.まず、コードエディタでプロジェクトディレクトリを開きます。 この例では、エディターとしてVisualStudioCodeを使用しています。 # Open the current directory in VSCode code .

# Open the current directory in VSCode
code .

2.次に、というディレクトリを作成します ラムダ プロジェクトのルートにあります。 そして、 ラムダ フォルダ、という名前の新しいファイルを作成します time_.py

新しいフォルダとファイルを作成する
新しいフォルダとファイルを作成する

3.以下の機能コードをコピーして、 time_.py ファイル。 このコードは、現在の日付と時刻を返します。 コードを追加した後、ファイルを保存します。

import json

import datetime


def handler(event, context):

    current_time = datetime.datetime.now()

    body = {

        "message": "Hello, the current date and time is " + str(current_time)

    }

    response = {

        "statusCode": 200,
        "headers": {
            'Content-Type': 'text/plain'
        },

        "body": json.dumps(body)

    }

    return response

4.ここで、開きます cdk_py_project/cdk_py_project_stack.py。

cdk_py_project_stack.pyファイルを開きます
を開きます cdk_py_project_stack.pyファイル

既存のコードを以下のコードに置き換えます。 このコードを簡単に説明するには:

  • 輸入 aws_lambda モジュールとして _lambda (アンダースコアに注意してください) lambda Pythonに組み込まれている識別子です。
  • この関数はPython3.9ランタイムを使用します。
  • time_.handler app.pyの関数ハンドラーを参照します。
from aws_cdk import (
    # Duration,
    Stack,
    # aws_sqs as sqs,
    aws_lambda as _lambda,
)
from constructs import Construct


class CdkPyProjectStack(Stack):

    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # Defines an AWS Lambda resource
        my_lambda = _lambda.Function(
            self, 'TimeHandler',
            runtime=_lambda.Runtime.PYTHON_3_9,
            code=_lambda.Code.from_asset('lambda'),
            handler="time_.handler",
        )

を助けて cdk_py_project_stack.py 編集後のファイル。

5.変更したアプリケーションをデプロイする前に、以下のコマンドを実行して変更を確認します。 cdk diff

以下の結果に基づいて、コードは AWS :: Lambda :: Function リソースといくつかの CloudFormationパラメーター ツールキットがハンドラーコードの場所を伝播するために使用します。

展開前に変更を確認する
展開前に変更を確認する

AWSCDKサンプルアプリケーションをデプロイする

最後に、アプリケーションをデプロイできます。 この例では、アプリケーションをデプロイすると、コマンドは ラムダ ディスクからブートストラップバケットに直接ディレクトリ。

以下のコマンドを実行して、AWSCDKサンプルアプリケーションをデプロイします。

Yを押して展開を確認します。

アプリケーションのデプロイ
アプリケーションのデプロイ

Webブラウザーを使用して、 AWSLambdaコンソール、作成してデプロイした関数が表示されます。

AWSコンソールでのLambdaイベントハンドラー関数の表示
AWSコンソールでのLambdaイベントハンドラー関数の表示

AWSCDKサンプルアプリケーションのテスト

これで、アプリケーションをデプロイし、AWSコンソールでその存在を確認しました。 しかし、それは機能しますか? 確認するには、以下の手順に従ってアプリケーションをテストする必要があります。

1.関数名をクリックして、下にスクロールします。 コードソース セクション。

2.をクリックします テスト ボタンのドロップダウン矢印をクリックしてクリックします テストイベントを構成する

[テストイベントの構成]オプションを選択します
[テストイベントの構成]オプションを選択します

3.入力します テスト として イベント名、 選択する AmazonAPIゲートウェイAWSプロキシ から イベントテンプレート リストをクリックし、 保存する ボタン。

必要なパラメータを設定する
必要なパラメータを設定する

4.次に、をクリックします。 テスト もう一度ボタンを押して、実行が完了するのを待ちます。 以下に示すように、関数は機能し、現在の日付と時刻を返しました。

AWSCDKサンプルアプリケーションのテスト
AWSCDKサンプルアプリケーションのテスト

清掃

ある時点でアプリケーションが不要になった場合は、スタックを破棄する必要があります。 スタックを破棄するということは、ブートストラップによって作成されたすべてのリソースとともにアプリケーションを削除することを意味します。

スタックを破棄するには、次のコマンドを実行します。確認プロンプトでYを押します。

スタックを破壊する
スタックを破壊する

結論

AWSCDKツールキットを 大量展開の武器。 AWSCDKサンプルアプリケーションを作成してデプロイしました。 CDKツールキットは、アプリケーションに加えて、アプリケーションに必要なリソースをクラウド形式またはプロビジョニングし、それらを個別に作成する手間を省きます。

他にどのようなAWSCDKの例を試してみたいですか? CDKを使用してアプリケーションをデプロイする場合は、Pythonの使用に限定されないことを忘れないでください。

The post これらのAWSCDKの例をデプロイし、クラウドインフラストラクチャを深く掘り下げます appeared first on Gamingsym Japan.