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

CI/CDプロセスにCloudFormationを本気導入するために考えるべきこと

 CI/CDプロセスにCloudFormationを本気導入するために考えるべきこと

AWSリソースのプロビジョニングとして幅広く利用されているCloudFormation。みなさん、利用していますか?コードでインフラを管理する上で避けては通れないサービスですが、これをCI/CDプロセスに組み込み、インフラの自動的な追加〜更新運用するためには、考えないといけないことが山のようにあります。

このセッションでは、手元のクライアントやEC2からCloudFormationを実行している運用から一歩踏み出して、CI/CDプロセスにCloudFormationを組み込むために考えないといけないことをお話します。

濱田孝治

March 20, 2021
Tweet

More Decks by 濱田孝治

Other Decks in Technology

Transcript

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

    View Slide

  2. 2
    ⾃⼰紹介

    View Slide

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

    View Slide

  4. #jawsdays2021 #jawsdays2021_C
    4
    @hamako9999
    ハマコー

    View Slide

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

    View Slide

  6. #jawsdays2021 #jawsdays2021_C
    6

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. #jawsdays2021 #jawsdays2021_C 11
    CloudFormation

    View Slide

  12. #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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. 19
    本⽇のAgenda

    View Slide

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

    View Slide

  21. 21
    IaCとは︖
    CloudFormationの基礎

    View Slide

  22. #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形式)

    View Slide

  23. #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側は変わらない

    View Slide

  24. #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形式)

    View Slide

  25. #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形式)
    実⾏するだけ
    インフラは増えていく

    View Slide

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

    View Slide

  27. #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が⾃動
    的に解決)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  31. #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の料⾦が気になる
    リポジトリから
    ⾃動適⽤
    • プルリクエストでコードのテスト
    • エラーなければ特定ブランチマージから
    ⾃動デプロイ
    • アプリケーションデプロイフローの流れ
    をインフラコードに適⽤
    • 実⾏コードがリポジトリと同⼀なのはすご
    く安⼼
    • 構築が⼤変
    • 柔軟な運⽤ができない

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. #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の料⾦が気になる
    リポジトリから
    ⾃動適⽤
    • プルリクエストでコードのテスト
    • エラーなければ特定ブランチマージから
    ⾃動デプロイ
    • アプリケーションデプロイフローの流れ
    をインフラコードに適⽤
    • 実⾏コードがリポジトリと同⼀なのはすご
    く安⼼
    • 構築が⼤変
    • 柔軟な運⽤ができない

    View Slide

  37. #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の料⾦が気になる
    リポジトリから
    ⾃動適⽤
    • プルリクエストでコードのテスト
    • エラーなければ特定ブランチマージから
    ⾃動デプロイ
    • アプリケーションデプロイフローの流れ
    をインフラコードに適⽤
    • 実⾏コードがリポジトリと同⼀なのはすご
    く安⼼
    • 構築が⼤変
    • 柔軟な運⽤ができない
    皆さんには⾃信をもって
    ここに踏み込んでもらいたい

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  41. 41
    CIで実施すべきこと

    View Slide

  42. #jawsdays2021 #jawsdays2021_C
    42
    CI部分
    CI CD

    View Slide

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

    View Slide

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

    View Slide

  45. 45
    CloudFormation Linter
    (VSCodeプラグイン)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  52. 52
    cfn-python-lint

    View Slide

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

    View Slide

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

    View Slide

  55. #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

    View Slide

  56. #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

    View Slide

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

    View Slide

  58. #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で簡単にインストール可能

    View Slide

  59. #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を実⾏

    View Slide

  60. 60
    AWS CloudFormation Guard

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  67. #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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  72. 72
    CDで実施すべきこと

    View Slide

  73. #jawsdays2021 #jawsdays2021_C
    73
    CD部分
    CI CD

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  87. 87
    Rain

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  93. #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プロセス保守性が
    下がる

    View Slide

  94. 94
    まとめ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide