[レポート] AWS CloudFormationの最新情報について #reinvent

本記事はre:Invent 2018のセッション「What's New with AWS CloudFormation」についてのレポートです。
2018.11.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

福岡のyoshihitohです。re:Invent 2018のセッション「What's New with AWS CloudFormation」についてレポートします。

セッション情報

セッション名

What's New with AWS CloudFormation

スピーカー

  • Manu Suresh - Software Development Engineer
  • Luis Colon - Senior Developer Advocate, AWS CloudFormation
  • Anil Kumar - Sr. Product Manager

概要

原文の引用です。

AWS CloudFormation is one of the most widely used tools in the AWS ecosystem, enabling infrastructure as code, deployment automation, repeatability, compliance, and standardization. In this session, we cover the latest improvements and best practices for AWS CloudFormation customers in particular, and for seasoned infrastructure engineers in general. We discuss new features and improvements that span many use cases, including programmability options, cross-region and cross-account automation, operational safety, and additional integration with many other AWS services. Please join us for a speaker meet-and-greet following this session at the Speaker Lounge (ARIA East, Level 1, Willow Lounge). The meet-and-greet starts 15 minutes after the session and runs for half an hour.

以下、意訳です。

  • AWS CloudFormationはAWSのエコシステムで最も広く使われているツールの1つ
  • Infrastructure as Code、デプロイの自動化、再現性、コンプライアンス、標準化といったことを実現できる
  • このセッションではAWS CloudFormationの利用者・インフラエンジニア向けに最近の改善やベストプラクティスを紹介する
  • 以下について議論する
    • 新しい機能
    • 多岐にわたる改善
    • プログラム化という選択肢
    • クロスリージョン・クロスアカウントの自動化
    • 操作の安全性
    • 他のAWSサービスとの統合

以降がセッション内容です。

AWS CloudFormationの最新情報について

ユーザ体験の再設計

  • 何万人ものユーザからいただいたフィードバックを元に再設計

各種リソースのサポート状況

  • 300種類以上のリソースに対応
  • 今年に入ってから新しく65種類のリソースを追加

CloudFormationをさらに拡張する

  • Custom Resourcesを使う
    • 下記どちらかのリソースを使って定義を追加する
      • AWS::CloudFormation::CustomResource
      • Custom::String
    • CloudFormationが対応していないリソースを扱えるようになる
    • 拡張せずに使えるAWS外のリソースって何かある?
      • Alexa::ASK::Skill でAlexaのスキルに対応してる!
    • 他にサポートして欲しい種別があればフィードバックを送ってほしい @anilsdomain

業務システムの複雑性を管理する

手動で変更した設定を検知する

  • マネジメントコンソール・CLI・AWS SDKのいずれでも検知できる
  • よく使用されるリソースでサポートしている
  • AWS Configのルールで手動変更をアラートできる
  • 実際の設定値をテンプレートの設定値で修復できる
  • 今後はより多くのリソースを対応させる
  • より良いものにするためフィードバックを!

AWS PrivateLinkサポート

  • AWS PrivateLinkはAWS内のネットワークを利用してAWSのサービスを利用するための仕組み
  • VPC内からAWS CloudFormationのAPIを実行すると、AWS内のネットワークを利用する
  • プロキシやNAT、インターネットゲートウェイは必要ない
  • インターネットを経由しないのでよりセキュアになる

StackSetsの改善

StackSetsはスタックの機能を拡張して、複数のアカウント・複数のリージョンでスタックを作成/更新/削除できるようになる

少ないコードで迅速にクロスアカウントの設定を変更する

サンドボックス環境

  • コスト管理
    • 予算の上限を設定して制御する
  • 孤立性 (Isolation)
    • 実験的なものがプロダクション環境で動作しないようにする
  • 自動クリーンアップ
    • 試し終わったら不要なリソースを破棄する

短期利用のアカウントの要件

  • AWS CloudTrailを有効化
  • IAMロール (監査・コンプライアンス・インシデント)
  • AWS Budgetsの設定 (予算超過検知)
  • Amazon SNSトピックの設定 (予算超過通知)

以前の方法: StackSetsなしの場合

  • 以下の操作で要件を満たすように各リソースをプロビジョニングする
    • アカウント作成ワークフローにステップを追加する
    • 新規アカウントにAssumeRoleする
    • AWS SDKのAPIを呼び出してリソースをプロビジョニングする

AWS SDKのAPI呼び出しの画像 (最初の1枚のみ、実際には同様のコードが4枚)

新しい方法: StackSetsを利用する場合

  1. 管理アカウントから新アカウントのStackSet実行ロールにAssumeRoleする
  2. Stackインスタンスを作成する

開発者の生産性アップ

  • 3倍早く完了する
  • コードの量は8分の1に

機密データ取扱の改善

  • Infrastructure Codeから機密情報を抜き出して外部設定にする場合
    • 2017年: Parameter Storeの StringString List を利用
    • 2018年: Parameter Storeの SecureStringSecretManager
  • 動的に参照してすぐに機密情報を取得できる

新しいマクロ

  • デプロイ時に自動で展開する命令をテンプレートに書ける
    • ユーティリティ関数の追加
      • iteration/looping
      • strings
      • others
    • 独自のルールに従ってリソースが定義されていることを保証する
    • スタックをまたぐ場合も簡単に共有・再利用できる

Iterator Macro

Making Your Macro

Deploy Your Macro

Macro: add string functions

Macro: generate additional resources

AWS CloudFormation Linter で素早くコードアシスタンスを

  • IDEのプラグインとして統合できる
  • 即座にエラーや警告を通知できる
  • 強力なバリデーション
  • オープンソース
  • ヘッドレスモードで自動化やテストに対応できる

高水準言語を使ったモデリング

  • AWS CloudFormationを使う場合は宣言的な文法(Declarative syntax)を使う
    • APIやCLIといった呼び出しの抽象化を提供する
    • 低水準言語の経験者に馴染みやすい
  • 高水準言語のDSLもある
    • JavaScript/TypeScript、Python、Ruby、etc...
    • 簡単に再利用できるように、コンポーネント化・抽象化できる

Infrastructure as Code の選択肢はどんどん増えている

  • Imperative (AWS CDK, Pulumi)
  • DSLs (Troposphere, SparkleFormation, GoFormation, etc..)
  • Decralative (CloudFormation, Terraform modules, etc..)
  • Scripted (AWS SDKs, CLIs, etc..)

AWS Cloud Development Kit (CDK) は開発者プレビュー中

おわりに

CloudFormationはAWS上で開発・運営する場合に欠かせないサービスなので、継続的にアップデートしてもらえるのは非常にありがたいですね! 新しいマクロやCDKなど、積極的に試していきたいと思います