Terraform local_file на CircleCI не может найти файл - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь развернуть лямбда-функции, используя terraform более CircleCI

resource "aws_lambda_function" "demo_function" {
  function_name = "my-dummy-function"
  handler = "index.handler"
  role = "${var.IAM_LAMBDA_ARN}"
  filename = "${var.API_DIR}"
  source_code_hash = "${base64sha256(data.local_file.dist_file.content)}"
  runtime = "nodejs8.10"
}

data "local_file" "dist_file" {
  filename = "${var.API_DIR}"
}

Ошибка

on lambda/main.tf line 10, in data "local_file" "dist_file":
  10: data "local_file" "dist_file" {

Все переменные в порядке,Локальное развертывание также работает нормально.Пробовал также с разными версиями Terraform (0.11.xx и 0.12.0)

.circleci / config.yml

version: 2
jobs:
  build:
    working_directory: ~/tmp
    docker:
      - image: circleci/node:8
      - image: hashicorp/terraform
    steps:
      - checkout
      - restore-cache:
          keys:
            - v1-dependencies-{{ checksum "backend/package.json" }}
            - vi-dependencies-
      - run:
          name: Installing modules
          command: cd backend/ && npm ci
      - save-cache:
          paths:
            - ./backend/node_modules
          key: v1-dependencies-{{  checksum "backend/package.json" }}
      - run:
          name: Building backend code
          command: cd backend/ && npm run build
      - persist_to_workspace:
          root: backend/dist
          paths:
            - terraform_demo-api.zip

  deploy:
    working_directory: ~/tmp
    docker:
      - image: alpine:3.8
    steps:
      - run:
          name: Setting up
          command: apk update && apk add ca-certificates openssl wget && update-ca-certificates
      - run:
          name: Installing
          command: |
            wget https://releases.hashicorp.com/terraform/0.12.0/terraform_0.12.0_linux_amd64.zip
            apk add --update git curl openssh make python py-pip groff less unzip
            unzip terraform_0.12.0_linux_amd64.zip -d /bin
            rm -f terraform_0.12.0_linux_amd64.zip
            pip install --quiet --upgrade pip && \
            pip install --quiet awscli==1.14.5

      - checkout
      - attach_workspace:
          at: infrastructure/lambda
      - restore-cache:
          keys:
            - v1-infrastructure-{{ checksum "infrastructure/.terraform/terraform.tfstate" }}
      - run:
          name: Initialising terraform
          command: cd infrastructure/ && terraform init -reconfigure -force-copy -backend=true -backend-config "bucket=geet-tf-state-bucket" -backend-config "key=terraform.tfstate" -backend-config "region=us-west-2"
      - run: cd infrastructure/lambda/ && cat terraform_demo-api.zip >> api.zip
      - run:
          name: Executing plan
          command: cd infrastructure/ && terraform plan -var="UI_BUCKET_NAME=$UI_BUCKET_NAME" -var="API_DIR=$API_DIR" -var="AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID" -var="AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY" -out .terraform/service.tfplan
      - run:
          name: Applying infrastructure
          command: cd infrastructure/ && terraform apply -auto-approve .terraform/service.tfplan
      - save-cache:
          paths:
            - ./infrastructure/.terraform
          key: v1-infrastructure-{{  checksum "infrastructure/.terraform/terraform.tfstate" }}

workflows:
  version: 2
  build_and_deploy:
    jobs:
      - build
      - deploy:
          requires:
            - build

На случай, если сказать, чтопуть к файлу может отличаться, или я могу использовать $ {path.module}, я попытался получить доступ к локальному файлу (пример output.tf) из того же каталога, но все же я получаю проблему с файлом не найден.

...