始めに
- AWSの開発を少しずつ行っていますが、やはりIaC(Infrastructure as Code)で開発を行っていきたいと考えました。
- その中で
terraform
やServerlessFlamework
などのツールを利用することにし、その環境構築をメモします。
動作環境
- OS
- Windows10 pro
- 利用するツール
- chocolatey : Windows用のパッケージマネージャ。各種ツールのインストールに利用
- git : 言わずもがな。terraformerのダウンロードに利用。
- AWS CLI : AWS 操作用のCLI
整備する開発環境
環境 | 公式ページ | 概要 |
---|---|---|
node.js | https://nodejs.org/ja/ | ServerlessFramework にて利用 |
ServerlessFramework | https://serverless.com/ | Lambdaのローカルでのデバッグやデプロイを行う |
terraform | https://www.terraform.io/ | AWS環境をコード管理する |
terraformer | https://github.com/GoogleCloudPlatform/terraformer | 既存環境からterraformファイルを生成する |
やること
- terraformerで既存環境のIAMのterraformファイルを抽出する
- (terraform・・・前回ある程度やったので割愛)
- Serverless Frameworkでlambdaをデプロイする
開発環境
AWS CLIのインストール
基本的には公式ガイドを参考に実施します。
初期設定
初回
PS > aws configure
AWS Access Key ID [None]: YOUR_ACCESS_KEY_ID
AWS Secret Access Key [None]: YOUR_SECRET_ACCESS_KEY
Default region name [None]: ap-northeast-1
Default output format [None]: text
- プロファイルIDを指定して作成
PS > aws configure --profile <YOUR_PROFIlE_ID>
AWS Access Key ID [None]: <YOUR_ACCESS_KEY>
AWS Secret Access Key [None]: <YOUR_SECRET_ACCESS_KEY>
Default region name [None]: <YOUR_REGION>
Default output format [None]:
terraformをインストール
# chocolateyにてterraformをインストールする
choco install terraform -y
こんな感じで認識すればOK
PS > terraform -v
Terraform v0.12.12
terraformerをインストール
公式ページを参考に実施していきます
ただし私はインストール手順の2,3がうまく動作しませんでした。 あくまで動いただけですので注意ください
2020/11/05 追記
ただし私はインストール手順の2,3がうまく動作しませんでした。
上記の件、下記リンクのようにGoをインストールするといけるようです。
@MarvelWorksJp さん、情報ありがとうございました。
参考URL
https://qiita.com/yoskeoka/items/0dcc62a07bf5eb48dc4b
# terraformerをクローンするローカルディレクトリに移動
cd <YOUR_DIRECTORY>
# gitからクローンする
git clone https://github.com/GoogleCloudPlatform/terraformer.git
# システム環境変数にterraformerのディレクトリパスを設定
# !! システム環境変数の設定は十分注意してください !!
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";<YOUR_DIRECTORY>\terraformer", [EnvironmentVariableTarget]::Machine)
こんな感じで認識すればOK
PS > terraformer --version
version v0.8.4
Serverless Frameworkをインストール
npm install -g serverless
こんな感じで認識すればOK
PS > serverless -v
Framework Core: 1.55.1
Plugin: 3.2.0
SDK: 2.1.2
Components Core: 1.1.2
Components CLI: 1.4.0
実際に使ってみる
AWS に対して、Terraformer
、Terraform
、serverless framework
をお試ししてみます
Terraformer
-
今回はaws cliにて設定したプロファイル
<YOUR_PROFIlE_ID>
のIAM情報を抜き出してみます -
詳しい使い方は以下参照
# terraformファイルを管理する任意のディレクトリに移動
cd <YOUR_TERRAFORM_DIRECTORY>
# AWSをプロバイダ設定したinit.tfファイルを新規生成
echo 'provider "aws" {}' | Set-Content "init.tf" -Encoding utf8
# terraformの初期化
terraform init
# terraformerにてインポートを実行
terraformer import aws --resources=iam --regions=ap-northeast-1 --profile=<YOUR_PROFIlE_ID>
- 下記のようにgeneratedフォルダ配下に出力したterraformファイルができていればOK
PS > tree
Folder PATH listing
Volume serial number is 1A12-01D8
C:.
├───.terraform
│ └───plugins
│ └───windows_amd64
└───generated
└───aws
└───iam
ServerlessFramework
ローカルに環境を作成する
# ServerlessFrameworkファイルを管理する任意のディレクトリに移動
cd <YOURE_SERVERLESS_DIRECTORY>
# ServerlessFramework環境の作成
serverless create --template aws-python3 --path lambda-test
- 下記のようにプロジェクトフォルダが生成される
PS > tree /f
Folder PATH listing
Volume serial number is 1A12-01D8
C:.
└───lambda-test
.gitignore
handler.py
serverless.yml
デプロイする
- 下記の公式ページを参考に serverless.yml
を対象のAWS環境に合わせて任意の内容に変更します。
serverless.yml
service: lambda-test
provider:
name: aws
runtime: python3.7
+ region: ap-northeast-1 # 追加
+ profile: default # 追加
+ role: <YOUR_ROLE> # 追加 ・・・今回は既存のroleを利用しましたが、新規作成の場合はresourcesにて作成してください
functions:
hello:
handler: handler.hello
ちなみにhandler.py
は今回編集してませんが、こんな感じになっています
handler.py
import json
def hello(event, context):
body = {
"message": "Go Serverless v1.0! Your function executed successfully!",
"input": event
}
response = {
"statusCode": 200,
"body": json.dumps(body)
}
return response
# Use this code if you don't use the http event with the LAMBDA-PROXY
# integration
"""
return {
"message": "Go Serverless v1.0! Your function executed successfully!",
"event": event
}
"""
- デプロイを実行します
# 作成された`lambda-testディレクトリに移動
cd .\lambda-test
# デプロイを実行
serverless deploy -v
こんな感じになればOK
最後に
- 今回
terraformer
を利用できるようになったことで、すでに構築した環境のterraform化やAWSの環境構築をコンソールをポチポチと手探りでしたのちに作成することができるようになりましたので活用していきたいと思います。 - また
ServerlessFramework
によってLambdaの開発も効率化できそうですのでいろいろ使ったみたいと思います