LoginSignup
6
0

More than 1 year has passed since last update.

TerraformからAWSリソースについて知る

Last updated at Posted at 2022-12-21

はじめに

本記事はProgaku Advent Calendar 2022 22日目担当です。

Terraformとは、IaaSを実現するためのツールの1つで、AWSGCPAzureだけでなくsnowflakeElasticsearchなどのリソースも構築できます。

私はここ最近、そんなTerraformでAWSを始めとしたいくつかのリソースを作成することを行っていました。その中で、ドキュメントからAWSリソースについて多くの学びを得ることできました。
そこで、本記事ではTerraformのドキュメントからAWSリソースについてを深堀っていきたいと思います。
このアドベントカレンダーを主宰しているProgakuはプログラミング学習コミュニティなので、せっかくですので技術の学習に重きをおいた記事を一筆してみようと思い立った次第です。

対象リソース

AWSリソースだけでもいくつあんねん……となるので、リソースを絞ります。
今回はAWS Lambdaについて深堀っていきます。
そもそもlambdaってなに? を解説するとそれだけで1記事になりそうなので、われらがクラスメソッドさんの再入門ブログリレーをご参考ください。(いつもお世話になっております)

僕の方でもざっくり説明すると、なんらかのイベントをトリガーにプログラムを動作させるサービスです。サッと調べた感じではFaaSやサーバレスの文脈で出てきていそうです。
なんでlambdaかというと、記事をかけそうなリソースがlambdaだったからです。

lambdaのTerraformについてのドキュメントは以下となります。

それでは見ていきましょう。

見てみる

上の方に概要とかサンプルとか、たくさん並んでいてドキュメントとして素晴らしいですが、Terraformについて知っていかないと分からない
んで飛ばします。今回見たいのはArgument Referenceです。
必須項目に function_namerole があり、一度リソースの作成を行ったことがある方はでしょうねとなるはずです。

roleってなに?となった方はIAMについて調べてみてください。

lambdaにもどってオプショナルな引数を見てもたくさんあります。さすがにこれ全部はキツいので強引ながら私の進めたい方向に進ませていただきます。
ザーッと眺めていくと

  • s3_bucket - (Optional) S3 bucket location containing the function's deployment package. Conflicts with filename and image_uri. This bucket must reside in the same AWS region where you are creating the Lambda function.
  • s3_key - (Optional) S3 key of an object containing the function's deployment package. Conflicts with filename and image_uri.

と記載があります。
翻訳してみましょう。

  • s3_bucket - (Optional) 関数のデプロイパッケージを含む S3 バケットの場所。 filename および image_uri と競合します。このバケットは、Lambda 関数を作成しているのと同じ AWS リージョンに存在する必要があります。
  • s3_key - (Optional) 関数のデプロイ パッケージを含むオブジェクトの S3 キー。 filename および image_uri と競合します。

関数のデプロイパッケージ? S3リソースへのCRUDイベントをトリガーとしたlambdaの発火はできますが、それとは違いそう。

では何なのか? 調べてみます。
ソッコー見つかりました。Lambda デプロイパッケージ
ドキュメントを読むに、lambdaへデプロイするプログラムを置くのにS3を用いるみたいです。

デプロイパッケージのサイズが 50 MB を超える場合は、関数のコードと依存関係を Amazon S3 バケットにアップロードしてください。
デプロイパッケージを作成し、Lambda 関数を作成する AWS リージョンの Amazon S3 バケットに .zip ファイルをアップロードできます。Lambda 関数を作成する際は、Lambda コンソール上または AWS CLI を使用して S3 バケット名とオブジェクトキー名を指定します。

一番下にこのような記載があり、合点がいきましたね。
私の偏見ではありますが、lambdaに.zipファイルで上げるといえばGoなので、 terraform s3 go lambda という浅いワードで検索してみます。
すると以下の記事に当たりました。

上記の記事には以下の記載があり、 source_code_hash についてもわかりました。

source_code_hash
このattributeは関数の再デプロイのトリガーに使われます。この値が更新されると再デプロイされます。
Must be set to a base64-encoded SHA256 hash of the package file
という要件があります。
ローカルのデプロイパッケージを使う場合は filebase64sha256("file.zip") とか base64sha256(file("file.zip")) といった方法が使えます。

Terraformのドキュメントを読んでも

アップデートのトリガーに使用されます。
filenameまたはs3_keyで指定されたパッケージファイルをbase64エンコードしたSHA256ハッシュを設定する必要があります。
通常の設定方法は
filebase64sha256("file.zip") (Terraform 0.11.12 以降)
または
base64sha256(file("file.zip")) (Terraform 0.11.11 以降)
で、ここで "file.zip" はラムダ関数ソースアーカイブのローカルファイル名と同じです。

とクラスメソッドさんの記事の内容を小難しくした記載があります。
TerraformはあくまでIaaSであるため、このようにlambdaリソース自体以外の引数もある点に注意です。

終わりに

読んで頂きありがとうございました。
AWSリソースを学ぶための1手法としてTerraformを紹介しましたが、Terraformに限らずAWS SDKのドキュメントから学んでもいいかと思います。
私はAWSを触るときはPythonとGoを用いるので、

の2つを紹介しておきます。
以上、Progaku Advent Calendar 2022 22日目の「ここ最近見つけたAWSリソースとの仲よくなり方」でした。

6
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
6
0