🎲

Terraformを使ってLambdaをDeployする

2023/09/23に公開

Overview

Terraformを使用して、AWSのLambda関数をデプロイするのをやってみようと思います。今回はただデプロイして、リソースを作り出すだけなので関数を実際に使うところまではしません。
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_function
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_rest_api

summary

では早速作成していきましょう。

Terraform で Lambda をデプロイするサンプル

概要

Terraform で Lambda をデプロイするサンプルです。

前提

  • Terraform がインストールされていること
  • AWS CLI がインストールされていること
  • AWS CLI で AWS アカウントにログインしていること
  • AWS CLI で AWS アカウントにデプロイ用の権限があること

Hello Worldする関数を作成する

1. ディレクトリを作成する

mkdir hello-world
cd hello-world

2. ファイルを作成する

touch hello.js

3. ファイルに以下の内容を記述する

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello World!'),
    };
    return response;
};

4. ディレクトリをZip化する

zip -r hello.zip lambda_function

デプロイ手順とコマンド

1. Terraform の初期化

terraform init

2. デプロイ内容を確認

terraform plan

3. Terraform の実行

terraform apply

4. Terraform の破棄

terraform destroy

成功した場合は、このようにリソース(LambdaとAPI Gatewayが作られています)
コンソールで動かしてみたかったので、操作しようとしたら設定が必要だった!
ここまでは自動でやってくれないんですかね。





作った後は忘れずにコマンド使ってリソースを削除しましょう!

terraform destroy

thoughts

いつもはボタンを押してインフラの構築をしていましたが、インフラをコード化してコマンドを打つだけで構築することができたので、便利な技術を覚えることができましたが使っていて思ったのは、インフラの構築経験がないと内部で何をしているのか分からない所ですね😅
curlのコマンドを実行するところまでやろうとしましたが、うまくいきませんでした。手動でやってときはうまくいってたので、API Gatewayの設定に問題がありそうです。

完成品のコード
https://github.com/sakurakotubaki/TerraformLambda

これは実験してた時のメモ書きです
Terraformによるデプロイが成功した場合、設定ファイルにoutputブロックを追加していれば、その情報はコマンドラインの出力にも表示されます。上述のサンプルコードでは、invoke_urlという名前でAPI GatewayのエンドポイントURLを出力しています。

もし既にterraform applyを実行した後で、このoutputブロックが存在している場合、次のコマンドで再度その値を確認することができます。

terraform output invoke_url

こちらのcurlを使うのもやってみたのですが、うまくいきませんでした😇
はい、私の知識不足です。

AWS Management Consoleにログインして、API Gatewayのセクションに移動することで、手動でエンドポイントURLを確認することも可能です。具体的には、API Gatewayダッシュボードから該当するAPIを選択し、ステージ(Stage)を選びます。そこでエンドポイントURLが表示されるはずです。このURLにパス(上述の例では/myresource)を追加することで、フルのエンドポイントURLを構築できます。

ただし、Consoleで確認する手段は、Terraformでの管理とは別になるため、自動化や文書化の観点からはoutputを使用する方が好まれます。

API Gateway のエンドポイントにアクセスする

curl https://iscbh4xuih.execute-api.ap-northeast-1.amazonaws.com/test/myresource

Discussion