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と互換性がありません。
AWSCDKのインストール
AWS CDKは、実行前にインフラストラクチャコードをCloudFormationスクリプトに変換します。 AWS CDKには、次のようなAWSサービスごとのAWSコンストラクターのライブラリが含まれています。 AmazonS3バケット、 ラムダ関数、 AmazonDynamoDBテーブル、 等々。
メインのCDKパッケージは aws-cdk-lib
、のような基本クラスが含まれています Stack
と App
ほとんどのCDKアプリケーションで使用されます。
ガイドには、 Python CDKを使用してクラウドリソースをプロビジョニングするためのプログラミング言語として。 開始する前に、クレデンシャルとAWSリージョンをまだ構成していない場合は、ワークステーションを構成してください。
1.ターミナルを開き、以下のコマンドを実行してAWSCLI設定を開始します。
2.入力します AWSアクセスキーID、 シークレットアクセスキー、 と デフォルトのリージョン名。 変更しないでください デフォルトの出力形式 空。
3.次のコマンドを入力して、呼び出し元のIAMユーザーIDを確認します。 この役割は、CDKアプリを作成し、完全にアクセスできる役割になります。
aws sts get-caller-identity

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

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

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

最初の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

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

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

環境のブートストラップ
AWS CDKには、デプロイを実行するためのリソースが必要です。 具体的には、CDKが必要とするリソースは、ストレージ用のS3バケットと、展開を実行するための特定のIAMロールです。 これらの初期リソースをプロビジョニングするプロセスは、 ブートストラップ。
ブートストラップスタック、別名 CDKToolkit、これらすべての必要なリソースが含まれています。 以下の手順に従って、ブートストラップを開始します。
1.以下のコマンドを実行して、ブートストラップスタックを仮想環境にインストールし、プロセスが完了するのを待ちます。 cdk bootstrap
Listing the template directory contents
以下のスクリーンショットのような出力が画面に表示されます。

2.次に、以下のコマンドを実行して、CDKToolkitをAWSにデプロイします。
出力には次のものが含まれます アカウントID、 スタックID、 と 領域 アプリを作成した場所。

3.次に、Webブラウザーを開き、に移動します。 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。

既存のコードを以下のコードに置き換えます。 このコードを簡単に説明するには:
- 輸入
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コンソール、作成してデプロイした関数が表示されます。

AWSCDKサンプルアプリケーションのテスト
これで、アプリケーションをデプロイし、AWSコンソールでその存在を確認しました。 しかし、それは機能しますか? 確認するには、以下の手順に従ってアプリケーションをテストする必要があります。
1.関数名をクリックして、下にスクロールします。 コードソース セクション。
2.をクリックします テスト ボタンのドロップダウン矢印をクリックしてクリックします テストイベントを構成する。
![[テストイベントの構成]オプションを選択します](https://adamtheautomator.com/wp-content/uploads/2022/05/image-219.png)
3.入力します テスト として イベント名、 選択する AmazonAPIゲートウェイAWSプロキシ から イベントテンプレート リストをクリックし、 保存する ボタン。

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

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

結論
AWSCDKツールキットを 大量展開の武器。 AWSCDKサンプルアプリケーションを作成してデプロイしました。 CDKツールキットは、アプリケーションに加えて、アプリケーションに必要なリソースをクラウド形式またはプロビジョニングし、それらを個別に作成する手間を省きます。
他にどのようなAWSCDKの例を試してみたいですか? CDKを使用してアプリケーションをデプロイする場合は、Pythonの使用に限定されないことを忘れないでください。
The post これらのAWSCDKの例をデプロイし、クラウドインフラストラクチャを深く掘り下げます appeared first on Gamingsym Japan.