DEA / ドメイン1 データの取り込みと変換

IaC (CloudFormation・CDK・SAM)

(Infrastructure as Code) は、 、 ジョブ、 関数、 のステートマシン、 ロールなどのリソースを、手作業ではなくコード (テンプレート) で定義してデプロイする考え方です。同じテンプレートから開発・検証・本番の環境を何度でも同じ形で作れます。

DEA では、、、 の役割の違いと、のデータパイプラインを SAM でパッケージ化してデプロイする流れが問われます。

Point
  • IaC = Infrastructure as Code (コードとしてのインフラストラクチャ) の略です。
  • CDK = Cloud Development Kit の略で、Python や TypeScript などのプログラミング言語でインフラを書く道具です。
  • SAM = Serverless Application Model の略で、サーバーレスのアプリケーションを短く書くための CloudFormation の拡張です。
  • 和訳

概要

3つの道具は、最終的にどれも のスタックとしてデプロイされます。違いは「何で書くか」です。

概要の図 cdk synth 変換 Transform AWS CDKPython / TypeScript など CloudFormationテンプレート AWS SAM テンプレート短い記法 CloudFormation テンプレートYAML / JSON スタックS3・Glue・Lambda・Step FunctionsDynamoDB・IAM
道具書き方向く場面
CloudFormation / で宣言的に書きますすべての基本。リソースを明示的に定義したいとき
プログラミング言語で書き、CloudFormation テンプレートを生成しますループや条件、共通部品の再利用でテンプレートを短くしたいとき
CloudFormation に短い記法を足したテンプレートと SAM CLI、、 などの構成をまとめて作り、ローカルでも試したいとき

試験では、「手作業の設定をやめ、環境ごとに同じ構成を再現したい」は 、「サーバーレスのデータパイプラインをパッケージ化してデプロイしたい」は SAM、を選びます。


主要技術

①CloudFormation のスタックと変更セット ⚠️ 頻出

は、テンプレートに書いたリソースをまとめて「スタック」として作成、更新、削除します。

機能内容データパイプラインでの使い方
パラメータデプロイ時に値を渡します環境名 (dev / prod)、名、ワーカー数を変えます。
変更セット更新の前に、どのリソースが追加・変更・置き換え・削除されるかを確かめます本番の ジョブや の設定変更を事前に確認します。
ロールバック作成や更新に失敗したら元の状態に戻します途中まで作られた中途半端な環境を残しません。
DeletionPolicy / UpdateReplacePolicyスタックの削除やリソースの置き換えでデータを消さないようにします バケットや のテーブルに Retain や Snapshot を指定します。
削除保護 (termination protection)スタックそのものを削除できないようにします本番のスタックの誤削除を防ぎます。スタックを消しつつデータだけ残したい場合は DeletionPolicy を使います。
ドリフトの検出テンプレートと実際の設定のずれを見つけます誰かがコンソールで手作業の変更をしていないか確かめます。
StackSets複数のアカウントとに同じスタックを展開します各アカウントに同じログ用バケットを作ります。
出力 (Outputs) とエクスポート作ったリソースの値を他のスタックへ渡します共通のバケット名を別のスタックで参照します。

⚠️ 頻出: データを持つリソース (S3 バケット、DynamoDB のテーブル、) は、スタックの削除やリソースの置き換えでデータが消えないよう、DeletionPolicy を Retain (Snapshot に対応するものは Snapshot) にします。


②AWS CDK のコンストラクト

では、リソースを「コンストラクト」という部品として扱います。

レベル内容例
L1 のリソースと1対1の低レベルの部品CfnJob ( ジョブ)
L2使いやすい既定値とメソッドを持つ部品Bucket。bucket.grantRead(role) で必要な ポリシーを自動で作ります。
L3 (パターン)複数のリソースをまとめた構成「キュー + 処理用の 」をまとめた部品

cdk synth で CloudFormation テンプレートを生成し、cdk diff で差分を確かめ、cdk deploy でデプロイします。プログラミング言語で書けるため、たとえば「10 個のテーブルごとに同じ形の Glue ジョブを作る」といった繰り返しをループで書けます。単体テストのフレームワークでテンプレートの中身をテストすることもできます。


③AWS SAM でサーバーレスパイプラインをデプロイ ⚠️ 頻出

テンプレートは、先頭に Transform: AWS::Serverless-2016-10-31 を書いた テンプレートです。用の短い記法のリソースが使えます。

SAM のリソース作られるもの
AWS::Serverless::Function 関数、実行ロール、イベントソース (、、、スケジュールなど)
AWS::Serverless::StateMachine のステートマシンとロール
AWS::Serverless::SimpleTable主キーだけを持つ簡単な テーブル
AWS::Serverless::Api の
AWS::Serverless::LayerVersionLambda レイヤー

SAM のポリシーテンプレート (例: S3ReadPolicy、DynamoDBCrudPolicy) を使うと、の ポリシーを短く書けます。DynamoDB の複雑な設定 ( など) が必要なら、同じテンプレートに通常の AWS::DynamoDB::Table を書けます。

SAM CLI の主なコマンドは次のとおりです。

コマンド役割
sam build関数のコードと依存パッケージをビルドします。
sam local invokeLambda 関数をローカルので実行して試します。
sam packageコードを S3 にアップロードし、参照を書き換えたテンプレートを作ります (sam deploy が内部でも行います)。
sam deployCloudFormation の変更セットを作ってデプロイします。--guided で対話的に設定できます。
sam sync開発中の変更をクラウドへすばやく反映します。
③AWS SAM でサーバーレスパイプラインをデプロイ ⚠️ 頻出の図 Lambda のコードステートマシン定義template.yaml sam build sam local invokeローカルで試す sam deployS3 へアップロードし変更セットでデプロイ スタックLambda + Step Functions + DynamoDB

⚠️ 頻出: 「Lambda 関数、Step Functions のワークフロー、DynamoDB テーブルから成るサーバーレスのデータパイプラインを、まとめてパッケージ化してデプロイしたい」は AWS SAM です。

SAM は CodeDeploy と組み込みで連携し、Lambda 関数を段階的にデプロイできます。関数に AutoPublishAlias (新しいバージョンを発行し、エイリアスをそれに向ける) と DeploymentPreference (Canary10Percent5Minutes や Linear10PercentEvery1Minute などの移し方、ロールバックのきっかけにする 、切り替え前後の検証用の関数) を書くと、トラフィックを少しずつ新しいバージョンへ移し、アラームが鳴れば自動で戻します。なお sam sync は開発中にすばやく反映するためのもので、本番の環境には sam deploy を使います。


④反復可能なデプロイの作り方

で同じ構成を何度でも再現するための工夫です。

工夫内容
環境の差はパラメータで渡すテンプレートは1つにし、環境名やサイズをパラメータで変えます。ハードコードを避けます。
名前は自動生成か、環境名を含める同じアカウントで複数の環境を作っても名前が衝突しないようにします。
機密情報はテンプレートに書かないパスワードは や Parameter Store を参照します (動的参照)。
テンプレートを Git で管理変更の履歴とレビューを残し、 でデプロイします (#29)。
手作業の変更をしないドリフトを生まないよう、変更はテンプレート経由に限ります。

試験対策

①判断マトリクス

問題文のキーワード選ぶもの理由
手作業の構築をやめ、同じ環境を繰り返し作りたい ()テンプレートから何度でも同じスタックを作れます。
プログラミング言語でインフラを書き、部品を再利用したいコンストラクトとループで定義を短くできます。
・・ をまとめてパッケージ化・デプロイ向けの短い記法と SAM CLI があります。
Lambda をデプロイ前にローカルで試したいsam local invokeローカルので実行できます。
本番の更新前に影響を確かめたい変更セット (CDK なら cdk diff)置き換えや削除が起きるかを事前に確認できます。
スタックを消してもデータは残したいDeletionPolicy: Retain / Snapshot や DynamoDB のデータを保護します。
複数アカウント・に同じ構成CloudFormation StackSets一括で展開できます。
コンソールでの手作業の変更を見つけたいドリフトの検出テンプレートとのずれを検出します。

②よくある誤答

  • と を別物と考えること。SAM は CloudFormation の拡張で、デプロイは CloudFormation のスタックとして行われます。
  • でデプロイすると CloudFormation を使わないと考えること。CDK は CloudFormation テンプレートを生成してデプロイします。
  • テンプレートにデータベースのパスワードを直接書くこと。 などを参照します。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください