0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS SDKからTerraformへの移行4

0
Posted at

現状の整理

API Gateway(aws_api_gateway_*): 未定義(Terraform側) → 未着手
Lambda(aws_lambda_function): 未定義 → 未着手
DynamoDB(aws_dynamodb_table.session): importでplanまでしている
S3 バケット(slides_raw):  importでplanまでしている
CloudWatch Alarm / SNS / Budgets: 未定義 → 未着手

ここまでやったよ。

terraform state listを実行
↓
data.aws_caller_identity.current
aws_dynamodb_table.session
aws_s3_bucket.slides_raw
aws_s3_bucket_public_access_block.slides_raw
aws_s3_bucket_server_side_encryption_configuration.slides_raw

ok
こういう手順にしていく。

- Lambda 用の IAM ロールと権限を作る
- DynamoDB と S3 にアクセスできるようにする(lamdbaとS3dynamoにアクセスするため)
- Lambda 本体を Terraform で定義する (今のapi functionsに相当)
- API Gateway を Terraform で定義する
- CloudWatch Alarm / SNS / Budgets 

ここあたりをmain.tfに追加完了

aws_iam_role
→ LambdaがAWSリソースを操作するためのIAMロールを作成
aws_iam_role_policy_attachment
→ LambdaにCloudWatch Logsへの書き込み権限を付与
aws_iam_role_policy
→ LambdaにDynamoDBとS3へのアクセス権限を付与
aws_lambda_function
→ Node.jsで動くAPI(IppunIchieApi)をLambdaとして定義
aws_cloudwatch_log_group
→ Lambdaの実行ログをCloudWatch Logsに保存する場所を作成

依存関係
Lambdaを単体で作るのではなく、既存のDynamoDB・S3と接続する構成にした。

DynamoDB
   ↑
   │ アクセス権限
   │
Lambda ← IAM Role
   │
   │ アクセス権限
   ↓
  S3

Lambda
   ↓
CloudWatch Logs

IAM Role
→ Lambdaが使用する権限の土台
IAM Policy
→ LambdaからDynamoDB・S3を操作できる権限を付与
Lambda
→ 作成したIAM Roleを使用してDynamoDB・S3へアクセス
Lambda
→ CloudWatch Logsへ実行ログを出力

Terraformでは、

role = aws_iam_role.lambda.arn
や、
TABLE_NAME = aws_dynamodb_table.session.name
SLIDES_RAW_BUCKET = aws_s3_bucket.slides_raw.bucket

のように既存リソースを参照することで、リソース間の依存関係を定義している

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?