Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Get started AWS CDK

youyo
July 19, 2019

Get started AWS CDK

AWS CDK入門

youyo

July 19, 2019
Tweet

More Decks by youyo

Other Decks in Technology

Transcript

  1. AWS CDK とは? AWS Cloud Development Kit AWS リソースをプログラミング言語で記述し, モデル化お

    よびプロビジョニングするためのフレームワーク TypeScript とPython をサポート (TypeScript >= 2.7, Python >= 3.6) TypeScript やPython で記述し, Cloudformation テンプレー トを生成して実行する 型がありIDE 等による補完が効く ref; https://aws.amazon.com/jp/blogs/news/aws-cloud- development-kit-cdk-typescript-and-python-are-now- generally-available/
  2. 初期テンプレ作成 $ cdk init --language python Applying project template app

    for python Executing Creating virtualenv... # Welcome to your CDK Python project! . . . # Useful commands * `cdk ls` list all stacks in the app * `cdk synth` emits the synthesized CloudFormation templa * `cdk deploy` deploy this stack to your default AWS accou * `cdk diff` compare deployed stack with current state * `cdk docs` open CDK documentation Enjoy!
  3. 実行する際のディレクトリにファイルとかあると エラー吐くので注意 $ cdk init --language python `cdk init` cannot

    be run in a non-empty directory! Lambda Function を扱ったりテンプレートサイズが 大きくなってくるとデプロイにS3 バケットが必要 になってくるので, その場合はcdk bootstrap でバケ ット作成しておく $ cdk bootstrap
  4. 適当にコード書いて実行してみる from aws_cdk import ( core, aws_s3 as s3 )

    class AppStack(core.Stack): def __init__(self, scope: core.Construct, id: str, **kwargs) -> None: super().__init__(scope, id, **kwargs) s3.Bucket(self, 'my-bucket') app = core.App() AppStack(app, "my-stack") app.synth()
  5. デプロイしてみる $ cdk deploy my-stack: deploying... my-stack: creating CloudFormation changeset...

    0/3 | 14:31:26 | CREATE_IN_PROGRESS | AWS::CDK::Metadata | CD 0/3 | 14:31:26 | CREATE_IN_PROGRESS | AWS::S3::Bucket | my 0/3 | 14:31:28 | CREATE_IN_PROGRESS | AWS::S3::Bucket | my 0/3 | 14:31:28 | CREATE_IN_PROGRESS | AWS::CDK::Metadata | CD 1/3 | 14:31:28 | CREATE_COMPLETE | AWS::CDK::Metadata | CD 2/3 | 14:31:49 | CREATE_COMPLETE | AWS::S3::Bucket | my 3/3 | 14:31:50 | CREATE_COMPLETE | AWS::CloudFormation::St ✅ my-stack Stack ARN: arn:aws:cloudformation:ap-northeast-1:380421963481:stack/my-stac
  6. 変更加えてみる from aws_cdk import ( core, aws_s3 as s3 )

    class AppStack(core.Stack): def __init__(self, scope: core.Construct, id: str, **kwargs) -> None: super().__init__(scope, id, **kwargs) s3.Bucket(self, 'my-bucket', encryption=s3.BucketEncryption.S3_MANAGED, versioned=True ) app = core.App() AppStack(app, "my-stack") app.synth()
  7. $ cdk diff Stack my-stack Resources [~] AWS::S3::Bucket my-bucket mybucket15D133BF

    ├─ [+] BucketEncryption │ └─ {"ServerSideEncryptionConfiguration":[ │ {"ServerSideEncryptionByDefault":{ │ "SSEAlgorithm":"AES256"}}]} └─ [+] VersioningConfiguration └─ {"Status":"Enabled"} $ cdk deploy my-stack: deploying... my-stack: creating CloudFormation changeset... 0/2 | 15:23:43 | UPDATE_IN_PROGRESS | AWS::S3::Bucket | my 1/2 | 15:24:05 | UPDATE_COMPLETE | AWS::S3::Bucket | my ✅ my-stack Stack ARN: arn:aws:cloudformation:ap-northeast-1:380421963481:stack/my-stac
  8. これをCloudformation(yaml) で記述しようとすると どうなるのか? $ cdk synth Resources: mybucket15D133BF: Type: AWS::S3::Bucket

    Properties: BucketEncryption: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: AES256 VersioningConfiguration: Status: Enabled UpdateReplacePolicy: Retain DeletionPolicy: Retain Metadata: aws:cdk:path: my-stack/my-bucket/Resource CDKMetadata: Type: AWS::CDK::Metadata Properties: Modules: aws-cdk=1.0.0,@aws-cdk/aws-events=1.0.0,@aws-cdk/aws-iam=
  9. どっちがお好きですか? s3.Bucket(self, 'my-bucket', encryption=s3.BucketEncryption.S3_MANAGED, versioned=True ) mybucket15D133BF: Type: AWS::S3::Bucket Properties:

    BucketEncryption: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: AES256 VersioningConfiguration: Status: Enabled UpdateReplacePolicy: Retain DeletionPolicy: Retain
  10. Cloudformation やAWS SAM, Serverless Framework, Terraform などの他のツールも存在する。どう選択する か? 基本的に好きなものを使えばいいじゃんというスタンス Cloudformation

    はマルチリージョンの扱いに難があった が, AWS CDK では特に問題なさそうなのでマルチリージョ ン扱いそうなときはAWS CDK かTerraform を使うと思う AWS CDK ではまだ稀にできないことがあったりする。 (ex; db.r5.* などのR5 インスタンスタイプを選択できなか ったり) そういうときはAWS SAM やTerraform を使うと思う。 AWS CDK は独自DSL 覚えなくていいのでいいよね。
  11. でもTerraform でLambda Function 扱うのとかめんどくさ い。というかAWS SAM が超絶楽。AWS CDK もいい感じ。 なのでLambda

    Function 扱うときはAWS SAM かAWS CDK を使うと思う。 でもTerraform 使いたい熱も最近高いのでTerraform と AWS SAM 組み合わせて使うかも。 ref; https://blog.youyo.io/posts/terraform-aws-sam Serverless Framework はプラグインでいろいろ機能拡張 できるしそういうのが必要なときは使うかも。 型があるって素晴らしいね!AWS CDK ! Terraform もv0.12 ですごく良くなったよ! とりあえず今の気持ちとしてはAWS CDK いい感じなので 積極的に使っていきたい