Как получить несколько файлов и каталогов в terraform - PullRequest
0 голосов
/ 08 сентября 2018
data "archive_file" "example" {
  type        = "zip"
  output_path = "${local.dest_dir}/hello_upload.zip"

  source_file = "${local.src_dir}/hello.py"
  source_dir = "${local.src_dir}/pytz"
  source_dir = "${local.src_dir}/pytz-2018.5.dist-info"
}

обратите внимание, что hello.py нужно импортировать pytz, который не включен в Lambda, поэтому я хочу загрузить пакет.

когда я запускаю вышеупомянутую terraform, я получаю ошибку: "source_dir": конфликтует с source_file. Тогда Как я могу загрузить и мой лямбда-файл hello.py и пакет pytz, который является каталогом?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы можете сжать все файлы, необходимые для лямбды, и предоставить этот zip в качестве входных данных для лямбда-функции. Голый минимальный пример:

file structure:  
-zippedfile.zip
--pytonfile.py
--helperLib.py
-main.tf
-variables.tf

********* pythonfile.py:

   import helperLib   
   def lambda_function(event, context):
     print("this is a cool lambda function!")

********* variables.tf:

variable "aws_access_key_id" {
        default     = ""
}

variable "aws_secret_access_key" {
        default     = ""
}
variable "aws_region" {
    default = ""
}

********* main.tf:

provider "aws" {
      access_key      = "${var.aws_access_key_id}"
      secret_key      = "${var.aws_secret_access_key}"
      region          = "${var.aws_region}"
      profile         = "default"
  }

  resource "aws_iam_role" "lambda_exe_role" {
    name        = "lambda_exe_role"
    path        = "/"
    description = "Allows Lambda Function to call AWS services on your behalf."

    assume_role_policy = <<EOF
                          {
                            "Version": "2012-10-17",
                            "Statement": [
                              {
                                "Effect": "Allow",
                                "Principal": {
                                  "Service": "lambda.amazonaws.com"
                                },
                                "Action": "sts:AssumeRole"
                              }
                            ]
                          }
                          EOF
  }

  resource "aws_lambda_function" "lambda_function" {
    role             = "${aws_iam_role.lambda_exe_role.arn}"
    handler          = "pythonfile.lambda_function"
    runtime          = "python3.7"
    filename         = "zippedfile.zip"
    function_name    = "cool_lambda"
    source_code_hash = "${base64sha256(file("zippedfile.zip"))}"
  }
0 голосов
/ 22 ноября 2018

Возможно, вы сможете использовать внешний источник данных , чтобы скопировать все файлы во временный каталог и затем заархивировать этот каталог.

...