Skip to content

Commit 9c395e6

Browse files
committed
Revert "Update README.md"
This reverts commit a94214d.
1 parent a94214d commit 9c395e6

File tree

1 file changed

+142
-142
lines changed

1 file changed

+142
-142
lines changed

README.md

Lines changed: 142 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -46,152 +46,152 @@ npn install --save laravel-echo-api-gateway
4646
<details>
4747
<summary>Expand Bref-specific instructions</summary>
4848

49-
#### A. When using Bref
50-
51-
Next, when using Bref, we have to add some elements to our `serverless.yml` file. If using Vapor, these resources have
52-
to be created by hand using the AWS CLI or console.
53-
54-
Add a new function that will handle websocket events (messages etc):
55-
56-
```yaml
57-
functions:
58-
# Add this function
59-
websocket:
60-
handler: handlers/websocket.php
61-
layers:
62-
- ${bref:layer.php-80}
63-
events:
64-
- websocket: $disconnect
65-
- websocket: $default
66-
```
67-
68-
Add a resource to create and configure our DynamoDB table, where connections will be stored in:
69-
70-
```yaml
71-
resources:
72-
Resources:
73-
# Add this resource
74-
ConnectionsTable:
75-
Type: AWS::DynamoDB::Table
76-
Properties:
77-
TableName: connections
78-
AttributeDefinitions:
79-
- AttributeName: connectionId
80-
AttributeType: S
81-
- AttributeName: channel
82-
AttributeType: S
83-
KeySchema:
84-
- AttributeName: connectionId
85-
KeyType: HASH
86-
- AttributeName: channel
87-
KeyType: RANGE
88-
GlobalSecondaryIndexes:
89-
- IndexName: lookup-by-channel
90-
KeySchema:
91-
- AttributeName: channel
92-
KeyType: HASH
93-
Projection:
94-
ProjectionType: ALL
95-
- IndexName: lookup-by-connection
96-
KeySchema:
97-
- AttributeName: connectionId
98-
KeyType: HASH
99-
Projection:
100-
ProjectionType: ALL
101-
BillingMode: PAY_PER_REQUEST
102-
```
103-
104-
Add the following `iamRoleStatement` to enable our Lambda function to access the table:
105-
106-
```yaml
107-
provider:
108-
name: aws
109-
110-
iamRoleStatements:
111-
# Add this iamRoleStatement
112-
- Effect: Allow
113-
Action: [ dynamodb:Query, dynamodb:GetItem, dynamodb:PutItem, dynamodb:UpdateItem, dynamodb:DeleteItem, dynamodb:BatchWriteItem ]
114-
Resource:
115-
- !GetAtt ConnectionsTable.Arn
116-
- !Join [ '', [ !GetAtt ConnectionsTable.Arn, '/index/*' ] ]
117-
```
118-
119-
Add an environment variable to autogenerate our websocket URL:
120-
121-
```yaml
122-
provider:
123-
name: aws
124-
125-
environment:
126-
# Add these variables
127-
BROADCAST_DRIVER: laravel-echo-api-gateway
128-
LARAVEL_ECHO_API_GATEWAY_DYNAMODB_TABLE: !Ref ConnectionsTable
129-
LARAVEL_ECHO_API_GATEWAY_API_ID: !Ref WebsocketsApi
130-
LARAVEL_ECHO_API_GATEWAY_API_STAGE: "${self:provider.stage}"
131-
```
132-
133-
Next, create the PHP handler file in `handlers/websocket.php`
134-
135-
```php
136-
<?php
137-
138-
use Georgeboot\LaravelEchoApiGateway\Handler;
139-
use Illuminate\Foundation\Application;
140-
141-
require __DIR__ . '/../vendor/autoload.php';
142-
143-
/** @var Application $app */
144-
$app = require __DIR__ . '/../bootstrap/app.php';
145-
146-
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
147-
$kernel->bootstrap();
148-
149-
return $app->make(Handler::class);
150-
```
151-
152-
Now, deploy your app by running `serverless deploy` or similar. Write down the websocket url the output gives you.
49+
#### A. When using Bref
50+
51+
Next, when using Bref, we have to add some elements to our `serverless.yml` file. If using Vapor, these resources have
52+
to be created by hand using the AWS CLI or console.
53+
54+
Add a new function that will handle websocket events (messages etc):
55+
56+
```yaml
57+
functions:
58+
# Add this function
59+
websocket:
60+
handler: handlers/websocket.php
61+
layers:
62+
- ${bref:layer.php-80}
63+
events:
64+
- websocket: $disconnect
65+
- websocket: $default
66+
```
67+
68+
Add a resource to create and configure our DynamoDB table, where connections will be stored in:
69+
70+
```yaml
71+
resources:
72+
Resources:
73+
# Add this resource
74+
ConnectionsTable:
75+
Type: AWS::DynamoDB::Table
76+
Properties:
77+
TableName: connections
78+
AttributeDefinitions:
79+
- AttributeName: connectionId
80+
AttributeType: S
81+
- AttributeName: channel
82+
AttributeType: S
83+
KeySchema:
84+
- AttributeName: connectionId
85+
KeyType: HASH
86+
- AttributeName: channel
87+
KeyType: RANGE
88+
GlobalSecondaryIndexes:
89+
- IndexName: lookup-by-channel
90+
KeySchema:
91+
- AttributeName: channel
92+
KeyType: HASH
93+
Projection:
94+
ProjectionType: ALL
95+
- IndexName: lookup-by-connection
96+
KeySchema:
97+
- AttributeName: connectionId
98+
KeyType: HASH
99+
Projection:
100+
ProjectionType: ALL
101+
BillingMode: PAY_PER_REQUEST
102+
```
103+
104+
Add the following `iamRoleStatement` to enable our Lambda function to access the table:
105+
106+
```yaml
107+
provider:
108+
name: aws
109+
110+
iamRoleStatements:
111+
# Add this iamRoleStatement
112+
- Effect: Allow
113+
Action: [ dynamodb:Query, dynamodb:GetItem, dynamodb:PutItem, dynamodb:UpdateItem, dynamodb:DeleteItem, dynamodb:BatchWriteItem ]
114+
Resource:
115+
- !GetAtt ConnectionsTable.Arn
116+
- !Join [ '', [ !GetAtt ConnectionsTable.Arn, '/index/*' ] ]
117+
```
118+
119+
Add an environment variable to autogenerate our websocket URL:
120+
121+
```yaml
122+
provider:
123+
name: aws
124+
125+
environment:
126+
# Add these variables
127+
BROADCAST_DRIVER: laravel-echo-api-gateway
128+
LARAVEL_ECHO_API_GATEWAY_DYNAMODB_TABLE: !Ref ConnectionsTable
129+
LARAVEL_ECHO_API_GATEWAY_API_ID: !Ref WebsocketsApi
130+
LARAVEL_ECHO_API_GATEWAY_API_STAGE: "${self:provider.stage}"
131+
```
132+
133+
Next, create the PHP handler file in `handlers/websocket.php`
134+
135+
```php
136+
<?php
137+
138+
use Georgeboot\LaravelEchoApiGateway\Handler;
139+
use Illuminate\Foundation\Application;
140+
141+
require __DIR__ . '/../vendor/autoload.php';
142+
143+
/** @var Application $app */
144+
$app = require __DIR__ . '/../bootstrap/app.php';
145+
146+
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
147+
$kernel->bootstrap();
148+
149+
return $app->make(Handler::class);
150+
```
151+
152+
Now, deploy your app by running `serverless deploy` or similar. Write down the websocket url the output gives you.
153153

154154
</details>
155155

156156
<details>
157-
<summary>Expand Vapor-specific instructions</summary>
158-
159-
#### B. When using Vapor
160-
161-
When using Vapor, you will have to create these required resources by hand using the AWS CLI or Console:
162-
163-
##### B1. DynamoDB table for connections
164-
165-
Create a DynamoDB table for the connections. Use `connectionId` (string) as a HASH key, and `channel` (string) as a SORT
166-
key. Set the capacity setting to whatever you like (probably on-demand).
167-
168-
Create 2 indexes:
169-
170-
1. Name: `lookup-by-connection`, key: `connectionId`, no sort key, projected: ALL
171-
2. Name: `lookup-by-channel`, key: `channel`, no sort key, projected: ALL
172-
173-
##### B2. API Gateway
174-
175-
Create a new Websocket API. Enter a name and leave the route selection expression to what it is. Add a `$disconnect`
176-
and `$default`. Set both integrations to `Lambda` and select your CLI lambda from the list. Set the name of the stage to
177-
what you desire and create the API. Once created, write down the ID, as we'll need it later.
178-
179-
##### B3. IAM Permissions
180-
181-
In IAM, go to roles and open `laravel-vapor-role`. Open the inline policy and edit it. On the JSON tab,
182-
add `"execute-api:*"` to the list of actions.
183-
184-
Then, login to [Laravel Vapor](https://vapor.laravel.com/app), go to team settings, AWS Accounts, click on Role next to
185-
the correct account and deselect Receive Updates.
186-
187-
Edit your `.env`:
188-
189-
```dotenv
190-
BROADCAST_DRIVER=laravel-echo-api-gateway
191-
LARAVEL_ECHO_API_GATEWAY_DYNAMODB_TABLE=the-table-name-you-entered-when-creating-it
192-
LARAVEL_ECHO_API_GATEWAY_API_ID=your-websocket-api-id
193-
LARAVEL_ECHO_API_GATEWAY_API_STAGE=your-api-stage-name
194-
```
157+
<summary>Expand Vapor-specific instructions</summary>
158+
159+
#### B. When using Vapor
160+
161+
When using Vapor, you will have to create these required resources by hand using the AWS CLI or Console:
162+
163+
##### B1. DynamoDB table for connections
164+
165+
Create a DynamoDB table for the connections. Use `connectionId` (string) as a HASH key, and `channel` (string) as a SORT
166+
key. Set the capacity setting to whatever you like (probably on-demand).
167+
168+
Create 2 indexes:
169+
170+
1. Name: `lookup-by-connection`, key: `connectionId`, no sort key, projected: ALL
171+
2. Name: `lookup-by-channel`, key: `channel`, no sort key, projected: ALL
172+
173+
##### B2. API Gateway
174+
175+
Create a new Websocket API. Enter a name and leave the route selection expression to what it is. Add a `$disconnect`
176+
and `$default`. Set both integrations to `Lambda` and select your CLI lambda from the list. Set the name of the stage to
177+
what you desire and create the API. Once created, write down the ID, as we'll need it later.
178+
179+
##### B3. IAM Permissions
180+
181+
In IAM, go to roles and open `laravel-vapor-role`. Open the inline policy and edit it. On the JSON tab,
182+
add `"execute-api:*"` to the list of actions.
183+
184+
Then, login to [Laravel Vapor](https://vapor.laravel.com/app), go to team settings, AWS Accounts, click on Role next to
185+
the correct account and deselect Receive Updates.
186+
187+
Edit your `.env`:
188+
189+
```dotenv
190+
BROADCAST_DRIVER=laravel-echo-api-gateway
191+
LARAVEL_ECHO_API_GATEWAY_DYNAMODB_TABLE=the-table-name-you-entered-when-creating-it
192+
LARAVEL_ECHO_API_GATEWAY_API_ID=your-websocket-api-id
193+
LARAVEL_ECHO_API_GATEWAY_API_STAGE=your-api-stage-name
194+
```
195195

196196
</details>
197197

0 commit comments

Comments
 (0)