続:Terraformに入門してみた(Lambda)

続: Terraform入門 これ や これ の続き。 今回は terraformで lambdaを管理してみる。ただし terraform での Lambdaの管理は辛いというような意見が散見されるので、良い方法ではないと思われる。 まぁあくまでも入門ということで。 公式はページ ここ terraformのコード data "archive_file" "lambda_zip" { type = "zip" source_dir = "${path.module}/src" output_path = "${path.module}/lambda_function_payload.zip" } resource "aws_lambda_function" "test_lambda" {# zipで固めたソースコードを指定する。ライブラリも含めて固める必要がある filename = "lambda_function_payload.zip"# Lambdaの関数名 function_name = "lambda_function_name"# Lambdaの利用するrole のarnを指定する role = "${aws_iam_role.iam_for_lambda.arn}"# 呼び出しのhandlerとなる関数 handler = "exports.test"# SHA256のhashをbase64でエンコードしたもの。 # zip化したファイル名を指定してあげれば良い。 source_code_hash = "${filebase64sha256("lambda_function_payload.zip")}"# 利用するランタイム, # pythonなら"python3.6" といった感じにかける。 runtime = "nodejs8.10"# タイムアウトの秒数指定 timeout = 300# 環境変数 environment { variables = { foo = "bar" } } } 注意点 Lambdaのソースコード自体は archive_fileで固めることができるが、 source_dir 、output_pathは相対パスだとうまく動かなかったので、 ${path. [続きを読む]

続:Terraformに入門してみた(VPC/サブネット/ピアリング等)

続:Terraform入門 これ の続き。 今回はVPCを2つ作って、サブネット、ルートテーブル、ピアリングまで実施する。 作るネットワーク VPC1, VPC2の2つがある。 VPC1, VPC2ともに public用のサブネットを持つ。 またインターネットゲートウェイもそれぞれ持つ。 publicサブネット同士をルーティングする。 publicからインターネットゲートウェイを抜けて外にアクセスできるようにする。 terraformのコード グローバルIPを使ってしまっているが、サンプルということで… ## 1つ目のVPCの設定とIGW resource "aws_vpc" "vpc01" { cidr_block = "192.165.0.0/16" tags = { Name = "vpc01" } } resource "aws_subnet" "subnet-vpc01-public" { vpc_id = aws_vpc.vpc01.id cidr_block = "192.165.0.0/24" availability_zone = "ap-northeast-1a" tags = { Name = "subnet-vpc01-public" } } resource "aws_internet_gateway" "igw-vpc01" { vpc_id = aws_vpc.vpc01.id tags = { Name = "igw-vpc01" } }## 2つ目のVPCの設定とIGW resource "aws_vpc" "vpc02" { cidr_block = "192. [続きを読む]

Terraformに入門してみた

Terraform使い始めた 仕事でterraformを使い始めたのでメモしておく。 なお、AWSと一緒に使う場合を記載する。 公式サイト https://www.terraform.io/ 対応してるIaaS等 https://www.terraform.io/docs/providers/index.html 意外とたくさん対応しているが、awsと組み合わせて使っている人が多いと思う。 Terraformでは一括して provider と呼んでいるようだ。 インストール Installing Terraform terraformはgoで作られているので各種環境に合わせたバイナリが用意されている。 したがってダウンロードしたバイナリをパスの通ったところに設置するだけで良い。 簡単で良い。 AWSと組み合わせて使う ※おそらくaws cliを使えるようにしておく必要はないと思うが、やっておいたほうが楽なのでおすすめ。 まずはsecretとaccess keyをAWSコンソールから発行する。 次にaws configureを実行しておく。 aws configure 出てくる内容に従って設定する。この辺はawsサイト見ればわかる。 *.tfファイルのフォーマット getting-started Build Infrastructure 公式ではJSONファイルでもかけるが、機械的に生成されたもののみJSONを使うことが推奨されているため、きちんとterraformのフォーマットに従って書いたほうが良いと思う。 Configuration files can also be JSON, but we recommend only using JSON when the configuration is generated by a machine. 個人的にも、JSONはコメントが書けないこともあり、構成ファイル等のフォーマットとしてはいまいちだと思う(yamlの方が良い) しかしAWSはpolicyなど設定する場合だいたいJSONである… awsにインスタンスを自動で立てるチュートリアル ここからawsにインスタンスを自動作成するチュートリアルを実施する。 注)Terraformのドキュメントはかなり丁寧に書かれているので、英語が苦でないならそちらを読むことをおすすめする。 初めてのtfファイル example.tfは以下の通り。 provider "aws" { profile = "default" region = "ap-northeast-1" } resource "aws_instance" "example" { ami = "ami-2757f631" instance_type = "t2. [続きを読む]