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

AWS CDKで お手軽インフラ構築/easy-cdk

watanabe
October 26, 2022

AWS CDKで お手軽インフラ構築/easy-cdk

watanabe

October 26, 2022
Tweet

Other Decks in Programming

Transcript

  1. AWS CDKとは • AWS Cloud Development Kit、AWS クラウド開発キット • プログラミング言語を使用してクラウドアプリケーションリソースを定義する

    ための開発フレームワーク ◦ いわゆるIaC • OSSで開発されている ◦ https://github.com/aws/aws-cdk
  2. なぜCDKを使うのか • CDKでリソースを定義してCloudFormationのテンプレートを作る方が便利 ◦ 使い慣れた言語でリソースの定義ができる ▪ 変数やループなどが使える ▪ CFでもSubやマクロで可能だがより簡単にできる ◦

    cdk.jsonまたは--contextオプションなどで共通の値を設定可能 ▪ CFだと環境名などは個別に設定していたものを共通化できる ◦ 更新時の差分がCFより詳細に分かる
  3. CDKのコード← →CFテンプレート S3を3つ作りたいときのコード { "Resources": { "bucket065CC0256": { "Type": "AWS::S3::Bucket", "Properties":

    { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256" } } ] }, "BucketName": "bucket-0", "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true } }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { "aws:cdk:path": "watanabe-s3-stack/bucket-0/Resource" } }, "bucket136091DF3": { "Type": "AWS::S3::Bucket", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256" } } ] }, "BucketName": "bucket-1", "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true } }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { "aws:cdk:path": "watanabe-s3-stack/bucket-1/Resource" } }, "bucket2584811F3": { "Type": "AWS::S3::Bucket", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256" } } ] }, "BucketName": "bucket-2", "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true } }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { "aws:cdk:path": "watanabe-s3-stack/bucket-2/Resource" } }, }, import * as cdk from 'aws-cdk-lib'; import * as s3 from 'aws-cdk-lib/aws-s3' import { Construct } from 'constructs'; export class S3Stack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); for(let i=0; i<3; i++){ const bucket = new s3.Bucket(this, `bucket-${i}`, { bucketName: `bucket-${i}`, encryption: s3.BucketEncryption.S3_MANAGED, blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, removalPolicy: cdk.RemovalPolicy.DESTROY }) } } }
  4. いざcdk init on Dockerの罠 • docker compose run cdk cdk

    init app --language typescript _人人人人人人人人人人人人人人人人人人人人人人人人人人_ > cdk init cannot be run in a non-empty directory! <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄ • コンテナ内で空ディレクトリを作成してその中で cdk initを実行しましょう… • cdk init実行後のファイルをコンテナ作業ディレクトリに移動・管理すると後々便利 ◦ 他にいい方法あれば教えてください …