【问题标题】:how to start AWS SAM using a dockerfile如何使用 dockerfile 启动 AWS SAM
【发布时间】:2019-09-06 03:15:37
【问题描述】:

我正在尝试构建两个受Containerizing Serverless APIs 启发的 docker 容器。我想在我的Dockerfile(用于 API)和localstack(在 docker-compose.yml 中指定)为我的本地 DynamoDB 指定的两个不同容器中本地运行我的 API 和 DynamoDB。这些文件在下面共享。

它在为我的 API 构建容器后退出,如下日志所示。

Successfully built e0798a6833ce
Successfully tagged hafiz/hafiz_aws_api_gateway:latest
Starting dynamodb_localstack ... done
Recreating hafiz_aws_api_gateway ... done
Attaching to dynamodb_localstack, hafiz_aws_api_gateway
dynamodb_localstack | Starting mock DynamoDB (http port 8000)...
dynamodb_localstack | Ready.
dynamodb_localstack | (. .venv/bin/activate; exec bin/localstack start)
dynamodb_localstack | Starting local dev environment. CTRL-C to quit.
dynamodb_localstack | Starting mock DynamoDB (http port 8000)...
dynamodb_localstack | Ready.
dynamodb_localstack | (. .venv/bin/activate; exec bin/localstack start)
dynamodb_localstack | Starting local dev environment. CTRL-C to quit.
dynamodb_localstack | Starting mock DynamoDB (http port 8000)...
dynamodb_localstack | Ready.
dynamodb_localstack | 2019-04-16 05:01:01,975 INFO Set uid to user 0 succeeded
dynamodb_localstack | 2019-04-16 05:01:01,977 INFO supervisord started with pid 12
hafiz_aws_api_gateway | sam_local_start_api.sh: 1: sam_local_start_api.sh: sam: not found
hafiz_aws_api_gateway exited with code 127

这是我的 docker-compose.yml

version: '3'
# builds the api container and sets up the localstack container to run
services:
  api:
    build: .
    image: hafiz/hafiz_aws_api_gateway
    depends_on:
      - localstack
    ports:
      - '3000:3000'
    container_name: hafiz_aws_api_gateway
    # these are the environment variables that are used in the api
    environment:
      AWS_ENDPOINT: 'http://dynamodb_localstack:8000' # localstack container host for dynamodb
      AWS_REGION: 'localhost'
      AWS_ACCESS_KEY_ID: 'fake-access-key-id'
      AWS_SECRET_ACCESS_KEY: 'fake-secret-key'
      AWS_TABLE_NAME: 'hafizItemTable'

  localstack:
    image: localstack/localstack:latest
    ports:
      - '8000:8000' # using port 8000 to be consistent with dynamodb local jar
      - '8080:8080' # the localstack admin portal
    container_name: dynamodb_localstack
    environment:
      SERVICES: dynamodb:8000
      DATA_DIR: '/tmp/localstack/data'

这是我的dockerfile

# use this dockerfile to build an image for this api

FROM node:8.10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install

COPY . .

EXPOSE 3000

CMD ["sh", "sam_local_start-api.sh"

我的 package.json

...
"scripts": {
    "seed": "node ./seed/runner.js",
    "start": "sam local start-api",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
...

我的问题是如何在我的 docker 文件中指定将触发 AWS SAM CLI 命令的 CMD 命令:

sam local start-api

或者是否有更好的方法来启动脚本?

【问题讨论】:

标签: node.js amazon-web-services docker amazon-dynamodb


【解决方案1】:
CMD ["sh", "sam_local_start.sh"]

改为:

CMD ["npm","run","start"]

它将在package.json中定义的容器终端上触发运行命令:sam local start-api

首先确保sam 工具已安装在容器中。

【讨论】:

    猜你喜欢
    • 2021-07-07
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    相关资源
    最近更新 更多