Slide 1

Slide 1 text

CI/CDプロセスにCloudFormationを 本気導⼊するために考えるべきこと 濱⽥孝治(ハマコー) 1

Slide 2

Slide 2 text

2 ⾃⼰紹介

Slide 3

Slide 3 text

#jawsdays2021 #jawsdays2021_C 3 ⾃⼰紹介 濱⽥孝治(ハマコー) • CX事業本部 MADチーム マネージャー • Japan APN Ambassador 2020 • JAWS-UG コンテナ⽀部運営 • 好きなサービス︓ECS, EKS, CloudFormation • 好きな⾔葉「わっしょい」

Slide 4

Slide 4 text

#jawsdays2021 #jawsdays2021_C 4 @hamako9999 ハマコー

Slide 5

Slide 5 text

#jawsdays2021 #jawsdays2021_C 5 #jawsdays2021 #jawsdays2021_C 常にでてるよ︕

Slide 6

Slide 6 text

#jawsdays2021 #jawsdays2021_C 6

Slide 7

Slide 7 text

7 今⽇お集まりの皆さんへ

Slide 8

Slide 8 text

8 みなさん好きですか︖ CloudFormation

Slide 9

Slide 9 text

9 好きそうな顔してる︕︕ 😍

Slide 10

Slide 10 text

10 どのへんが好きですか︖

Slide 11

Slide 11 text

#jawsdays2021 #jawsdays2021_C 11 CloudFormation

Slide 12

Slide 12 text

#jawsdays2021 #jawsdays2021_C 12 CloudFormationの位置付け CloudFormation VPC Public subnet Amazon EMR Amazon Kinesis Data Firehose Amazon Athena Amazon Simple Notification Service Amazon Simple Queue Service Amazon EC2 Amazon Elastic Container Service AWS Lambda AWS Fargate Amazon WorkSpaces AWS IoT Core Amazon Personalize Amazon CloudWatch Amazon Simple Storage Service (S3) Amazon RDS

Slide 13

Slide 13 text

13 めちゃくちゃ強⼒ だけど、つかいこなしが難しい

Slide 14

Slide 14 text

14 これをさらにCI/CDにのっけて うまく運⽤できるんだろうか︖ 正直⾃分も最近まで 若⼲諦めてました

Slide 15

Slide 15 text

#jawsdays2021 #jawsdays2021_C 15 2019年11⽉3⽇の⾃社イベント

Slide 16

Slide 16 text

#jawsdays2021 #jawsdays2021_C 16 その時のお品書き

Slide 17

Slide 17 text

#jawsdays2021 #jawsdays2021_C 17 今⽇のメインはコレ ここの拡⼤版

Slide 18

Slide 18 text

#jawsdays2021 #jawsdays2021_C 18 今⽇の趣旨 CloudFormationをCI/CDプロセスに組み込む にあたって、考えるべきこと、取り⼊れるべき ツールなどを把握していただき、 CloudFormationによるAWSアカウントの⾃動 プロビジョニングを⾃信をもって実⾏していただ きたい

Slide 19

Slide 19 text

19 本⽇のAgenda

Slide 20

Slide 20 text

#jawsdays2021 #jawsdays2021_C 20 Agenda • IaCとは︖CloudFormationの基礎 • CloudFormationをCI/CDに組み込むことの意味 • CloudFormationにおけるCIとCDの違い • CIで実施すべきこと • CDで実施すべきこと • まとめ

Slide 21

Slide 21 text

21 IaCとは︖ CloudFormationの基礎

Slide 22

Slide 22 text

#jawsdays2021 #jawsdays2021_C 22 Infrastructure as Codeとはなにか︖ コードでインフラを定義する⼿法 Resources: FirstVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 FirstVPC 10.0.0.0/16 template (YAML形式)

Slide 23

Slide 23 text

#jawsdays2021 #jawsdays2021_C 23 Infrastructure as Codeとはなにか︖ テンプレートファイルにはリソースの状態を定義するた め、同じテンプレートを複数回実⾏しても、インフラは 更新されない Resources: FirstVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 FirstVPC 10.0.0.0/16 template (YAML形式) 何度実⾏しても AWS側は変わらない

Slide 24

Slide 24 text

#jawsdays2021 #jawsdays2021_C 24 Infrastructure as Codeとはなにか︖ aws cliで作成する場合 $aws ec2 create-vpc -- cidr-block 10.0.0.0/16 VPC 10.0.0.0/16 create-vpc.sh (Shell形式)

Slide 25

Slide 25 text

#jawsdays2021 #jawsdays2021_C VPC 10.0.0.0/16 VPC 10.0.0.0/16 VPC 10.0.0.0/16 25 Infrastructure as Codeとはなにか︖ aws cliは処理を定義するため、複数回実⾏した場合、 その処理が毎回実⾏され、そのたびにインフラ側が更新 される $aws ec2 create-vpc -- cidr-block 10.0.0.0/16 VPC 10.0.0.0/16 create-vpc.sh (Shell形式) 実⾏するだけ インフラは増えていく

Slide 26

Slide 26 text

#jawsdays2021 #jawsdays2021_C 26 CloudFormationの概要 • テンプレートファイルでAWSリソースをプロビジョ ニングするサービス • テンプレートベースで作成〜変更〜削除も可能 • CloudFormation⾃体の追加料⾦なし AWS CloudFormation template (JSON/YAML) Stack (リソース) Amazon EC2 AWS Lambda Amazon RDS Amazon Simple Storage Service (S3)

Slide 27

Slide 27 text

#jawsdays2021 #jawsdays2021_C 27 CloudFormationの概要 • テンプレート • CloudFormationの最も要となる部分 AWSTemplateFormatVersion: '2010-09-09' Description: codecommit and ecr Parameters: accountAllias: Type: String accountAlliasLowerCase: Type: String Resources: ecr: Type: AWS::ECR::Repository Properties: RepositoryName: !Sub ${accountAlliasLowerCase}-ecr Outputs: ecr: Value: !GetAtt ecr.Arn Export: Name: ecr • テキストファイルで記述 • JSON/YAML • スタックのリソース状態 を記述 • リソースを記載する順番 は関係なし (CloudFormationが⾃動 的に解決)

Slide 28

Slide 28 text

#jawsdays2021 #jawsdays2021_C 28 CloudFormationを使う主なメリット • インフラの管理を簡略化 • ⼀度テンプレートからスタックを作成しておくと変更が簡 単。また、スタック単位でのリソース⼀括削除も可能 • インフラを簡単に複製可能 • テンプレートを使い回すことで、複数リージョンへのイン フラ展開が簡単 • インフラの変更管理が可能 • テンプレートのテキストファイルをベースにすることで バージョン管理システムによるインフラ管理が可能

Slide 29

Slide 29 text

29 CloudFormationを CI/CDに組み込むことの意味

Slide 30

Slide 30 text

30 そもそも 皆さん CloudFormationを どこで実⾏していますか︖

Slide 31

Slide 31 text

#jawsdays2021 #jawsdays2021_C 31 CloudFormation実⾏環境例とPros and Cons 構成 内容 Pros and Cons マネジメントコン ソール • AWSのマネジメントコンソールからポ チポチと操作する • 誰でも簡単。特に準備がいらない • 処理の冪等性を担保することが難しい 作業⽤ クライアントPC • インフラ管理者のクライアントPCから コード実⾏ • 柔軟性は⾼いが実⾏環境を統⼀しづらい • 往々にして実⾏コードとリポジトリがずれ る EC2 (SSH接続) • EC2にSSHでログインして、コード実⾏ • IaC実⾏権限の管理が煩雑(SSH秘密鍵と IAMの2重管理) • EC2の料⾦が気になる EC2 (セッションマネー ジャー接続) • EC2にセッションマネージャーでログイ ンして、コード実⾏ • SSH接続よりマシ • EC2の料⾦が気になる リポジトリから ⾃動適⽤ • プルリクエストでコードのテスト • エラーなければ特定ブランチマージから ⾃動デプロイ • アプリケーションデプロイフローの流れ をインフラコードに適⽤ • 実⾏コードがリポジトリと同⼀なのはすご く安⼼ • 構築が⼤変 • 柔軟な運⽤ができない

Slide 32

Slide 32 text

32 そもそも なぜCI/CDに組み込むのか︖

Slide 33

Slide 33 text

33 GitOpsの考え⽅を IaCにも取り込むことで 安定した運⽤を可能にする

Slide 34

Slide 34 text

#jawsdays2021 #jawsdays2021_C 34 IaCにおけるGitOpsの定義 参照︓re:Invent GPSTEC410 GitOps compliance on AWS Enforcing immutable infrastructure

Slide 35

Slide 35 text

#jawsdays2021 #jawsdays2021_C 35 GitOpsのメリット • 変更履歴が強制的にリポジトリに残る • 変更承認の強制などガバナンスを強制できる • 強制ときくと聞こえが悪いが、仕組みにすることで安⼼ できる • ⾃動化により⼈的コストが削減できる • ヒューマンエラーを撲滅できる

Slide 36

Slide 36 text

#jawsdays2021 #jawsdays2021_C 36 CloudFormation実⾏環境例とPros and Cons 構成 内容 Pros and Cons マネジメントコン ソール • AWSのマネジメントコンソールからポ チポチと操作する • 誰でも簡単。特に準備がいらない • 処理の冪等性を担保することが難しい 作業⽤ クライアントPC • インフラ管理者のクライアントPCから コード実⾏ • 柔軟性は⾼いが実⾏環境を統⼀しづらい • 往々にして実⾏コードとリポジトリがずれ る EC2 (SSH接続) • EC2にSSHでログインして、コード実⾏ • IaC実⾏権限の管理が煩雑(SSH秘密鍵と IAMの2重管理) • EC2の料⾦が気になる EC2 (セッションマネー ジャー接続) • EC2にセッションマネージャーでログイ ンして、コード実⾏ • SSH接続よりマシ • EC2の料⾦が気になる リポジトリから ⾃動適⽤ • プルリクエストでコードのテスト • エラーなければ特定ブランチマージから ⾃動デプロイ • アプリケーションデプロイフローの流れ をインフラコードに適⽤ • 実⾏コードがリポジトリと同⼀なのはすご く安⼼ • 構築が⼤変 • 柔軟な運⽤ができない

Slide 37

Slide 37 text

#jawsdays2021 #jawsdays2021_C 37 CloudFormation実⾏環境例とPros and Cons 構成 内容 Pros and Cons マネジメントコン ソール • AWSのマネジメントコンソールからポ チポチと操作する • 誰でも簡単。特に準備がいらない • 処理の冪等性を担保することが難しい 作業⽤ クライアントPC • インフラ管理者のクライアントPCから コード実⾏ • 柔軟性は⾼いが実⾏環境を統⼀しづらい • 往々にして実⾏コードとリポジトリがずれ る EC2 (SSH接続) • EC2にSSHでログインして、コード実⾏ • IaC実⾏権限の管理が煩雑(SSH秘密鍵と IAMの2重管理) • EC2の料⾦が気になる EC2 (セッションマネー ジャー接続) • EC2にセッションマネージャーでログイ ンして、コード実⾏ • SSH接続よりマシ • EC2の料⾦が気になる リポジトリから ⾃動適⽤ • プルリクエストでコードのテスト • エラーなければ特定ブランチマージから ⾃動デプロイ • アプリケーションデプロイフローの流れ をインフラコードに適⽤ • 実⾏コードがリポジトリと同⼀なのはすご く安⼼ • 構築が⼤変 • 柔軟な運⽤ができない 皆さんには⾃信をもって ここに踏み込んでもらいたい

Slide 38

Slide 38 text

38 CloudFormationにおける CIとCDの違い

Slide 39

Slide 39 text

#jawsdays2021 #jawsdays2021_C 39 基本的な考え⽅ CI(Continuous Integration) • テンプレートの静的解析 CD(Continuous Delivery) • CloudFormationのスタックのデプロイ(AWSリ ソースの変更)

Slide 40

Slide 40 text

#jawsdays2021 #jawsdays2021_C 40 CloudFormationにおけるCI/CD基本構成 CI CD

Slide 41

Slide 41 text

41 CIで実施すべきこと

Slide 42

Slide 42 text

#jawsdays2021 #jawsdays2021_C 42 CI部分 CI CD

Slide 43

Slide 43 text

#jawsdays2021 #jawsdays2021_C 43 CloudFormationのCIで実施すべきこと アーティファクトを作成する前に、組織ポリシーや異常なテ ンプレートを排除し、後続処理の⼿間を省略する • CloudFormation Linter(VisualStudio Code プラグ イン) • cfn-python-lint • AWS CloudFormation Guard • cfn-nag • CFripper

Slide 44

Slide 44 text

#jawsdays2021 #jawsdays2021_C 44 CloudFormationのCIで実施すべきこと アーティファクトを作成する前に、組織ポリシーや異常なテ ンプレートを排除し、後続処理の⼿間を省略する • CloudFormation Linter(VisualStudio Code プラグ イン) • cfn-python-lint • AWS CloudFormation Guard • cfn-nag • CFripper 今使うならこれ

Slide 45

Slide 45 text

45 CloudFormation Linter (VSCodeプラグイン)

Slide 46

Slide 46 text

#jawsdays2021 #jawsdays2021_C 46 CloudFormation Linter(VSCode Plugin) https://marketplace.visualstudio.com/items?itemName=kddejong.vscode-cfn-lint

Slide 47

Slide 47 text

#jawsdays2021 #jawsdays2021_C 47 CloudFormation Linter(VSCode Plugin) CI/CDとは関係ないが、CloudFormationのテンプ レートを書く全⼈類が⼊れておくべきプラグイン • cfn-lint埋め込みによるリアルタイムエラー表⽰ • AWSリソースに応じたプロパティ補完 • リソースの関連を⽰すグラフ

Slide 48

Slide 48 text

#jawsdays2021 #jawsdays2021_C 48 プロパティ補完の様⼦ 該当するAWSリソースのプロパ ティ⼀覧の表⽰ 該当ドキュメントのURL

Slide 49

Slide 49 text

#jawsdays2021 #jawsdays2021_C 49 リソース関連グラフの様⼦ テンプレートを解析して、リソース名とAWSリソースタイプと それぞれの依存関係(DependsOn、Ref、GetAtt)を図⽰し てくれる 例)ALB、ECSサービス、ECSタスク

Slide 50

Slide 50 text

#jawsdays2021 #jawsdays2021_C 50 リソース関連グラフの様⼦ 例) • CodePipeline • CloudWatchE vents • CodeBuild • S3Bucket • 関連ロール

Slide 51

Slide 51 text

#jawsdays2021 #jawsdays2021_C 51 Linterの解説記事 https://dev.classmethod.jp/articles/use-linter-to-notice-mistakes-of-cloudformation/

Slide 52

Slide 52 text

52 cfn-python-lint

Slide 53

Slide 53 text

#jawsdays2021 #jawsdays2021_C 53 AWS CloudFormation Linter https://github.com/aws-cloudformation/cfn-python-lint

Slide 54

Slide 54 text

#jawsdays2021 #jawsdays2021_C 54 CloudFormation Linter AWS謹製のテンプレート静的解析ツール • 各種エディタのプラグイン豊富 • 122個のルールがデフォルトで組み込まれている • Error 101、Worning 21 • カスタムルールの作成も可能 • Dockerfileが⽤意されているのでCI/CDへの組み込 みが容易(公式イメージはなし)

Slide 55

Slide 55 text

#jawsdays2021 #jawsdays2021_C 55 ルール例(ERROR) • E1001: Basic CloudFormation Template Configuration • E1002: Template size limit • E1003: Template description limit • E1004: Template description can only be a string • E1010: GetAtt validation of parameters • E1011: FindInMap validation of configuration • E1012: Check if Refs exist • E1015: GetAz validation of parameters • E1016: ImportValue validation of parameters

Slide 56

Slide 56 text

#jawsdays2021 #jawsdays2021_C 56 ルール例(WORNING) • W1019: Sub validation of parameters • W1020: Sub isn't needed if it doesn't have a variable defined • W2001: Check if Parameters are Used • W2030: Check if parameters have a valid value • W2031: Check if parameters have a valid value based on an allowed pattern • W2501: Check if Password Properties are correctly configured • W2506: Check if ImageId Parameters have the correct type • W2510: Parameter Memory Size attributes should have max and min • W2511: Check IAM Resource Policies syntax • W2531: Check if EOL Lambda Function Runtimes are used

Slide 57

Slide 57 text

#jawsdays2021 #jawsdays2021_C 57 カスタムルール適⽤例(Custome_rule.txt) こういうテンプレートを書くと、 Warningがでる

Slide 58

Slide 58 text

#jawsdays2021 #jawsdays2021_C 58 cfn-lintの利⽤(Dockerfile) FROM python:3.8-alpine RUN pip install cfn-lint RUN pip install pydot ENTRYPOINT ["cfn-lint"] CMD ["--help"] • 公式イメージは提供されていないため、⾃分の CI/CDプロセスで使うには⾃前ビルド or 都度pipイ ンストールを実施 • ⾃前ビルドはECR Publicに置くのもあり pipで簡単にインストール可能

Slide 59

Slide 59 text

#jawsdays2021 #jawsdays2021_C 59 cfn-lintの利⽤(gitlab-ci.yml例) cfn-lint: stage: iac-static-test image: python:3.8-alpine script: - pip install --upgrade pip - pip install cfn-lint - pip install pydot - cfn-lint template/*.yml ベースイメージにpython:3.8-alpineを利⽤して、pipインス トール後、cfn-lintを実⾏

Slide 60

Slide 60 text

60 AWS CloudFormation Guard

Slide 61

Slide 61 text

#jawsdays2021 #jawsdays2021_C 61 AWS CloudFormation Guard https://aws.amazon.com/jp/about-aws/whats-new/2020/06/introducing-aws-cloudformation-guard-preview/

Slide 62

Slide 62 text

#jawsdays2021 #jawsdays2021_C 62 AWS CloudFormation Guard https://github.com/aws-cloudformation/cloudformation-guard

Slide 63

Slide 63 text

#jawsdays2021 #jawsdays2021_C 63 AWS CloudFormation Guard 2020年10⽉にGAされた、AWS謹製のテンプレート解 析アンドセキュリティポリシー評価ツール • 独⾃のポリシー記述⾔語を利⽤し、企業のポリシー ガイドラインに反するCloudFormationテンプレー トを排除可能 • デフォルト定義されているルールは無し • 既存のテンプレートからルールセットを作成可能 • GitHubにExampleのルールが⽤意されている

Slide 64

Slide 64 text

#jawsdays2021 #jawsdays2021_C 64 Example ルールセット DynamoDBやセキュリティ関連 のルールセットがExample提供 されている

Slide 65

Slide 65 text

#jawsdays2021 #jawsdays2021_C 65 ddb(DynamoDB).ruleset タグに「PROD」が含まれている場合、.DeletionPolicyを Retainに強制する

Slide 66

Slide 66 text

#jawsdays2021 #jawsdays2021_C 66 AWSにおけるガードレールの考え⽅と実装⽅法 AWSはガードレール概念の実装としてControl Towerで利⽤ するガードレールリファレンスを提唱している Organizationsが必須なControl TowerやSCP(サービスコ ントロールポリシー)などと共に、CloudFormation Guard を利⽤したガードレール実装も検討の余地あり

Slide 67

Slide 67 text

#jawsdays2021 #jawsdays2021_C 67 cfn-guardの利⽤(gitlab-ci.yml例) ベースイメージにubuntu:20.04を利⽤して、wgetからバイ ナリダウンロードして配置して実⾏ cfn-guard: stage: iac-static-test image: ubuntu:20.04 script: - apt-get update - apt-get install -y wget - wget https://github.com/aws-cloudformation/cloudformation- guard/releases/download/1.0.0/cfn-guard-linux-1.0.0.tar.gz - tar -xvf cfn-guard-linux-1.0.0.tar.gz - cd ./cfn-guard-linux - ./cfn-guard --version

Slide 68

Slide 68 text

#jawsdays2021 #jawsdays2021_C 68 参考ブログ デプロイ前のコンプライアンスチェック︕CloudFormation Guardを試してみた | DevelopersIO CloudFormation GuardをGitHub Actionsに組み込んでみ た | DevelopersIO

Slide 69

Slide 69 text

69 選外になったもの cfn-nag CFripper

Slide 70

Slide 70 text

#jawsdays2021 #jawsdays2021_C 70 選外になったもの • cfn-nag • AWS謹製のテンプレートセキュリティポリシー準拠確認ツール • 以前はよく使われていたようだが、今はCloudFormation Guard が上位互換の扱いにみえるのでこちらを使う必要性はなさそう • ポリシーの定義がテンプレートへのメタデータ埋め込み⽅式なの で、正直だいぶ使いづらい • CFripper • Skyscanner社が出している静的解析ツール • セキュリティポリシーを別のルールセットで評価可能 • スター数も多く開発は活発そうでcfn-nagより良さそうだが、こ れもCloudFormation Guardが出てきたので必要なさそう

Slide 71

Slide 71 text

#jawsdays2021 #jawsdays2021_C 71 CI成果物のアーティファクト格納 CDで利⽤する形態に合わせてアーティファクトを作成する • 通常のCloudFormationの場合 • CloudFormationのテンプレート • パラメータ設定ファイル • 設定ファイルはCDの形態によってフォーマットが異なる • SAM(Serverless Application Model)の場合 • Lambdaのコード(zip化されたもの)と、パラメータが アーティファクト⽤に変換されたテンプレート • cloudformation packageコマンドを使うと、そのあたり CloudFormationがよしなにやってくれる

Slide 72

Slide 72 text

72 CDで実施すべきこと

Slide 73

Slide 73 text

#jawsdays2021 #jawsdays2021_C 73 CD部分 CI CD

Slide 74

Slide 74 text

#jawsdays2021 #jawsdays2021_C 74 CloudFormationのCDで実施すべきこと CloudFormationのCDで実施したほうがよいこと 1. ChangeSetの作成 2. 承認 3. ChangeSetの実⾏

Slide 75

Slide 75 text

#jawsdays2021 #jawsdays2021_C 75 CloudFormationのCDの実装⽅法 CD実装⽅法は⼤きく2つ 1. CodePipelineにClooudFormationを組み込む 2. CodeBuildからCLIで実⾏

Slide 76

Slide 76 text

#jawsdays2021 #jawsdays2021_C 76 CloudFormationのCDの実装⽅法 CD実装⽅法は⼤きく2つ 1. CodePipelineにClooudFormationを組み込む 2. CodeBuildからCLIで実⾏ それぞれのメリット・デメリットを 把握する必要あり

Slide 77

Slide 77 text

77 CloudFormationのCD実装⽅法 ①CodePipelineに CloudFormationを組み込む

Slide 78

Slide 78 text

#jawsdays2021 #jawsdays2021_C 78 ①CodePipelineにCloudFormationを組み込む CodePipelineのアクションプロバイダーに CloudFormationを利⽤ CloudFormationを指定

Slide 79

Slide 79 text

#jawsdays2021 #jawsdays2021_C 79 ①CodePipelineにCloudFormationを組み込む アクションモードで、スタックに対する操作を設定する 変更セットの作成だけなのか、実 ⾏なのか、指定が可能

Slide 80

Slide 80 text

80 CodePipelineに組み込んだとして テンプレートに パラメータを与えている場合 どうするの︖

Slide 81

Slide 81 text

#jawsdays2021 #jawsdays2021_C 81 ①CodePipelineにCloudFormationを組み込む ⼊⼒アーティファクトにテ ンプレート設定ファイルを 指定でき、パラメータやス タックポリシーやタグを JSON形式で指定可能 これにより、テンプレート は共通で環境ごとによりパ ラメータを変えた上での CloudFormationの実⾏な んかも

Slide 82

Slide 82 text

#jawsdays2021 #jawsdays2021_C 82 ①CodePipelineにCloudFormationを組み込む このチュートリアルをやると実装イメージがつかめます https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/continuous-delivery-codepipeline.html

Slide 83

Slide 83 text

#jawsdays2021 #jawsdays2021_C 83 ①CodePipelineにCloudFormationを組み込む • S3を起点としたアーティ ファクトの指定 • テスト環境でのスタック作 成と承認〜環境削除 • 本番環境でのチェンジセッ ト作成 → 承認 → デ プロイ

Slide 84

Slide 84 text

84 CloudFormationのCD実装⽅法 ②CodeBuildから CLIで実⾏

Slide 85

Slide 85 text

#jawsdays2021 #jawsdays2021_C 85 ②CodeBuildからCLIで実⾏ CodeBuild(その他⼀般的なCI/CDツール)からCLIで実⾏ • Terraformとかでは⼀般的な⽅法 • terraform plan、terraform apply • CloudFormationは⾟い • CLI体系が本当にイケてない(createとupdateの使い分けが必 要) • スタック展開の進捗がわからない • deployコマンドもそこまで柔軟ではない • CloudFormationのCDが普及しづらい⼤きな原因はこれだと 思ってる

Slide 86

Slide 86 text

#jawsdays2021 #jawsdays2021_C 86 ②CodeBuildからCLIで実⾏ CodeBuild(その他⼀般的なCI/CDツール)からCLIで実⾏ • Terraformとかでは⼀般的な⽅法 • terraform plan、terraform apply • CloudFormationは⾟い • CLI体系が本当にイケてない(createとupdateの使い分けが必 要) • スタック展開の進捗がわからない • deployコマンドもそこまで柔軟ではない • CloudFormationのCDが普及しづらい⼤きな原因はこれだと思っ てる そんな悩めるあなたに舞い降りた奇跡︕︕

Slide 87

Slide 87 text

87 Rain

Slide 88

Slide 88 text

#jawsdays2021 #jawsdays2021_C 88 Rain https://github.com/aws-cloudformation/rain

Slide 89

Slide 89 text

#jawsdays2021 #jawsdays2021_C 89 Rain AWS謹製CloudFormationのCLIツール • 今までのAWS CLIベースのコマンドのつらみをもろもろ 解消してくれる • インタラクティブなデプロイが可能 • CFnテンプレートの⽣成ができる • 既存スタックの有無によるコマンド使い分けももちろん 不要 • 削除も簡単 • Go製なので、コンテナ利⽤も超簡単

Slide 90

Slide 90 text

#jawsdays2021 #jawsdays2021_C 90 参考情報(雰囲気はこれでつかめます︕) https://dev.classmethod.jp/articles/aws-cloudformation-rain/

Slide 91

Slide 91 text

#jawsdays2021 #jawsdays2021_C 91 CLIじゃないと無理なパターン こういうクロスアカウントでのデプロイはCLIじゃない と無理

Slide 92

Slide 92 text

92 実際どちらが良いのか︖ 2つの⽅法のPros and Cons ① CodePipelineにClooudFormationを組み込む ② CodeBuildからCLIで実⾏

Slide 93

Slide 93 text

#jawsdays2021 #jawsdays2021_C 93 CloudFormationのCD実装のPros and Cons ⼿法 Pros Cons ①CodePipelineに CloudFormationを 組み込む • 作るものが少なくシンプル に構築できる • 処理の⾒通しが良い • パラメータ内容の動的変更な ど融通が効かせづらい • CodePipelineでしか動かない ②CodeBuildから CLIで実⾏ • マルチなCI/CDプラット フォームで動作可能 (CodeBuild、GitHub Actions、CircleCI、 GitLab CI) • 冪等性が重要な領域に「処 理」を組み込んでしまいがち • 前段の処理結果を受けてパラ メータを変更するなどを過度 にやりだすと、⾒通しが悪く なりCI/CDプロセス保守性が 下がる

Slide 94

Slide 94 text

94 まとめ

Slide 95

Slide 95 text

#jawsdays2021 #jawsdays2021_C 95 まとめ CloudFormationをGitOpsとして運⽤することには⼤ いなるメリットがある CIツールが⾮常に充実してきた CLI体系が洗練されつつあるので、CD部分も柔軟にで きるようになってきた

Slide 96

Slide 96 text

#jawsdays2021 #jawsdays2021_C 96 まとめ CloudFormationをGitOpsとして運⽤することには⼤ いなるメリットがある CIツールが⾮常に充実してきた CLI体系が洗練されつつあるので、CD部分も柔軟にで きるようになってきた 今こそCloudFormationの GitOps時代︕︕

Slide 97

Slide 97 text

97 みなさんのこれからの CloudFormationライフがより良いものに なることを願って