AWS CDK 超入門編 アプリケーションをデプロイしよう

10522 ワード

あいさつ

こんにちは。Webエンジニアのノッパクンです。

本記事ではCDKでアプリケーションをデプロイする方法について学んでいきます。
一度CDKの味を知ってしまうと、もうCloudFormationのtemplate.yaml管理には戻れないと思います!

ササッとお試しできるので、ぜひ最後までお付き合いください。

CDKとは?

AWSのリソースをソースコードで定義して管理する事ができる技術です。いわゆるIaCと呼ばれる領域になります。

馴染みの言語(TypeScriptやPythonなど)で記述できたり、ファイルの分割が可能だったり、リソースを抽象化して独自のコンポーネントを作成できたりと、メリットは多々あります。

なにより、触っていて楽しく、エンジニアフレンドリーです!

本記事で作成するもの

CDKでアプリケーションをデプロイする事がゴールです。
アプリケーションはLambdaがあるだけのシンプルな構成となります。

イメージ

前提

構築にあたり、以下のものを先にインストールしてください。※バージョンは参考程度に

node(npm)

$ node --version
v16.14.2

$ npm --version
8.5.0

aws-cli

$ aws --version
aws-cli/2.2.10 Python/3.8.8 Windows/10 exe/AMD64 prompt/off

cdk

$ cdk --version
2.21.0 (build 3f74a81)

おおまかな構築の流れ

  1. IAMユーザー作成
  2. 資格情報の設定
  3. CDKプロジェクト作成
  4. アプリケーションスタック作成
  5. デプロイ

それでは、構築していきましょう!

1. IAMユーザー作成

まずはじめに、aws-cliコマンドやCDKコマンドなどを実行する際に必要となるIAMユーザーを作成します。IAMユーザー作成直後に認証情報が記載されたcsvをダウンロードできます。後述の手順で必要となるためダウンロードして無くさないようにしましょう!

設定1

  • ユーザー名
    ここでは「my-cdk」と設定します。
  • アクセスキー - プログラムによるアクセス
    CDKコマンドなどを実施するために必要となります。
  • パスワード - AWS マネジメントコンソールへのアクセス
    本記事では必要ないためチェックは外してください。

設定2

  • 既存のポリシーを直接アタッチ
    AdministratorAccessをアタッチしてください。

2. 資格情報の設定

次に、作成したIAMユーザーをaws-cliコマンド、cdkコマンドで使用できるように設定していきます。aws configureコマンドでプロフィールと呼ばれるものを作成しましょう。

aws configureコマンド

プロフィール作成時にアクセスキー等の入力が求められるので、先ほどの手順でダウンロードした認証情報のcsvを参考に入力しましょう。

プロフィール名はIAMユーザーにあわせ「my-cdk」とします。

$ aws configure --profile my-cdk

AWS Access Key ID [None]: XXX
AWS Secret Access Key [None]: XXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

動作確認

プロフィールの作成が終わったら、ユーザー情報を取得するaws-cliコマンドを、プロフィール付きで実行できるか確認してみましょう。--profileオプションで、作成したプロフィールを指定します。このオプションはcdkコマンドでも使用可能です。

$ aws sts get-caller-identity --profile my-cdk

{
    "UserId": "XXX",
    "Account": "XXX",
    "Arn": "arn:aws:iam::XXX:user/my-cdk"
}

3. CDKプロジェクト作成

プロフィールの準備が完了したら、次はcdkのプロジェクトを作成します。プロジェクトの作成はcdk initコマンドで行います。任意のフォルダを作成して、お好みの言語でプロジェクトを作成してください。ここではTypeScriptを指定します。

フォルダ作成

$ mkdir my-cdk-app
$ cd my-cdk-app

cdk initコマンド

$ cdk init app --language typescript

4. アプリケーションスタック作成

プロジェクトを作成すると、libフォルダ配下に自動でアプリケーションスタックが作成されます。今回の場合はlib\my-cdk-app-stack.tsがアプリケーションスタックにあたります。

アプリケーションスタックにLambda本体を新たに定義します。Lambdaの処理内容はsrcフォルダを作成して、その配下に用意していきます。

Lambda本体の定義作成

アプリケーションスタックにLambda本体を定義しましょう。

lib\my-cdk-app-stack.ts
import { Stack, StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import * as lambda from "aws-cdk-lib/aws-lambda";

export class MyCdkAppStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    const sampleFunction = new lambda.Function(this, "SampleFunction", {
      runtime: lambda.Runtime.NODEJS_12_X,
      handler: "index.handler",
      code: lambda.Code.fromAsset("src/lambda/SampleFunction"), ★ここでLambdaの処理内容のソース配置場所を指定
    });
  }
}

Lambdaの処理内容作成

以下のサンプルを参考にindexファイルを新規に作成しましょう。処理内容はコンソールに「hello world!」を出力するだけの簡単なものとします。

src\lambda\SampleFunction\index.ts
exports.handler = async function () {
  console.log("hello world!");
};

5. デプロイ

ソースの準備が整ったら、ついにデプロイです。順番にコマンドを実行してアプリケーションスタックをデプロイしましょう!

cdk bootstrapコマンド

デプロイに必要なIAMロールやS3などを自動で作成してくれるコマンドです。このコマンドは初回に1度だけ実行します。コマンド実行時はプロフィールの指定を忘れないように!

 $ cdk bootstrap --profile my-cdk

npm run buildコマンド

cdkプロジェクトに既定で用意されているnpm run buildコマンドを実行します。このコマンドは、tscによってtsファイルをjsにトランスパイルしています。今後もLambdaのソース(srcフォルダ配下)を修正した際には、デプロイの前にこのコマンドを実行しておきましょう。

ちなみに、アプリケーションスタック(libフォルダ配下)は、後述のcdk deployコマンド実行時に裏側で自動的にビルド・トランスパイルされるため、アプリケーションスタック"だけ"を修正した場合はnpm run buildコマンドの実行は不要です。

 $ npm run build

cdk deployコマンド

ソースのビルド・トランスパイルまで完了したら最後にcdk deployコマンドでアプリケーションスタックの内容をデプロイしていきます。ここでもコマンド実行時のプロフィール指定を忘れないように!

 $ cdk deploy --profile my-cdk

デプロイコマンドを実行してしばらくすると、以下の画像ようにデプロイ内容の確認が求められるので、内容に問題がなければ「y」を入力してデプロイを続行しましょう。

動作確認


↑CloudFormationにアプリケーションスタックが作成されてますね!


↑アプリケーションスタックに定義したLambdaも作成されてます!


↑Lambdaを実行すると「hello world!」もコンソール出力されました!

お疲れ様でした

お疲れ様でした。本記事の内容はこれで終わりです。

もう少し触ってみたい方は、公式リファレンスを参考に、アプリケーションスタックに様々なリソースを定義してみると良いと面白いと思います。

それでは!