gpt4 book ai didi

amazon-web-services - 如何在 Terraform 中配置 CloudWatch Lambda Insights

转载 作者:行者123 更新时间:2023-12-03 21:07:11 25 4
gpt4 key购买 nike

我需要使用 Terraform 为 lambda 启用“CloudWatch Lambda Insights”,但找不到文档。我如何在 Terraform 中做到这一点?
注意:这个问题How to add CloudWatch Lambda Insights to serverless config?可能是相关的。

最佳答案

aws_lambda_function 中没有“ bool 开关”您可以设置为 true 的 AWS Terraform 提供程序的资源,这将启用 Cloudwatch Lambda Insights。
幸运的是,您可以自己完成此操作。以下 Terraform 定义基于此 AWS 文档:Using the AWS CLI to enable Lambda Insights on an existing Lambda function
该过程包括两个步骤:

  • 为您的 Lambda 添加一个层
  • 将 AWS 策略附加到您的 Lambdas 角色。

  • Terraform 定义如下所示:
    resource "aws_lambda_function" "insights_example" {
    [...]

    layers = [
    "arn:aws:lambda:us-east-1:580247275435:layer:LambdaInsightsExtension:14"
    ]
    }

    resource "aws_iam_role_policy_attachment" "insights_policy" {
    role = aws_iam_role.insights_example.id
    policy_arn = "arn:aws:iam::aws:policy/CloudWatchLambdaInsightsExecutionRolePolicy"
    }
    重要 : arn每个区域的层数不同。我上面链接的文档有一个 link到他们的名单。此外,如果您的 Lambda 位于 VPC 中,则需要一个额外的步骤,您可以在文档中阅读。所描述的“VPC 步骤”也可以放入 Terraform。

    对于 future 的读者:在我的例子中该层的版本是 14 .这会随着时间而改变。所以请不要只是复制和粘贴那部分。按照提供的链接查找该层的当前版本。

    最小、完整和可验证的示例
    测试:
    Terraform v0.14.4
    + provider registry.terraform.io/hashicorp/archive v2.0.0
    + provider registry.terraform.io/hashicorp/aws v3.24.0
    在文件夹中创建以下两个文件( handler.pymain.tf )。然后运行以下命令:
  • terraform init
  • terraform plan
  • terraform apply

  • 除了部署所需的资源外,它还将创建一个包含 handler.py 的 zip 存档。这是 aws_lambda_function 使用的部署工件资源。所以这是一个多合一的例子,不需要进一步的压缩等。
    handler.py
    def lambda_handler(event, context):
    return {
    'message' : 'CloudWatch Lambda Insights Example'
    }
    main.tf
    terraform {
    required_providers {
    aws = {
    source = "hashicorp/aws"
    version = "~> 3.0"
    }
    }
    }

    provider "aws" {
    region = "us-east-1"
    }

    resource "aws_lambda_function" "insights_example" {
    function_name = "insights-example"
    runtime = "python3.8"
    handler = "handler.lambda_handler"
    role = aws_iam_role.insights_example.arn
    filename = "${path.module}/lambda.zip"

    layers = [
    "arn:aws:lambda:us-east-1:580247275435:layer:LambdaInsightsExtension:14"
    ]

    depends_on = [
    data.archive_file.insights_example
    ]
    }

    resource "aws_iam_role" "insights_example" {
    name = "InsightsExampleLambdaRole"
    assume_role_policy = data.aws_iam_policy_document.lambda_assume.json
    }

    resource "aws_iam_role_policy_attachment" "insights_example" {
    role = aws_iam_role.insights_example.id
    policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
    }

    resource "aws_iam_role_policy_attachment" "insights_policy" {
    role = aws_iam_role.insights_example.id
    policy_arn = "arn:aws:iam::aws:policy/CloudWatchLambdaInsightsExecutionRolePolicy"
    }

    data "aws_iam_policy_document" "lambda_assume" {
    statement {
    effect = "Allow"
    actions = ["sts:AssumeRole"]

    principals {
    type = "Service"
    identifiers = ["lambda.amazonaws.com"]
    }
    }
    }

    data "archive_file" "insights_example" {
    type = "zip"
    source_file = "${path.module}/handler.py"
    output_path = "${path.module}/lambda.zip"
    }

    关于amazon-web-services - 如何在 Terraform 中配置 CloudWatch Lambda Insights,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65735878/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com