LoginSignup
0
0

More than 1 year has passed since last update.

【re:Invent2022】Terraform providers using AWS CloudFormation custom resources

Last updated at Posted at 2022-11-30

はじめに

アイレット エンタープライズクラウド事業部の黒野です。
本セッションはラスベガスで開催されるre:InventのDay2で開催されたセッションの感想になります。
普段からTerraformやCloudFormationを使う機会が多いので、何か学べるものがないかと思い参加してきまいした。

セッション概要

本セッションの主な内容はCloudFormationのカスタムリソースをCloudFormation、AWS CDK、Terraformそれぞれでどのように使用するのか。これについてはデモの実施もありました。
そして、Terraformのモジュール機能についてのメリットの解説となります。
IMG_8878.jpg

セッションレベル

  • 300 - Advanced

トラック

  • Customer Enablement (CEN), Architecture (ARC), CEN: BuildOn.AWS

スピーカー

  • Martijn van Dongen, Cloud Evangelist, Schuberg Philis
  • Sohan Maheshwar, Senior Developer Advocate, Amazon Web Services

参加者

  • 合計で100人くらいだと思う。キャパにだいぶ余裕はある感じがした。
  • セッション冒頭でアンケートを取っていておおよそこれくらい。
    • Terraformユーザー:7~8割
    • CloudFormationユーザー:6~7割
    • CDKユーザー:2~3割

Terraformユーザーは大体CloudFormationユーザーな印象。

概要

Terraform, AWS CloudFormation, and AWS CDK support a broad set of AWS services. Often, users want to automate more and even create resources that are not supported out of the box. In this session, explore how to build CloudFormation custom resources using your chosen programming language or Docker container. This method has been successfully used with CloudFormation and CDK, and it also works well with Terraform. Using Terraform modules, you only have to add a few lines of code to your projects to use a custom provider. Explore how this solution is designed to be secure, simple, future-proof, and reliable.

Terraform、AWS CloudFormation、および AWS CDK は、幅広い AWS のサービスをサポートしています。 多くの場合、ユーザーはより多くの自動化を希望し、すぐにはサポートされていないリソースを作成したいと考えています。 このセッションでは、選択したプログラミング言語または Docker コンテナーを使用して CloudFormation カスタム リソースを構築する方法を探ります。 この方法は、CloudFormation と CDK でうまく使用されており、Terraform でもうまく機能します。 Terraform モジュールを使用すると、プロジェクトに数行のコードを追加するだけで、カスタム プロバイダーを使用できます。 このソリューションが安全、シンプル、将来性、信頼性を確保するためにどのように設計されているかをご覧ください。

セッション内容

IMG_8880.jpg

今回デモなどで、使用するシステムはレガシーシステムであり、ユニコーンを管理?しているシステムになります。
IMG_8889.jpg

CloudFormationについて

CloudFormationの一般的な使い方が解説されていました。
IMG_8891.jpg

CloudFormationカスタムリソースについて

CloudFormationカスタムテンプレートの使い方と概要になります。

  • CloudFormationテンプレートにカスタムプロビジョニングロジックを記述する。
  • CloudFarmationリソースとして利用できないリソースを含めることができます。
    IMG_8894.jpg

カスタムリソースの仕組みとして、CloudFormation内にカスタムリソースを記述することで、LambdaからCloudFormationとしてサポートされていないリソースを作成することが可能できます。
IMG_8896.jpg

CloudFormationカスタムリソース デモ

実行するLmabda関数はAPIに対して、ユニコーンのデータをcreateするような関数となっています。

呼び出すLambdaのCloudFormationテンプレート

IMG_8902.jpg

カスタムリソースを実行するCloudFormationテンプレート

"Warner"という名前のユニコーンを追加する。
IMG_8906.jpg

実行後に"Warner"という名前のユニコーンが追加されていることを確認する。
IMG_8907.jpg

ここまでで、CloudFormationカスタムリソース終了となります。

Terraformについて

Terraformの概要、仕組みについての解説。
マルチプラットフォームに対応しているのがCloudFormationとの大きな違い。
IMG_8909.jpg

Terraform Providerについて

  • Terraformはプロバイダーと呼ばれるプラグインに依存して、クラウドプロバイダー、SaaSプロバイダーおよび、その他のAPIと対話します。
  • 各ProviderはTerraformが管理できる一連のリソースタイプやデータソースを追加します。
  • プロバイダーは依存サービスに対する複雑な操作を調整できます。
    IMG_8910.jpg

HCL(HashiCorp Configuration Language)の構文について

スライドのようにCloudFormationとの比較を行うと理解が早そうですね。
IMG_8913.jpg

Terraform moduleについて

Terraform moduleについては主に、再利用性の高さについてお話しされていました。
Terraform moduleはパッケージの様にコードを作成することで様々な環境から教諭通的なリソースの作成ができる仕組みになります。

  • 単一ディレクトリ内の一連のTerraform構成ファイル
  • 単一のディレクトリからTerraformコマンドを直接実行するとルートモジュールとみなされるため、ある意味全てのTerraform構成はモジュールの一部です。
  • モジュールはローカルファイルシステムまたは、リモートソースからロードできます。
  • ベストプラクティス
    • terraform-<プロバイダー名>-<名前>
    • モジュールを念頭に置いて設定を書き始める
      IMG_8915.jpg

Terraformでカスタムリソースを使用した場合の構成図

CloudFormationの時と使い方にさほど違いは無く、CloudFormationで実行していた部分がTerraformに置き換わっている形かと思います。
IMG_8916.jpg

おまけ

AWS CDKについても解説がありましたが、分量がかなり多くなってしまうので、
簡易的にまとめておきます。

AWS CDKについて

得意な言語で記述できるのと、ループやL2,L3コンストラクタを使用して重複したコードの記述をしなくて良くなるのがメリットだと言っていました。
(watchコマンドは CDK特有のものだけど出てこないんだ思いました。)
IMG_8929.jpg

まとめ&感想

  • セッションレベル300 - Advancedだったので少し難しい内容かと思いましたが、Terraform、CloudFormation、AWS CDK初心者の方にも大変役に立つセッションかと思います。
    • 初心者だけでなく、初心者卒業できそうくらいの方が1ステップ上がるために視聴してみると大変良いかと思います。
  • TerraformでCloudFormationカスタムリソースを実行したことが無いので、これを機に試してみたいと思いました。
  • デモが3回ありましたが、ユニコーンの名前が毎回変わり、"Warner"→"Andy"→"Jeff"でした。
  • 明日はワークショップにいくつか参加してみようと思いますので、少しテイストの違う内容をお届けできればと思います!
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0