К основному содержанию
скилл CX Codex

aws-lambda-php-integration — скилл для Claude Code: PHP и Symfony

Скилл подсказывает агенту, как развернуть PHP или Symfony на AWS Lambda через Bref: обработчики, слои рантайма, триггеры SQS/SNS и холодный старт.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add giuseppe-trisciuoglio/developer-kit --skill aws-lambda-php-integration -a claude-code
Открыть на GitHub

Что делает aws-lambda-php-integration

Скилл описывает два пути. Первый — Bref: стандартный PHP на Lambda с поддержкой Symfony, встроенной маршрутизацией и холодным стартом меньше 2 секунд. Второй — чистый PHP: минимум накладных расходов, холодный старт меньше 500 мс, но всё пишете сами.

Внутри — шаблоны классов-обработчиков, структура проекта для Symfony и для голого PHP, конфигурация serverless.yml, кэширование клиентов AWS на уровне функции, обработка ошибок и логирование с request_id. Отдельный блок про холодный старт: ленивая загрузка сервисов, отключение ненужных возможностей Symfony, оптимизация автозагрузки composer.

Учтите лимиты Lambda: пакет развёртывания до 250 МБ в распакованном виде, память от 128 МБ до 10 ГБ, для API Gateway таймаут 29 секунд. Локальное хранилище контейнера не переживёт следующий вызов, поэтому сессии и файлы уводите в S3 или DynamoDB. Для Symfony автор советует начать с 512 МБ памяти и таймаута 10–30 секунд, для чистого PHP — 256 МБ и 3–10 секунд.

Какие задачи решает

  • создать класс-обработчик Lambda на PHP
  • перенести готовое приложение на Symfony в Lambda
  • настроить триггеры API Gateway, SQS или SNS
  • сократить холодный старт PHP-функции
  • собрать serverless.yml с нужными слоями рантайма

Примеры запросов агенту

  • Создай Lambda-обработчик на PHP для приёма вебхуков
  • Помоги перенести Symfony-приложение на AWS Lambda через Bref
  • Почему у моей PHP-функции долгий холодный старт и как его сократить

Как установить aws-lambda-php-integration

1Через Skills CLI (Vercel)

npx skills add giuseppe-trisciuoglio/developer-kit --skill aws-lambda-php-integration -a claude-code

2Вручную: положить файлы

~/.claude/skills/aws-lambda-php-integration/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/aws-lambda-php-integration/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о aws-lambda-php-integration

Как установить aws-lambda-php-integration в Claude?

Выполните npx skills add giuseppe-trisciuoglio/developer-kit --skill aws-lambda-php-integration -a claude-code. Скилл окажется в ~/.claude/skills/aws-lambda-php-integration/SKILL.md.

Что делает aws-lambda-php-integration?

Даёт агенту шаблоны и правила для развёртывания PHP и Symfony на AWS Lambda через Bref: обработчики, слои рантайма, триггеры событий, прогрев и борьба с холодным стартом.

Чем Bref отличается от чистого PHP в этом скилле?

Bref даёт маршрутизацию и поддержку Symfony при холодном старте меньше 2 секунд. Чистый PHP стартует быстрее, меньше 500 мс, но конфигурацию и маршрутизацию пишете вручную.

Исходный текст

SKILL.md · MIT
---
name: aws-lambda-php-integration
description: Provides AWS Lambda integration patterns for PHP with Symfony using the Bref framework. Creates Lambda handler classes, configures runtime layers, sets up SQS/SNS event triggers, implements warm-up strategies, and optimizes cold starts. Use when deploying PHP/Symfony applications to AWS Lambda, configuring API Gateway integration, implementing serverless PHP applications, or optimizing Lambda performance with Bref. Triggers include "create lambda php", "deploy symfony lambda", "bref lambda aws", "php lambda cold start", "aws lambda php performance", "symfony serverless", "php serverless framework".
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
---

# AWS Lambda PHP Integration

Patterns for deploying PHP and Symfony applications on AWS Lambda using the Bref framework.

## Overview

Two approaches available:
- **Bref Framework** - Standard PHP on Lambda with Symfony support, built-in routing, cold start < 2s
- **Raw PHP** - Minimal overhead, maximum control, cold start < 500ms

Both support API Gateway integration with production-ready configurations.

## When to Use

- Creating new Lambda functions in PHP
- Migrating existing Symfony applications to Lambda
- Optimizing cold start performance
- Configuring API Gateway or SQS/SNS event triggers
- Setting up deployment pipelines for PHP Lambda

## Instructions

### 1. Choose Your Approach

| Approach | Cold Start | Best For | Complexity |
|----------|------------|----------|------------|
| Bref | < 2s | Symfony apps, full-featured APIs | Medium |
| Raw PHP | < 500ms | Simple handlers, maximum control | Low |

### 2. Project Structure

#### Symfony with Bref Structure
```
my-symfony-lambda/
├── composer.json
├── serverless.yml
├── public/
│   └── index.php         # Lambda entry point
├── src/
│   └── Kernel.php        # Symfony Kernel
├── config/
│   ├── bundles.php
│   ├── routes.yaml
│   └── services.yaml
└── templates/
```

#### Raw PHP Structure
```
my-lambda-function/
├── public/
│   └── index.php         # Handler entry point
├── composer.json
├── serverless.yml
└── src/
    └── Services/
```

### 3. Implementation

**Symfony with Bref:**
```php
// public/index.php
use Bref\Symfony\Bref;
use App\Kernel;
use Symfony\Component\HttpFoundation\Request;

require __DIR__.'/../vendor/autoload.php';

$kernel = new Kernel($_SERVER['APP_ENV'] ?? 'dev', $_SERVER['APP_DEBUG'] ?? true);
$kernel->boot();

$bref = new Bref($kernel);
return $bref->run($event, $context);
```

**Raw PHP Handler:**
```php
// public/index.php
use function Bref\Lambda\main;

main(function ($event) {
    $path = $event['path'] ?? '/';
    $method = $event['httpMethod'] ?? 'GET';

    return [
        'statusCode' => 200,
        'body' => json_encode(['message' => 'Hello from PHP Lambda!'])
    ];
});
```

### 4. Cold Start Optimization

1. **Lazy loading** - Defer heavy services until needed
2. **Disable unused Symfony features** - Turn off validation, annotations
3. **Optimize composer autoload** - Use classmap for production
4. **Use Bref optimized runtime** - Leverage PHP 8.x optimizations

### 5. Connection Management

```php
// Cache AWS clients at function level
use Aws\DynamoDb\DynamoDbClient;

class DatabaseService
{
    private static ?DynamoDbClient $client = null;

    public static function getClient(): DynamoDbClient
    {
        if (self::$client === null) {
            self::$client = new DynamoDbClient([
                'region' => getenv('AWS_REGION'),
                'version' => 'latest'
            ]);
        }
        return self::$client;
    }
}
```

## Best Practices

### Memory and Timeout

- **Memory**: Start with 512MB for Symfony, 256MB for raw PHP
- **Timeout**: Symfony 10-30s for cold start buffer, Raw PHP 3-10s typically sufficient

### Dependencies

```json
{
    "require": {
        "php": "^8.2",
        "bref/bref": "^2.0",
        "symfony/framework-bundle": "^6.0"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist"
    }
}
```

### Error Handling

```php
try {
    $result = processRequest($event);
    return [
        'statusCode' => 200,
        'body' => json_encode($result)
    ];
} catch (ValidationException $e) {
    return [
        'statusCode' => 400,
        'body' => json_encode(['error' => $e->getMessage()])
    ];
} catch (Exception $e) {
    error_log($e->getMessage());
    return [
        'statusCode' => 500,
        'body' => json_encode(['error' => 'Internal error'])
    ];
}
```

### Logging

```php
error_log(json_encode([
    'level' => 'info',
    'message' => 'Request processed',
    'request_id' => $context->getAwsRequestId(),
    'path' => $event['path'] ?? '/'
]));
```

## Deployment

### Serverless Configuration

```yaml
# serverless.yml
service: symfony-lambda-api

provider:
  name: aws
  runtime: php-82
  memorySize: 512
  timeout: 20

package:
  individually: true
  exclude:
    - '**/node_modules/**'
    - '**/.git/**'

functions:
  api:
    handler: public/index.php
    events:
      - http:
          path: /{proxy+}
          method: ANY
```

### Deploy and Validate

```bash
# 1. Install Bref
composer require bref/bref --dev

# 2. Test locally (validate before deploy)
sam local invoke -e event.json

# 3. Deploy
vendor/bin/bref deploy

# 4. Verify deployment
aws lambda invoke --function-name symfony-lambda-api-api \
  --payload '{"path": "/", "httpMethod": "GET"}' /dev/stdout
```

### Symfony Full Configuration

```yaml
# serverless.yml for Symfony
service: symfony-lambda-api

provider:
  name: aws
  runtime: php-82
  stage: ${self:custom.stage}
  region: ${self:custom.region}
  environment:
    APP_ENV: ${self:custom.stage}
    APP_DEBUG: ${self:custom.isLocal}
  iam:
    role:
      statements:
        - Effect: Allow
          Action:
            - dynamodb:GetItem
            - dynamodb:PutItem
          Resource: '*'

functions:
  web:
    handler: public/index.php
    timeout: 30
    memorySize: 1024
    events:
      - http:
          path: /{proxy+}
          method: ANY

  console:
    handler: bin/console
    timeout: 300
    events:
      - schedule: rate(1 day)

plugins:
  - ./vendor/bref/bref

custom:
  stage: dev
  region: us-east-1
  isLocal: false
```

## Constraints and Warnings

### Lambda Limits

- **Deployment package**: 250MB unzipped maximum (50MB zipped)
- **Memory**: 128MB to 10GB
- **Timeout**: 29 seconds (API Gateway), 15 minutes for async
- **Concurrent executions**: 1000 default

### PHP-Specific Considerations

- **Cold start**: PHP has moderate cold start; use Bref for optimized runtimes
- **Dependencies**: Keep composer.json minimal; use Lambda Layers for shared deps
- **PHP version**: Use PHP 8.2+ for best Lambda performance
- **No local storage**: Lambda containers are ephemeral; use S3/DynamoDB for persistence

### Common Pitfalls

1. **Large vendor folder** - Exclude dev dependencies; use --no-dev
2. **Session storage** - Don't use local file storage; use DynamoDB
3. **Long-running processes** - Not suitable for Lambda; use ECS instead
4. **Websockets** - Use API Gateway WebSockets or AppSync instead

### Security Considerations

- Never hardcode credentials; use IAM roles and SSM Parameter Store
- Validate all input data
- Use least privilege IAM policies
- Enable CloudTrail for audit logging
- Set proper CORS headers

## Examples

### Example 1: Create a Symfony Lambda API

**Input:** "Create a Symfony Lambda REST API using Bref for a todo application"

**Process:**
1. Initialize Symfony project with `composer create-project`
2. Install Bref: `composer require bref/bref`
3. Configure serverless.yml
4. Set up routes in config/routes.yaml
5. **Test locally**: `sam local invoke`
6. **Deploy**: `vendor/bin/bref deploy`
7. **Verify**: `aws lambda invoke --function-name <name> --payload '{}'`

**Output:** Complete Symfony project structure with REST API, DynamoDB integration, deployment configuration

### Example 2: Optimize Cold Start for Symfony

**Input:** "My Symfony Lambda has 5 second cold start, how do I optimize it?"

**Process:**
1. Analyze services loaded at startup
2. Disable unused Symfony features (validation, annotations)
3. Use lazy loading for heavy services
4. Optimize composer autoload
5. **Measure**: Deploy and invoke to verify cold start < 2s

**Output:** Refactored Symfony configuration with cold start < 2s

### Example 3: Deploy with GitHub Actions

**Input:** "Configure CI/CD for Symfony Lambda with Serverless Framework"

**Process:**
1. Create GitHub Actions workflow
2. Set up PHP environment with composer
3. Run PHPUnit tests
4. **Deploy** with Serverless Framework
5. **Validate**: Check Lambda function exists and responds

**Output:** Complete .github/workflows/deploy.yml with multi-stage pipeline and test automation

## References

- **[Bref Lambda](references/bref-lambda.md)** - Complete Bref setup, Symfony integration, routing
- **[Raw PHP Lambda](references/raw-php-lambda.md)** - Minimal handler patterns, caching, packaging
- **[Serverless Deployment](references/serverless-deployment.md)** - Serverless Framework, SAM, CI/CD pipelines
- **[Testing Lambda](references/testing-lambda.md)** - PHPUnit, SAM Local, integration testing

© giuseppe-trisciuoglio · MIT · giuseppe-trisciuoglio/developer-kit

Похожие скиллы

Всё по теме «Облака: AWS, Azure, GCP» →
aws-lambda-durable-functions aws Скилл учит ИИ писать долгоживущие функции AWS Lambda с сохранением состояния до одного года. Пригодится при сборке серверлесс-пайплайнов и пошаговых сценариев для ИИ-агентов. CX Codex +1 5 800установок aws-lambda devops-skills Скилл помогает развёртывать функции AWS Lambda, настраивать триггеры S3 или SQS и организовывать канареечные релизы. CX Codex +1 321установок aws-lambda-functions aj-geddes Скилл помогает агенту создавать и разворачивать функции AWS Lambda: триггеры, права, слои, переменные окружения. CX Codex +1 614установок aws-lambda-web-functions aws Помогает собрать и выложить Node.js HTTP-приложение на AWS Lambda Web Functions: Express, Fastify или Hono, локальный запуск, упаковка и деплой через CLI. CX Codex +1 507установок sentry-php-sdk getsentry Помогает настроить мониторинг Sentry в проектах на чистом PHP, Laravel или Symfony. Распознаёт фреймворк, очереди и планировщики, после чего предлагает нужные пакеты и конфигурацию. CX Codex +1 2 200установок serverless Mindrally Скилл задаёт агенту правила разработки на FastAPI в микросервисах и serverless-среде: AWS Lambda, Azure Functions, API-шлюзы. CX Codex +1 655установок

Из того же набора93

github-issue-workflow Пошаговый сценарий из 8 фаз для решения задач на GitHub от чтения описания до создания пулл-реквеста. Помогает безопасно разобрать issue и написать проверенный код. CX Codex +1 3 500установок notebooklm Скилл подключает агента к Google NotebookLM через CLI nlm: поиск по документации, добавление источников, генерация подкастов и отчётов. CX Codex +1 3 500установок docs-updater Скилл сравнивает текущую ветку с последним релизным тегом и правит README, CHANGELOG и папки с документацией. Пригодится перед релизом или пул-реквестом. CX Codex +1 3 500установок spring-boot-project-creator Скилл разворачивает проект на Spring Boot 3.x или 4.x через Spring Initializr с архитектурой DDD или Layered. Пригодится для быстрого старта микросервисов с JPA, OpenAPI и Docker Compose. CX Codex +1 3 500установок aws-lambda-java-integration Скилл с готовыми шаблонами Java-функций для AWS Lambda: два подхода, холодный старт и деплой через Serverless или SAM. CX Codex +1 3 500установок codex Делегирует сложные задачи генерации кода, рефакторинга и ревью в утилиту Codex CLI с моделями GPT-5.3-codex, o3 или o4-mini. CX Codex +1 3 400установок copilot-cli Передаёт задачи из Claude в GitHub Copilot CLI в неинтерактивном режиме: выбор модели, флаги прав, экспорт сессии в markdown. CX Codex +1 3 400установок gemini Передаёт разбор большого кода и сложные рассуждения в Gemini CLI, а результат возвращает вам на подтверждение. CX Codex +1 3 400установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой