Я развертываю свое приложение реакции с использованием AWS codestar.Где я выбрал серверную лямбду с node.js.Здесь я использую пряжу, чтобы построить свой проект.Вот как выглядит мой buildspec.yml
version: 0.2
phases:
install:
commands:
# Install dependencies needed for running tests
- npm install -g yarn
# Upgrade AWS CLI to the latest version
- pip install --upgrade awscli
pre_build:
commands:
# Discover and run unit tests in the 'tests' directory
- yarn install
build:
commands:
# Use AWS SAM to package the application by using AWS CloudFormation
- yarn build
- aws s3 cp --recursive ./build s3://$WEBSITE_S3_BUCKET/build/ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
- sed -i -e "s|/assets/|$WEBSITE_S3_PREFIX/build/assets/|g" build/index.html
- aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.yml
artifacts:
type: zip
files:
- template-export.yml
Вот мой package.json
{
"name": "react-plotly-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"aws-sdk": "^2.315.0",
"plotly.js": "^1.41.1",
"react": "^16.5.2",
"react-dom": "^16.5.2",
"react-pivottable": "^0.6.0",
"react-plotly.js": "^2.2.0",
"react-scripts": "1.1.5"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}
Когда Codebuild заархивирует мой проект, его размер составит около 74 МБ.Но когда лямбда пытается распаковать ее, она прибывает на 266 МБ, что превышает допустимый размер лямбды (т.е. 262 МБ).
Мой TAKEAWAY для описанного выше сценария
Обычно aws-sdk
по умолчанию импортируется lambda, поэтому я удалил его из своих зависимостей.Затем попробуйте с помощью codebuild
, но обнаружите ошибку, подобную этой Module not found: Error: Can't resolve 'aws-sdk' in '/codebuild/output/src909458172/src/src'
, я думаю, что это вызвано, потому что я сохранил import AWS from 'aws-sdk';
в своем файле App.js.
Есть ли способ, которым я могу избежать этого?По сути, я хочу использовать aws-sdk
из aws lambda, я не хочу использовать его в моих зависимостях, потому что он стоит мне (28 МБ) размера.При его удалении будет развернут мой шаблон codestar cloudformation
.
Есть ли какие-нибудь обходные пути для этого?
Статический веб-хостинг с S3 против Lambda без сервера
Когда я развернул такое же приложение с использованием статического хостинга веб-сайтов с S3, оно просто занялосборка и чтение index.html, я не видел в нем node_modules
.Но в serverless
он принимает node_modules, а также разархивирует и читает index.html в lambda.Не знаете почему?
Любая помощь высоко ценится
Спасибо