Slide 1

Slide 1 text

CDKでインフラとコードを 一緒にデプロイしてみよう CDKでLambdaをデプロイしてみた JAWS-UG 初心者支部#44 AWS Builders Online Series recap2

Slide 2

Slide 2 text

自己紹介 ● 某企業の5年目AWSインフラエンジニア ● AWS歴:4年(IaCやCI/CD周りを触っています) ● 好きなAWSサービス:AWS CDK ● JAWSのLT初参加・初心者です! 姜 禮林 かん   いぇりむ @cot_piyo https://regent0ro.blogspot.com/

Slide 3

Slide 3 text

CDKでLambdaをデプロイしてみた

Slide 4

Slide 4 text

AWS CDKとは ● AWS Cloud Development Kit(AWS クラウド開発キット) ● 慣れたプログラミング言語でAWSリソースを定義できるフレームワーク ○ プログラミング言語の知識と表現力を使用できる → If文やfor文が使える! ○ エディターの補完が効く! ● AWSのベストプラクティスがデフォルト値であるため、コード記述量が少なくなる ● CDKコードはCloudFormationのテンプレートに変換されて、AWS環境にデプロイされる

Slide 5

Slide 5 text

CDKで Lambdaをデプロイしてみた

Slide 6

Slide 6 text

AWS Lambdaとは ● サーバーレスでプログラムを実行できるサービス ● インフラのプロビジョニング、管理が不要 ○ 高い可用性(メンテナンス時間やダウンタイムなし) ● リクエスト数に応じて自動スケールする ● リクエスト数&実行時間で課金

Slide 7

Slide 7 text

CDKでLambdaをデプロイしてみた

Slide 8

Slide 8 text

4Stepでデプロイ 1. CDKプロジェクトを生成する 2. LambdaをStackに定義する 3. Lambdaのコードを書く 4. Let's デプロイ! CDKバージョン:2.10.0 利用言語:Python

Slide 9

Slide 9 text

1.CDKプロジェクトを生成する $ mkdir CDKLambda && cd CDKLambda // CDKプロジェクトを生成 $ cdk init --language python //仮想環境に入る $ . .venv/Scripts/activate //仮想環境に必要なモジュールをインストール $ pip install -r requirements.txt $ deactivate 仮想環境から抜けるときは Bashで実行

Slide 10

Slide 10 text

2.LambdaをStackに定義する from aws_cdk import ( Stack, aws_lambda as cdk_lambda ) from constructs import Construct class CdkLambdaStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) cdk_lambda.Function(self, "simple_lambda", runtime=cdk_lambda.Runtime.PYTHON_3_9, //Lambdaのランタイム //コードがある場所。S3バケットの指定やインラインで書くことも可能 code=cdk_lambda.Code.from_asset("resources"), handler="simple_lambda.lambda_handler" //ハンドラーを指定 ) cdk_lambda_stack.py

Slide 11

Slide 11 text

3.Lambdaのコードを書く import json def lambda_handler(event, context): print("Welcome beginner!!") return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') } resources\simple_lambda.py

Slide 12

Slide 12 text

4.Let's デプロイ! // 作成されるスタックを確認 $ cdk ls // AWS CDKのコードからCloudformationのテンプレートを生成(cdk.outフォルダーの中に生成) $ cdk synth // AWS環境でAWS CDKを利用するための初期構築を実施(AWS CDKを環境で初めて利用する時に必要) // ここで生成されたS3バケットにCloudformationテンプレートやLambdaのコードがアップロードされる $ cdk bootstrap $ cdk deploy 仮想環境(venv)に入っている状態で実行します

Slide 13

Slide 13 text

マネジメントコンソールで確認してみる Cloudformation

Slide 14

Slide 14 text

コードで定義してないが、Lambdaに必要なIAMロールが自動生成されている CDKの改善に利用される

Slide 15

Slide 15 text

Lambda

Slide 16

Slide 16 text

CDKでLambdaをデプロイできました!

Slide 17

Slide 17 text

AWS CDKでLambdaのコードをデプロイする時のいいところ ● 本番環境により近い状態を表すことができる ○ AWS環境のすべではここにある! ● インフラとアプリケーションチームのそれぞれの変更がより可視化できる ● インフラと同一のデプロイ方法で管理できる ● インフラとアプリケーションコードを同じ言語で書ける https://aws.amazon.com/jp/blogs/news/lambda-managed-by-cdk/ 参考

Slide 18

Slide 18 text

まとめ ● AWS CDKを利用して、Lambdaのインフラ定義とコードをデプロイしました ● AWS CDKでLambdaのコードを書くと、以下のメリットがある ○ 本番環境により近い状態を表すことができる ○ インフラとアプリケーションチームのそれぞれの変更がより可視化できる ○ インフラと同一のデプロイ方法で管理できる ○ インフラとアプリケーションコードを同じ言語で書ける ● AWS CDKはいいよ!いいよ!

Slide 19

Slide 19 text

おまけ より便利に利用できるLambda関連ライブラリもあります ● aws-lambda-nodejs ● aws-lambda-go(Experimental) ● aws-lambda-python(Experimental) ● aws-lambda-event-source ● aws-lambda-destinations 関連するAWS Builders Online Seriesのセッション Track 2 「コードを使ったAWS運用のはじめかた」 AWS CDKのレファレンス:https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html

Slide 20

Slide 20 text

ご清聴ありがとうございました!