pulumi/pkg/operations/testdata/todo.json
Luke Hoban c7adaf107d
Don't include pending-delete resources in tree representation (#902)
Resources in the checkpoint file which are pending-delete represent old versions of resources which are no longer part of the active deployment.  For purposes of constructing the active resource tree, we should skip these resources.
2018-02-12 08:47:09 -08:00

1173 lines
95 KiB
JSON

{
"target": "foo",
"latest": {
"time": "2017-11-08T11:59:08.512209-08:00",
"resources": [
{
"urn": "urn:pulumi:foo::todo::aws:dynamodb/table:Table::todo",
"custom": true,
"id": "todo-a1916a6b16ec016b",
"type": "aws:dynamodb/table:Table",
"parent": "urn:pulumi:foo::todo::cloud:table:Table::todo",
"inputs": {
"attribute": [
{
"name": "id",
"type": "S"
}
],
"hashKey": "id",
"readCapacity": 5,
"writeCapacity": 5
},
"defaults": {
"name": "todo-a1916a6b16ec016b",
"readCapacity": "5",
"writeCapacity": "5"
},
"outputs": {
"arn": "arn:aws:dynamodb:us-east-2:153052954103:table/todo-a1916a6b16ec016b",
"attribute": [
{
"name": "id",
"type": "S"
}
],
"globalSecondaryIndex": [],
"hashKey": "id",
"id": "todo-a1916a6b16ec016b",
"localSecondaryIndex": [],
"name": "todo-a1916a6b16ec016b",
"readCapacity": "5",
"writeCapacity": "5"
}
},
{
"urn": "urn:pulumi:foo::todo::cloud:table:Table::todo",
"custom": false,
"type": "cloud:table:Table",
"inputs": {
"primaryKey": "id",
"primaryKeyType": "string"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:s3/bucket:Bucket::todo",
"custom": true,
"id": "todo-8c10043f3d2b0e28",
"type": "aws:s3/bucket:Bucket",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"defaults": {
"acl": "private",
"bucket": "todo-8c10043f3d2b0e28",
"forceDestroy": false
},
"outputs": {
"accelerationStatus": "",
"acl": "private",
"arn": "arn:aws:s3:::todo-8c10043f3d2b0e28",
"bucket": "todo-8c10043f3d2b0e28",
"bucketDomainName": "todo-8c10043f3d2b0e28.s3.amazonaws.com",
"forceDestroy": false,
"hostedZoneId": "Z2O1EMRO9K5GLX",
"id": "todo-8c10043f3d2b0e28",
"logging": [],
"region": "us-east-2",
"requestPayer": "BucketOwner",
"tags": {},
"versioning": [
{
"enabled": false,
"mfaDelete": false
}
],
"website": []
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/role:Role::todo4c238266",
"custom": true,
"id": "todo4c238266-c22303f113387c32",
"type": "aws:iam/role:Role",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}"
},
"defaults": {
"forceDetachPolicies": false,
"name": "todo4c238266-c22303f113387c32",
"path": "/"
},
"outputs": {
"arn": "arn:aws:iam::153052954103:role/todo4c238266-c22303f113387c32",
"assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}",
"createDate": "2017-11-08T19:57:49Z",
"forceDetachPolicies": false,
"id": "todo4c238266-c22303f113387c32",
"name": "todo4c238266-c22303f113387c32",
"path": "/",
"uniqueId": "AROAIZQT7GOCLELAEWHT2"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todo4c238266",
"custom": true,
"id": "todo4c238266-c22303f113387c32-20171108195750237000000001",
"type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"policyArn": "arn:aws:iam::aws:policy/AmazonS3FullAccess",
"role": "todo4c238266-c22303f113387c32"
},
"outputs": {
"id": "todo4c238266-c22303f113387c32-20171108195750237000000001",
"policyArn": "arn:aws:iam::aws:policy/AmazonS3FullAccess",
"role": "todo4c238266-c22303f113387c32"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:s3/bucketObject:BucketObject::todo4c238266/favicon.ico",
"custom": true,
"id": "todo4c238266/favicon.ico",
"type": "aws:s3/bucketObject:BucketObject",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"bucket": "todo-8c10043f3d2b0e28",
"contentType": "image/x-icon",
"key": "todo4c238266/favicon.ico",
"source": {
"4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
"hash": "3e928d52d10b060711c530e190e862cb8c1e32ae582da57a633d197c09475081",
"path": "/Users/luke/go/src/github.com/pulumi/pulumi-cloud/examples/todo/www/favicon.ico"
}
},
"defaults": {
"acl": "private",
"source": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-asset750331830"
},
"outputs": {
"acl": "private",
"bucket": "todo-8c10043f3d2b0e28",
"cacheControl": "",
"contentDisposition": "",
"contentEncoding": "",
"contentLanguage": "",
"contentType": "image/x-icon",
"etag": "8b29bc54ef1e39d577bd5a5157c7d285",
"id": "todo4c238266/favicon.ico",
"key": "todo4c238266/favicon.ico",
"serverSideEncryption": "",
"source": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-asset678329245",
"storageClass": "STANDARD",
"tags": {},
"versionId": "",
"websiteRedirect": ""
}
},
{
"urn": "urn:pulumi:foo::todo::aws:s3/bucketObject:BucketObject::todo4c238266/index.html",
"custom": true,
"id": "todo4c238266/index.html",
"type": "aws:s3/bucketObject:BucketObject",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"bucket": "todo-8c10043f3d2b0e28",
"contentType": "text/html",
"key": "todo4c238266/index.html",
"source": {
"4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
"hash": "064df7eb98909d2a5f50e74dfb94899d57d0aaba1ffc580541ca79afebf87bb7",
"path": "/Users/luke/go/src/github.com/pulumi/pulumi-cloud/examples/todo/www/index.html"
}
},
"defaults": {
"acl": "private",
"source": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-asset637927000"
},
"outputs": {
"acl": "private",
"bucket": "todo-8c10043f3d2b0e28",
"cacheControl": "",
"contentDisposition": "",
"contentEncoding": "",
"contentLanguage": "",
"contentType": "text/html",
"etag": "b996a167b3143d3a2fc3255ec69dbad4",
"id": "todo4c238266/index.html",
"key": "todo4c238266/index.html",
"serverSideEncryption": "",
"source": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-asset523489751",
"storageClass": "STANDARD",
"tags": {},
"versionId": "",
"websiteRedirect": ""
}
},
{
"urn": "urn:pulumi:foo::todo::aws:sns/topic:Topic::unhandled-error-topic",
"custom": true,
"id": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53",
"type": "aws:sns/topic:Topic",
"defaults": {
"name": "unhandled-error-topic-7c13e147ce8d9e53"
},
"outputs": {
"arn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53",
"displayName": "",
"id": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53",
"name": "unhandled-error-topic-7c13e147ce8d9e53",
"policy": "{\"Id\":\"__default_policy_ID\",\"Statement\":[{\"Action\":[\"SNS:GetTopicAttributes\",\"SNS:SetTopicAttributes\",\"SNS:AddPermission\",\"SNS:RemovePermission\",\"SNS:DeleteTopic\",\"SNS:Subscribe\",\"SNS:ListSubscriptionsByTopic\",\"SNS:Publish\",\"SNS:Receive\"],\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"153052954103\"}},\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Resource\":\"arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53\",\"Sid\":\"__default_statement_ID\"}],\"Version\":\"2008-10-17\"}"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/role:Role::todo035b5d8f-iamrole",
"custom": true,
"id": "todo035b5d8f-iamrole-4c6d0a50781a686f",
"type": "aws:iam/role:Role",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo035b5d8f",
"inputs": {
"assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Effect\":\"Allow\",\"Sid\":\"\"}]}"
},
"defaults": {
"forceDetachPolicies": false,
"name": "todo035b5d8f-iamrole-4c6d0a50781a686f",
"path": "/"
},
"outputs": {
"arn": "arn:aws:iam::153052954103:role/todo035b5d8f-iamrole-4c6d0a50781a686f",
"assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}",
"createDate": "2017-11-08T19:57:56Z",
"forceDetachPolicies": false,
"id": "todo035b5d8f-iamrole-4c6d0a50781a686f",
"name": "todo035b5d8f-iamrole-4c6d0a50781a686f",
"path": "/",
"uniqueId": "AROAJPLTIAHPA4S2PXQPY"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todo035b5d8f-iampolicy-0",
"custom": true,
"id": "todo035b5d8f-iamrole-4c6d0a50781a686f-20171108195757731500000002",
"type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo035b5d8f",
"inputs": {
"policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
"role": "todo035b5d8f-iamrole-4c6d0a50781a686f"
},
"outputs": {
"id": "todo035b5d8f-iamrole-4c6d0a50781a686f-20171108195757731500000002",
"policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
"role": "todo035b5d8f-iamrole-4c6d0a50781a686f"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todo035b5d8f-iampolicy-1",
"custom": true,
"id": "todo035b5d8f-iamrole-4c6d0a50781a686f-20171108195759109500000003",
"type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo035b5d8f",
"inputs": {
"policyArn": "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess",
"role": "todo035b5d8f-iamrole-4c6d0a50781a686f"
},
"outputs": {
"id": "todo035b5d8f-iamrole-4c6d0a50781a686f-20171108195759109500000003",
"policyArn": "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess",
"role": "todo035b5d8f-iamrole-4c6d0a50781a686f"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:lambda/function:Function::todo035b5d8f",
"custom": true,
"id": "todo035b5d8f-7748c68eadc313c0",
"type": "aws:lambda/function:Function",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo035b5d8f",
"inputs": {
"code": {
"4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
"assets": {
".": {
"4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
"hash": "817deda9f0a4e4358a82e30faeaaab3bb456d0aa62faeb69aa744b3abf180995",
"path": "."
},
"__index.js": {
"4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
"hash": "dc21f0f3deefc1f33f9aee13b2861a2e6d24810f0f68fbfd2cc9669438cb0f76",
"text": "exports.handler = __1d93ab845c76406f165a33c3b1aa7b72c82a0245;\n\nfunction __1d93ab845c76406f165a33c3b1aa7b72c82a0245() {\n var _this;\n with({ apiGatewayToRequestResponse: __fbf646106cb48cc5348746d6ce09d72037a0bb76, route: { method: \"GET\", path: \"/todo/{id}\", handlers: [ __d2f8baf55a86f7483292ccab09007d22aa150368, __5941ad084d3fce898f986ab0decb5538a0df0be7 ] } }) {\n return (function() {\n\nreturn ((ev, ctx, cb) =\u003e {\n let body;\n if (ev.body !== null) {\n if (ev.isBase64Encoded) {\n body = Buffer.from(ev.body, \"base64\");\n }\n else {\n body = Buffer.from(ev.body, \"utf8\");\n }\n }\n ctx.callbackWaitsForEmptyEventLoop = false;\n const reqres = apiGatewayToRequestResponse(ev, body, cb);\n let i = 0;\n const next = () =\u003e {\n const nextHandler = route.handlers[i++];\n if (nextHandler !== undefined) {\n nextHandler(reqres.req, reqres.res, next);\n }\n };\n next();\n })\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __fbf646106cb48cc5348746d6ce09d72037a0bb76() {\n var _this;\n with({ stageName: \"stage\" }) {\n return (function() {\n\nreturn (function apiGatewayToRequestResponse(ev, body, cb) {\n const response = {\n statusCode: 200,\n headers: {},\n body: Buffer.from([]),\n };\n const req = {\n headers: ev.headers,\n body: body,\n method: ev.httpMethod,\n params: ev.pathParameters,\n query: ev.queryStringParameters,\n path: ev.path,\n baseUrl: \"/\" + stageName,\n hostname: ev.headers[\"Host\"],\n protocol: ev.headers[\"X-Forwarded-Proto\"],\n };\n const res = {\n status: (code) =\u003e {\n response.statusCode = code;\n return res;\n },\n setHeader: (name, value) =\u003e {\n response.headers[name] = value;\n return res;\n },\n write: (data, encoding) =\u003e {\n if (encoding === undefined) {\n encoding = \"utf8\";\n }\n if (typeof data === \"string\") {\n data = Buffer.from(data, encoding);\n }\n response.body = Buffer.concat([response.body, data]);\n return res;\n },\n end: (data, encoding) =\u003e {\n if (data !== undefined) {\n res.write(data, encoding);\n }\n cb(null, {\n statusCode: response.statusCode,\n headers: response.headers,\n isBase64Encoded: true,\n body: response.body.toString(\"base64\"),\n });\n },\n json: (obj) =\u003e {\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify(obj));\n },\n };\n return { req, res };\n})\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __d2f8baf55a86f7483292ccab09007d22aa150368() {\n var _this;\n with({ }) {\n return (function() {\n\nreturn ((req, res, next) =\u003e {\n let auth = req.headers[\"Authorization\"];\n if (auth !== \"Bearer SECRETPASSWORD\") {\n res.status(401).end(\"Authorization header required\");\n return;\n }\n next();\n})\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __5941ad084d3fce898f986ab0decb5538a0df0be7() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, todos: { children: [ { children: [ ], urn: \"urn:pulumi:foo::todo::aws:dynamodb/table:Table::todo\", id: \"todo-a1916a6b16ec016b\", attribute: [ { name: \"id\", type: \"S\" } ], globalSecondaryIndex: [ ], hashKey: \"id\", localSecondaryIndex: [ ], name: \"todo-a1916a6b16ec016b\", readCapacity: \"5\", writeCapacity: \"5\", arn: \"arn:aws:dynamodb:us-east-2:153052954103:table/todo-a1916a6b16ec016b\" } ], urn: \"urn:pulumi:foo::todo::cloud:table:Table::todo\", primaryKey: \"id\", primaryKeyType: \"string\", get: __269a86aab19c88ab77347278ae480b2b3f3dd556, insert: __20c08953d1f10c1ddcff1e9ab6a0759b7516e3e3, scan: __42f6b3f709e32e9aee752e63d003b89c2bc2cad7, update: __124ff881420e47686a76c6dcae1754be8fb33422, delete: __3cfb20cfe7124ca024dfadf60ae1edecc10cf690 } }) {\n return (function() {\n\nreturn ((req, res) =\u003e __awaiter(this, void 0, void 0, function* () {\n console.log(\"GET /todo/\" + req.params[\"id\"]);\n try {\n let item = yield todos.get({ id: req.params[\"id\"] });\n res.status(200).json(item.value);\n }\n catch (err) {\n res.status(500).json(err);\n }\n}))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __492fe142c8be132f2ccfdc443ed720d77b1ef3a6() {\n var _this;\n with({ }) {\n return (function() {\n\nreturn (function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n})\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __269a86aab19c88ab77347278ae480b2b3f3dd556() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn ((query) =\u003e __awaiter(this, void 0, void 0, function* () {\n const result = yield db().get({\n TableName: getTableName(),\n Key: query,\n ConsistentRead: true,\n }).promise();\n return result.Item;\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __32fa8104bfb1107c90c2d18cfcadb353e7323c4c() {\n var _this;\n with({ }) {\n return (function() {\n\nreturn (() =\u003e {\n const awssdk = require(\"aws-sdk\");\n return new awssdk.DynamoDB.DocumentClient();\n })\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __2db1ada17876ecdd7d369ad50a160a38c23d44c4() {\n var _this;\n with({ tableName: \"todo-a1916a6b16ec016b\" }) {\n return (function() {\n\nreturn (function getTableName() {\n // Hack: Because of our outside/inside system for pulumi, tableName is seen as a\n // Computed\u003cstring\u003e on the outside, but a string on the inside. Of course, there's no\n // way to make TypeScript aware of that. So we just fool the typesystem with these\n // explicit casts.\n //\n // see: https://github.com/pulumi/pulumi/issues/331#issuecomment-333280955\n return tableName;\n })\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __20c08953d1f10c1ddcff1e9ab6a0759b7516e3e3() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn ((item) =\u003e __awaiter(this, void 0, void 0, function* () {\n yield db().put({\n TableName: getTableName(),\n Item: item,\n }).promise();\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __42f6b3f709e32e9aee752e63d003b89c2bc2cad7() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn (() =\u003e __awaiter(this, void 0, void 0, function* () {\n const result = yield db().scan({\n TableName: getTableName(),\n ConsistentRead: true,\n }).promise();\n return result.Items;\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __124ff881420e47686a76c6dcae1754be8fb33422() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn ((query, updates) =\u003e __awaiter(this, void 0, void 0, function* () {\n let updateExpression = \"\";\n const attributeValues = {};\n for (const key of Object.keys(updates)) {\n const val = updates[key];\n if (updateExpression === \"\") {\n updateExpression += \"SET \";\n }\n else {\n updateExpression += \", \";\n }\n updateExpression += `${key} = :${key}`;\n attributeValues[`:${key}`] = val;\n }\n yield db().update({\n TableName: getTableName(),\n Key: query,\n UpdateExpression: updateExpression,\n ExpressionAttributeValues: attributeValues,\n }).promise();\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __3cfb20cfe7124ca024dfadf60ae1edecc10cf690() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn ((query) =\u003e __awaiter(this, void 0, void 0, function* () {\n yield db().delete({\n TableName: getTableName(),\n Key: query,\n }).promise();\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\n"
}
},
"hash": "bd8cb8017488e278e396f1e3b7eea27bc4b376d0adc075593aea9e32da043a38"
},
"deadLetterConfig": [
{
"targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
}
],
"handler": "__index.handler",
"memorySize": 128,
"role": "arn:aws:iam::153052954103:role/todo035b5d8f-iamrole-4c6d0a50781a686f",
"runtime": "nodejs6.10",
"timeout": 180
},
"defaults": {
"code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive035209546",
"memorySize": "128",
"name": "todo035b5d8f-7748c68eadc313c0",
"publish": false,
"timeout": "180"
},
"outputs": {
"arn": "arn:aws:lambda:us-east-2:153052954103:function:todo035b5d8f-7748c68eadc313c0",
"code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive894239265",
"deadLetterConfig": [
{
"targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
}
],
"description": "",
"environment": [],
"handler": "__index.handler",
"id": "todo035b5d8f-7748c68eadc313c0",
"invokeArn": "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todo035b5d8f-7748c68eadc313c0/invocations",
"kmsKeyArn": "",
"lastModified": "2017-11-08T19:58:07.802+0000",
"memorySize": "128",
"name": "todo035b5d8f-7748c68eadc313c0",
"publish": false,
"qualifiedArn": "arn:aws:lambda:us-east-2:153052954103:function:todo035b5d8f-7748c68eadc313c0:$LATEST",
"role": "arn:aws:iam::153052954103:role/todo035b5d8f-iamrole-4c6d0a50781a686f",
"runtime": "nodejs6.10",
"sourceCodeHash": "Pj7qx3M0/X9sY4nBiLeDFAklTGhYmjG527OkA6cDFgM=",
"tags": {},
"timeout": "180",
"tracingConfig": [
{
"mode": "PassThrough"
}
],
"version": "$LATEST",
"vpcConfig": []
}
},
{
"urn": "urn:pulumi:foo::todo::aws:serverless:Function::todo035b5d8f",
"custom": false,
"type": "aws:serverless:Function",
"parent": "urn:pulumi:foo::todo::cloud:function:Function::todo035b5d8f",
"inputs": {
"options": {
"deadLetterConfig": {
"targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
},
"memorySize": 128,
"policies": [
"arn:aws:iam::aws:policy/AWSLambdaFullAccess",
"arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess"
]
}
}
},
{
"urn": "urn:pulumi:foo::todo::aws:cloudwatch/logGroup:LogGroup::todo035b5d8f-func-logs",
"custom": true,
"id": "/aws/lambda/todo035b5d8f-7748c68eadc313c0",
"type": "aws:cloudwatch/logGroup:LogGroup",
"parent": "urn:pulumi:foo::todo::cloud:function:Function::todo035b5d8f",
"inputs": {
"name": "/aws/lambda/todo035b5d8f-7748c68eadc313c0",
"retentionInDays": 1
},
"defaults": {
"retentionInDays": "1"
},
"outputs": {
"arn": "arn:aws:logs:us-east-2:153052954103:log-group:/aws/lambda/todo035b5d8f-7748c68eadc313c0:*",
"id": "/aws/lambda/todo035b5d8f-7748c68eadc313c0",
"name": "/aws/lambda/todo035b5d8f-7748c68eadc313c0",
"retentionInDays": "1",
"tags": {}
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/role:Role::pulumi-foo-log-collector-iamrole",
"custom": true,
"id": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
"type": "aws:iam/role:Role",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::pulumi-foo-log-collector",
"inputs": {
"assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Effect\":\"Allow\",\"Sid\":\"\"}]}"
},
"defaults": {
"forceDetachPolicies": false,
"name": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
"path": "/"
},
"outputs": {
"arn": "arn:aws:iam::153052954103:role/pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
"assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}",
"createDate": "2017-11-08T19:58:11Z",
"forceDetachPolicies": false,
"id": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
"name": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
"path": "/",
"uniqueId": "AROAJ4VEH3V4TL27YZSSM"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::pulumi-foo-log-collector-iampolicy-0",
"custom": true,
"id": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7-20171108195812293000000004",
"type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::pulumi-foo-log-collector",
"inputs": {
"policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
"role": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7"
},
"outputs": {
"id": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7-20171108195812293000000004",
"policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
"role": "pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:lambda/function:Function::pulumi-foo-log-collector",
"custom": true,
"id": "pulumi-foo-log-collector-e9cd6ec58f2116ff",
"type": "aws:lambda/function:Function",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::pulumi-foo-log-collector",
"inputs": {
"code": {
"4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
"assets": {
".": {
"4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
"hash": "817deda9f0a4e4358a82e30faeaaab3bb456d0aa62faeb69aa744b3abf180995",
"path": "."
},
"__index.js": {
"4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
"hash": "371d4d8ead106550e5d7e2d0c02dd2e479dba060c765e09f98840fdfe73ea824",
"text": "exports.handler = __88442d0b4365f25c858d35485cca4f999253cc40;\n\nfunction __88442d0b4365f25c858d35485cca4f999253cc40() {\n var _this;\n with({ }) {\n return (function() {\n\nreturn ((ev, ctx, cb) =\u003e {\n const zlib = require(\"zlib\");\n const payload = new Buffer(ev.awslogs.data, \"base64\");\n zlib.gunzip(payload, (err, result) =\u003e {\n if (err !== undefined \u0026\u0026 err !== null) {\n cb(err, null);\n }\n else {\n console.log(result.toString(\"utf8\"));\n cb(null, {});\n }\n });\n })\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\n"
}
},
"hash": "a9d89fe37b8226be55d17695285012d451d2e749947db7a336962eeb65fc1345"
},
"handler": "__index.handler",
"role": "arn:aws:iam::153052954103:role/pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
"runtime": "nodejs6.10",
"timeout": 180
},
"defaults": {
"code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive580507404",
"memorySize": "128",
"name": "pulumi-foo-log-collector-e9cd6ec58f2116ff",
"publish": false,
"timeout": "180"
},
"outputs": {
"arn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
"code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive451729659",
"deadLetterConfig": [],
"description": "",
"environment": [],
"handler": "__index.handler",
"id": "pulumi-foo-log-collector-e9cd6ec58f2116ff",
"invokeArn": "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff/invocations",
"kmsKeyArn": "",
"lastModified": "2017-11-08T19:58:25.717+0000",
"memorySize": "128",
"name": "pulumi-foo-log-collector-e9cd6ec58f2116ff",
"publish": false,
"qualifiedArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff:$LATEST",
"role": "arn:aws:iam::153052954103:role/pulumi-foo-log-collector-iamrole-2af8f6868f85d7d7",
"runtime": "nodejs6.10",
"sourceCodeHash": "rC8lRsDSOm3VcDZrv8qkZ4LsGBpYHlkcWHRE5qHBWLM=",
"tags": {},
"timeout": "180",
"tracingConfig": [
{
"mode": "PassThrough"
}
],
"version": "$LATEST",
"vpcConfig": []
}
},
{
"urn": "urn:pulumi:foo::todo::aws:serverless:Function::pulumi-foo-log-collector",
"custom": false,
"type": "aws:serverless:Function",
"inputs": {
"options": {
"policies": [
"arn:aws:iam::aws:policy/AWSLambdaFullAccess"
]
}
}
},
{
"urn": "urn:pulumi:foo::todo::aws:lambda/permission:Permission::pulumi-foo-log-collector",
"custom": true,
"id": "pulumi-foo-log-collector-715ade4f6f854187",
"type": "aws:lambda/permission:Permission",
"parent": "urn:pulumi:foo::todo::cloud:function:Function::todo035b5d8f",
"inputs": {
"action": "lambda:invokeFunction",
"function": "pulumi-foo-log-collector-e9cd6ec58f2116ff",
"principal": "logs.us-east-2.amazonaws.com"
},
"defaults": {
"statementId": "pulumi-foo-log-collector-715ade4f6f854187"
},
"outputs": {
"action": "lambda:invokeFunction",
"function": "pulumi-foo-log-collector-e9cd6ec58f2116ff",
"id": "pulumi-foo-log-collector-715ade4f6f854187",
"principal": "logs.us-east-2.amazonaws.com",
"qualifier": "",
"statementId": "pulumi-foo-log-collector-715ade4f6f854187"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter::todo035b5d8f",
"custom": true,
"id": "cwlsf-2917862896",
"type": "aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter",
"parent": "urn:pulumi:foo::todo::cloud:function:Function::todo035b5d8f",
"inputs": {
"destinationArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
"filterPattern": "",
"logGroup": "/aws/lambda/todo035b5d8f-7748c68eadc313c0"
},
"defaults": {
"name": "todo035b5d8f-c9b30759625946a3"
},
"outputs": {
"destinationArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
"filterPattern": "",
"id": "cwlsf-2917862896",
"logGroup": "/aws/lambda/todo035b5d8f-7748c68eadc313c0",
"name": "todo035b5d8f-c9b30759625946a3"
}
},
{
"urn": "urn:pulumi:foo::todo::cloud:function:Function::todo035b5d8f",
"custom": false,
"type": "cloud:function:Function",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"handler": {}
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/role:Role::todo67876f56-iamrole",
"custom": true,
"id": "todo67876f56-iamrole-ce66deec75ae88fd",
"type": "aws:iam/role:Role",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo67876f56",
"inputs": {
"assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Effect\":\"Allow\",\"Sid\":\"\"}]}"
},
"defaults": {
"forceDetachPolicies": false,
"name": "todo67876f56-iamrole-ce66deec75ae88fd",
"path": "/"
},
"outputs": {
"arn": "arn:aws:iam::153052954103:role/todo67876f56-iamrole-ce66deec75ae88fd",
"assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}",
"createDate": "2017-11-08T19:58:28Z",
"forceDetachPolicies": false,
"id": "todo67876f56-iamrole-ce66deec75ae88fd",
"name": "todo67876f56-iamrole-ce66deec75ae88fd",
"path": "/",
"uniqueId": "AROAJ4OUDFQWKLTUWKJO6"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todo67876f56-iampolicy-0",
"custom": true,
"id": "todo67876f56-iamrole-ce66deec75ae88fd-20171108195829869300000005",
"type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo67876f56",
"inputs": {
"policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
"role": "todo67876f56-iamrole-ce66deec75ae88fd"
},
"outputs": {
"id": "todo67876f56-iamrole-ce66deec75ae88fd-20171108195829869300000005",
"policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
"role": "todo67876f56-iamrole-ce66deec75ae88fd"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todo67876f56-iampolicy-1",
"custom": true,
"id": "todo67876f56-iamrole-ce66deec75ae88fd-20171108195831240000000006",
"type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo67876f56",
"inputs": {
"policyArn": "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess",
"role": "todo67876f56-iamrole-ce66deec75ae88fd"
},
"outputs": {
"id": "todo67876f56-iamrole-ce66deec75ae88fd-20171108195831240000000006",
"policyArn": "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess",
"role": "todo67876f56-iamrole-ce66deec75ae88fd"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:lambda/function:Function::todo67876f56",
"custom": true,
"id": "todo67876f56-7069ef1500d0e44e",
"type": "aws:lambda/function:Function",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::todo67876f56",
"inputs": {
"code": {
"4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
"assets": {
".": {
"4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
"hash": "817deda9f0a4e4358a82e30faeaaab3bb456d0aa62faeb69aa744b3abf180995",
"path": "."
},
"__index.js": {
"4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
"hash": "ece4682cb493cbebe3c503bee17d4566db2fe361528d5b1e86acb48fa2aa7362",
"text": "exports.handler = __a950d2f3106e78658d58f1ab976fb89886d8a56a;\n\nfunction __a950d2f3106e78658d58f1ab976fb89886d8a56a() {\n var _this;\n with({ apiGatewayToRequestResponse: __fbf646106cb48cc5348746d6ce09d72037a0bb76, route: { method: \"POST\", path: \"/todo/{id}\", handlers: [ __83c5bf0f4cf2fd2730ceee79a34c9fb7ee3f9ded ] } }) {\n return (function() {\n\nreturn ((ev, ctx, cb) =\u003e {\n let body;\n if (ev.body !== null) {\n if (ev.isBase64Encoded) {\n body = Buffer.from(ev.body, \"base64\");\n }\n else {\n body = Buffer.from(ev.body, \"utf8\");\n }\n }\n ctx.callbackWaitsForEmptyEventLoop = false;\n const reqres = apiGatewayToRequestResponse(ev, body, cb);\n let i = 0;\n const next = () =\u003e {\n const nextHandler = route.handlers[i++];\n if (nextHandler !== undefined) {\n nextHandler(reqres.req, reqres.res, next);\n }\n };\n next();\n })\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __fbf646106cb48cc5348746d6ce09d72037a0bb76() {\n var _this;\n with({ stageName: \"stage\" }) {\n return (function() {\n\nreturn (function apiGatewayToRequestResponse(ev, body, cb) {\n const response = {\n statusCode: 200,\n headers: {},\n body: Buffer.from([]),\n };\n const req = {\n headers: ev.headers,\n body: body,\n method: ev.httpMethod,\n params: ev.pathParameters,\n query: ev.queryStringParameters,\n path: ev.path,\n baseUrl: \"/\" + stageName,\n hostname: ev.headers[\"Host\"],\n protocol: ev.headers[\"X-Forwarded-Proto\"],\n };\n const res = {\n status: (code) =\u003e {\n response.statusCode = code;\n return res;\n },\n setHeader: (name, value) =\u003e {\n response.headers[name] = value;\n return res;\n },\n write: (data, encoding) =\u003e {\n if (encoding === undefined) {\n encoding = \"utf8\";\n }\n if (typeof data === \"string\") {\n data = Buffer.from(data, encoding);\n }\n response.body = Buffer.concat([response.body, data]);\n return res;\n },\n end: (data, encoding) =\u003e {\n if (data !== undefined) {\n res.write(data, encoding);\n }\n cb(null, {\n statusCode: response.statusCode,\n headers: response.headers,\n isBase64Encoded: true,\n body: response.body.toString(\"base64\"),\n });\n },\n json: (obj) =\u003e {\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify(obj));\n },\n };\n return { req, res };\n})\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __83c5bf0f4cf2fd2730ceee79a34c9fb7ee3f9ded() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, todos: { children: [ { children: [ ], urn: \"urn:pulumi:foo::todo::aws:dynamodb/table:Table::todo\", id: \"todo-a1916a6b16ec016b\", attribute: [ { name: \"id\", type: \"S\" } ], globalSecondaryIndex: [ ], hashKey: \"id\", localSecondaryIndex: [ ], name: \"todo-a1916a6b16ec016b\", readCapacity: \"5\", writeCapacity: \"5\", arn: \"arn:aws:dynamodb:us-east-2:153052954103:table/todo-a1916a6b16ec016b\" } ], urn: \"urn:pulumi:foo::todo::cloud:table:Table::todo\", primaryKey: \"id\", primaryKeyType: \"string\", get: __269a86aab19c88ab77347278ae480b2b3f3dd556, insert: __20c08953d1f10c1ddcff1e9ab6a0759b7516e3e3, scan: __42f6b3f709e32e9aee752e63d003b89c2bc2cad7, update: __124ff881420e47686a76c6dcae1754be8fb33422, delete: __3cfb20cfe7124ca024dfadf60ae1edecc10cf690 } }) {\n return (function() {\n\nreturn ((req, res) =\u003e __awaiter(this, void 0, void 0, function* () {\n console.log(\"POST /todo/\" + req.params[\"id\"]);\n try {\n yield todos.insert({ id: req.params[\"id\"], value: req.body.toString() });\n res.status(201).json({});\n }\n catch (err) {\n res.status(500).json(err);\n }\n}))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __492fe142c8be132f2ccfdc443ed720d77b1ef3a6() {\n var _this;\n with({ }) {\n return (function() {\n\nreturn (function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n})\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __269a86aab19c88ab77347278ae480b2b3f3dd556() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn ((query) =\u003e __awaiter(this, void 0, void 0, function* () {\n const result = yield db().get({\n TableName: getTableName(),\n Key: query,\n ConsistentRead: true,\n }).promise();\n return result.Item;\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __32fa8104bfb1107c90c2d18cfcadb353e7323c4c() {\n var _this;\n with({ }) {\n return (function() {\n\nreturn (() =\u003e {\n const awssdk = require(\"aws-sdk\");\n return new awssdk.DynamoDB.DocumentClient();\n })\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __2db1ada17876ecdd7d369ad50a160a38c23d44c4() {\n var _this;\n with({ tableName: \"todo-a1916a6b16ec016b\" }) {\n return (function() {\n\nreturn (function getTableName() {\n // Hack: Because of our outside/inside system for pulumi, tableName is seen as a\n // Computed\u003cstring\u003e on the outside, but a string on the inside. Of course, there's no\n // way to make TypeScript aware of that. So we just fool the typesystem with these\n // explicit casts.\n //\n // see: https://github.com/pulumi/pulumi/issues/331#issuecomment-333280955\n return tableName;\n })\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __20c08953d1f10c1ddcff1e9ab6a0759b7516e3e3() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn ((item) =\u003e __awaiter(this, void 0, void 0, function* () {\n yield db().put({\n TableName: getTableName(),\n Item: item,\n }).promise();\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __42f6b3f709e32e9aee752e63d003b89c2bc2cad7() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn (() =\u003e __awaiter(this, void 0, void 0, function* () {\n const result = yield db().scan({\n TableName: getTableName(),\n ConsistentRead: true,\n }).promise();\n return result.Items;\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __124ff881420e47686a76c6dcae1754be8fb33422() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn ((query, updates) =\u003e __awaiter(this, void 0, void 0, function* () {\n let updateExpression = \"\";\n const attributeValues = {};\n for (const key of Object.keys(updates)) {\n const val = updates[key];\n if (updateExpression === \"\") {\n updateExpression += \"SET \";\n }\n else {\n updateExpression += \", \";\n }\n updateExpression += `${key} = :${key}`;\n attributeValues[`:${key}`] = val;\n }\n yield db().update({\n TableName: getTableName(),\n Key: query,\n UpdateExpression: updateExpression,\n ExpressionAttributeValues: attributeValues,\n }).promise();\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __3cfb20cfe7124ca024dfadf60ae1edecc10cf690() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn ((query) =\u003e __awaiter(this, void 0, void 0, function* () {\n yield db().delete({\n TableName: getTableName(),\n Key: query,\n }).promise();\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\n"
}
},
"hash": "95023a27d5a4393ec1440ff2d704997748f68087320f130218deb540c457f14a"
},
"deadLetterConfig": [
{
"targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
}
],
"handler": "__index.handler",
"memorySize": 128,
"role": "arn:aws:iam::153052954103:role/todo67876f56-iamrole-ce66deec75ae88fd",
"runtime": "nodejs6.10",
"timeout": 180
},
"defaults": {
"code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive069041694",
"memorySize": "128",
"name": "todo67876f56-7069ef1500d0e44e",
"publish": false,
"timeout": "180"
},
"outputs": {
"arn": "arn:aws:lambda:us-east-2:153052954103:function:todo67876f56-7069ef1500d0e44e",
"code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive199670501",
"deadLetterConfig": [
{
"targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
}
],
"description": "",
"environment": [],
"handler": "__index.handler",
"id": "todo67876f56-7069ef1500d0e44e",
"invokeArn": "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todo67876f56-7069ef1500d0e44e/invocations",
"kmsKeyArn": "",
"lastModified": "2017-11-08T19:58:39.700+0000",
"memorySize": "128",
"name": "todo67876f56-7069ef1500d0e44e",
"publish": false,
"qualifiedArn": "arn:aws:lambda:us-east-2:153052954103:function:todo67876f56-7069ef1500d0e44e:$LATEST",
"role": "arn:aws:iam::153052954103:role/todo67876f56-iamrole-ce66deec75ae88fd",
"runtime": "nodejs6.10",
"sourceCodeHash": "8MW5kWvG/GsKUoKzl6eeave6PJsTtx943FRFO/hizFM=",
"tags": {},
"timeout": "180",
"tracingConfig": [
{
"mode": "PassThrough"
}
],
"version": "$LATEST",
"vpcConfig": []
}
},
{
"urn": "urn:pulumi:foo::todo::aws:serverless:Function::todo67876f56",
"custom": false,
"type": "aws:serverless:Function",
"parent": "urn:pulumi:foo::todo::cloud:function:Function::todo67876f56",
"inputs": {
"options": {
"deadLetterConfig": {
"targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
},
"memorySize": 128,
"policies": [
"arn:aws:iam::aws:policy/AWSLambdaFullAccess",
"arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess"
]
}
}
},
{
"urn": "urn:pulumi:foo::todo::aws:cloudwatch/logGroup:LogGroup::todo67876f56-func-logs",
"custom": true,
"id": "/aws/lambda/todo67876f56-7069ef1500d0e44e",
"type": "aws:cloudwatch/logGroup:LogGroup",
"parent": "urn:pulumi:foo::todo::cloud:function:Function::todo67876f56",
"inputs": {
"name": "/aws/lambda/todo67876f56-7069ef1500d0e44e",
"retentionInDays": 1
},
"defaults": {
"retentionInDays": "1"
},
"outputs": {
"arn": "arn:aws:logs:us-east-2:153052954103:log-group:/aws/lambda/todo67876f56-7069ef1500d0e44e:*",
"id": "/aws/lambda/todo67876f56-7069ef1500d0e44e",
"name": "/aws/lambda/todo67876f56-7069ef1500d0e44e",
"retentionInDays": "1",
"tags": {}
}
},
{
"urn": "urn:pulumi:foo::todo::aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter::todo67876f56",
"custom": true,
"id": "cwlsf-1714177476",
"type": "aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter",
"parent": "urn:pulumi:foo::todo::cloud:function:Function::todo67876f56",
"inputs": {
"destinationArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
"filterPattern": "",
"logGroup": "/aws/lambda/todo67876f56-7069ef1500d0e44e"
},
"defaults": {
"name": "todo67876f56-b74b44a8d71cb4d7"
},
"outputs": {
"destinationArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
"filterPattern": "",
"id": "cwlsf-1714177476",
"logGroup": "/aws/lambda/todo67876f56-7069ef1500d0e44e",
"name": "todo67876f56-b74b44a8d71cb4d7"
}
},
{
"urn": "urn:pulumi:foo::todo::cloud:function:Function::todo67876f56",
"custom": false,
"type": "cloud:function:Function",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"handler": {}
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/role:Role::todoc57917fa-iamrole",
"custom": true,
"id": "todoc57917fa-iamrole-694bcb6442f1858b",
"type": "aws:iam/role:Role",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::todoc57917fa",
"inputs": {
"assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Effect\":\"Allow\",\"Sid\":\"\"}]}"
},
"defaults": {
"forceDetachPolicies": false,
"name": "todoc57917fa-iamrole-694bcb6442f1858b",
"path": "/"
},
"outputs": {
"arn": "arn:aws:iam::153052954103:role/todoc57917fa-iamrole-694bcb6442f1858b",
"assumeRolePolicy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}",
"createDate": "2017-11-08T19:58:44Z",
"forceDetachPolicies": false,
"id": "todoc57917fa-iamrole-694bcb6442f1858b",
"name": "todoc57917fa-iamrole-694bcb6442f1858b",
"path": "/",
"uniqueId": "AROAIGQTRMZ65JGHRMYGI"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todoc57917fa-iampolicy-0",
"custom": true,
"id": "todoc57917fa-iamrole-694bcb6442f1858b-20171108195845358400000007",
"type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::todoc57917fa",
"inputs": {
"policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
"role": "todoc57917fa-iamrole-694bcb6442f1858b"
},
"outputs": {
"id": "todoc57917fa-iamrole-694bcb6442f1858b-20171108195845358400000007",
"policyArn": "arn:aws:iam::aws:policy/AWSLambdaFullAccess",
"role": "todoc57917fa-iamrole-694bcb6442f1858b"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:iam/rolePolicyAttachment:RolePolicyAttachment::todoc57917fa-iampolicy-1",
"custom": true,
"id": "todoc57917fa-iamrole-694bcb6442f1858b-20171108195846675000000008",
"type": "aws:iam/rolePolicyAttachment:RolePolicyAttachment",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::todoc57917fa",
"inputs": {
"policyArn": "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess",
"role": "todoc57917fa-iamrole-694bcb6442f1858b"
},
"outputs": {
"id": "todoc57917fa-iamrole-694bcb6442f1858b-20171108195846675000000008",
"policyArn": "arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess",
"role": "todoc57917fa-iamrole-694bcb6442f1858b"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:lambda/function:Function::todoc57917fa",
"custom": true,
"id": "todoc57917fa-2fb58339c66e2b46",
"type": "aws:lambda/function:Function",
"parent": "urn:pulumi:foo::todo::aws:serverless:Function::todoc57917fa",
"inputs": {
"code": {
"4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
"assets": {
".": {
"4dabf18193072939515e22adb298388d": "0def7320c3a5731c473e5ecbe6d01bc7",
"hash": "817deda9f0a4e4358a82e30faeaaab3bb456d0aa62faeb69aa744b3abf180995",
"path": "."
},
"__index.js": {
"4dabf18193072939515e22adb298388d": "c44067f5952c0a294b673a41bacd8c17",
"hash": "c580d01e8cd138bafec86d9637e36c91f0b02f76a93f905107a706023cc38ffa",
"text": "exports.handler = __e1c9effdafcb58b254eea61ac68abf8a58b1f75f;\n\nfunction __e1c9effdafcb58b254eea61ac68abf8a58b1f75f() {\n var _this;\n with({ apiGatewayToRequestResponse: __fbf646106cb48cc5348746d6ce09d72037a0bb76, route: { method: \"GET\", path: \"/todo\", handlers: [ __cfa3f168a2b5a7b0e8c87c7c05d9f158fc764d0d ] } }) {\n return (function() {\n\nreturn ((ev, ctx, cb) =\u003e {\n let body;\n if (ev.body !== null) {\n if (ev.isBase64Encoded) {\n body = Buffer.from(ev.body, \"base64\");\n }\n else {\n body = Buffer.from(ev.body, \"utf8\");\n }\n }\n ctx.callbackWaitsForEmptyEventLoop = false;\n const reqres = apiGatewayToRequestResponse(ev, body, cb);\n let i = 0;\n const next = () =\u003e {\n const nextHandler = route.handlers[i++];\n if (nextHandler !== undefined) {\n nextHandler(reqres.req, reqres.res, next);\n }\n };\n next();\n })\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __fbf646106cb48cc5348746d6ce09d72037a0bb76() {\n var _this;\n with({ stageName: \"stage\" }) {\n return (function() {\n\nreturn (function apiGatewayToRequestResponse(ev, body, cb) {\n const response = {\n statusCode: 200,\n headers: {},\n body: Buffer.from([]),\n };\n const req = {\n headers: ev.headers,\n body: body,\n method: ev.httpMethod,\n params: ev.pathParameters,\n query: ev.queryStringParameters,\n path: ev.path,\n baseUrl: \"/\" + stageName,\n hostname: ev.headers[\"Host\"],\n protocol: ev.headers[\"X-Forwarded-Proto\"],\n };\n const res = {\n status: (code) =\u003e {\n response.statusCode = code;\n return res;\n },\n setHeader: (name, value) =\u003e {\n response.headers[name] = value;\n return res;\n },\n write: (data, encoding) =\u003e {\n if (encoding === undefined) {\n encoding = \"utf8\";\n }\n if (typeof data === \"string\") {\n data = Buffer.from(data, encoding);\n }\n response.body = Buffer.concat([response.body, data]);\n return res;\n },\n end: (data, encoding) =\u003e {\n if (data !== undefined) {\n res.write(data, encoding);\n }\n cb(null, {\n statusCode: response.statusCode,\n headers: response.headers,\n isBase64Encoded: true,\n body: response.body.toString(\"base64\"),\n });\n },\n json: (obj) =\u003e {\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify(obj));\n },\n };\n return { req, res };\n})\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __cfa3f168a2b5a7b0e8c87c7c05d9f158fc764d0d() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, todos: { children: [ { children: [ ], urn: \"urn:pulumi:foo::todo::aws:dynamodb/table:Table::todo\", id: \"todo-a1916a6b16ec016b\", attribute: [ { name: \"id\", type: \"S\" } ], globalSecondaryIndex: [ ], hashKey: \"id\", localSecondaryIndex: [ ], name: \"todo-a1916a6b16ec016b\", readCapacity: \"5\", writeCapacity: \"5\", arn: \"arn:aws:dynamodb:us-east-2:153052954103:table/todo-a1916a6b16ec016b\" } ], urn: \"urn:pulumi:foo::todo::cloud:table:Table::todo\", primaryKey: \"id\", primaryKeyType: \"string\", get: __269a86aab19c88ab77347278ae480b2b3f3dd556, insert: __20c08953d1f10c1ddcff1e9ab6a0759b7516e3e3, scan: __42f6b3f709e32e9aee752e63d003b89c2bc2cad7, update: __124ff881420e47686a76c6dcae1754be8fb33422, delete: __3cfb20cfe7124ca024dfadf60ae1edecc10cf690 } }) {\n return (function() {\n\nreturn ((req, res) =\u003e __awaiter(this, void 0, void 0, function* () {\n console.log(\"GET /todo\");\n try {\n let items = yield todos.scan();\n res.status(200).json(items);\n }\n catch (err) {\n res.status(500).json(err);\n }\n}))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __492fe142c8be132f2ccfdc443ed720d77b1ef3a6() {\n var _this;\n with({ }) {\n return (function() {\n\nreturn (function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n})\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __269a86aab19c88ab77347278ae480b2b3f3dd556() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn ((query) =\u003e __awaiter(this, void 0, void 0, function* () {\n const result = yield db().get({\n TableName: getTableName(),\n Key: query,\n ConsistentRead: true,\n }).promise();\n return result.Item;\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __32fa8104bfb1107c90c2d18cfcadb353e7323c4c() {\n var _this;\n with({ }) {\n return (function() {\n\nreturn (() =\u003e {\n const awssdk = require(\"aws-sdk\");\n return new awssdk.DynamoDB.DocumentClient();\n })\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __2db1ada17876ecdd7d369ad50a160a38c23d44c4() {\n var _this;\n with({ tableName: \"todo-a1916a6b16ec016b\" }) {\n return (function() {\n\nreturn (function getTableName() {\n // Hack: Because of our outside/inside system for pulumi, tableName is seen as a\n // Computed\u003cstring\u003e on the outside, but a string on the inside. Of course, there's no\n // way to make TypeScript aware of that. So we just fool the typesystem with these\n // explicit casts.\n //\n // see: https://github.com/pulumi/pulumi/issues/331#issuecomment-333280955\n return tableName;\n })\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __20c08953d1f10c1ddcff1e9ab6a0759b7516e3e3() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn ((item) =\u003e __awaiter(this, void 0, void 0, function* () {\n yield db().put({\n TableName: getTableName(),\n Item: item,\n }).promise();\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __42f6b3f709e32e9aee752e63d003b89c2bc2cad7() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn (() =\u003e __awaiter(this, void 0, void 0, function* () {\n const result = yield db().scan({\n TableName: getTableName(),\n ConsistentRead: true,\n }).promise();\n return result.Items;\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __124ff881420e47686a76c6dcae1754be8fb33422() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn ((query, updates) =\u003e __awaiter(this, void 0, void 0, function* () {\n let updateExpression = \"\";\n const attributeValues = {};\n for (const key of Object.keys(updates)) {\n const val = updates[key];\n if (updateExpression === \"\") {\n updateExpression += \"SET \";\n }\n else {\n updateExpression += \", \";\n }\n updateExpression += `${key} = :${key}`;\n attributeValues[`:${key}`] = val;\n }\n yield db().update({\n TableName: getTableName(),\n Key: query,\n UpdateExpression: updateExpression,\n ExpressionAttributeValues: attributeValues,\n }).promise();\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\nfunction __3cfb20cfe7124ca024dfadf60ae1edecc10cf690() {\n var _this;\n with({ __awaiter: __492fe142c8be132f2ccfdc443ed720d77b1ef3a6, db: __32fa8104bfb1107c90c2d18cfcadb353e7323c4c, getTableName: __2db1ada17876ecdd7d369ad50a160a38c23d44c4 }) {\n return (function() {\n\nreturn ((query) =\u003e __awaiter(this, void 0, void 0, function* () {\n yield db().delete({\n TableName: getTableName(),\n Key: query,\n }).promise();\n }))\n\n }).apply(_this).apply(this, arguments);\n }\n}\n\n"
}
},
"hash": "0e2624d7e58513ff02277d9d7ce4f9b6bc32a4cd09002ac82c3b3a31a1257205"
},
"deadLetterConfig": [
{
"targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
}
],
"handler": "__index.handler",
"memorySize": 128,
"role": "arn:aws:iam::153052954103:role/todoc57917fa-iamrole-694bcb6442f1858b",
"runtime": "nodejs6.10",
"timeout": 180
},
"defaults": {
"code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive769316096",
"memorySize": "128",
"name": "todoc57917fa-2fb58339c66e2b46",
"publish": false,
"timeout": "180"
},
"outputs": {
"arn": "arn:aws:lambda:us-east-2:153052954103:function:todoc57917fa-2fb58339c66e2b46",
"code": "/var/folders/h7/n3r2j28517g5bbvlkn1l_h_80000gn/T/pulumi-archive597830751",
"deadLetterConfig": [
{
"targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
}
],
"description": "",
"environment": [],
"handler": "__index.handler",
"id": "todoc57917fa-2fb58339c66e2b46",
"invokeArn": "arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todoc57917fa-2fb58339c66e2b46/invocations",
"kmsKeyArn": "",
"lastModified": "2017-11-08T19:58:55.468+0000",
"memorySize": "128",
"name": "todoc57917fa-2fb58339c66e2b46",
"publish": false,
"qualifiedArn": "arn:aws:lambda:us-east-2:153052954103:function:todoc57917fa-2fb58339c66e2b46:$LATEST",
"role": "arn:aws:iam::153052954103:role/todoc57917fa-iamrole-694bcb6442f1858b",
"runtime": "nodejs6.10",
"sourceCodeHash": "JOLZIbcsEiyD/ve/26I7FakO5pE4IcDcHw+So/Mxdlo=",
"tags": {},
"timeout": "180",
"tracingConfig": [
{
"mode": "PassThrough"
}
],
"version": "$LATEST",
"vpcConfig": []
}
},
{
"urn": "urn:pulumi:foo::todo::aws:serverless:Function::todoc57917fa",
"custom": false,
"type": "aws:serverless:Function",
"parent": "urn:pulumi:foo::todo::cloud:function:Function::todoc57917fa",
"inputs": {
"options": {
"deadLetterConfig": {
"targetArn": "arn:aws:sns:us-east-2:153052954103:unhandled-error-topic-7c13e147ce8d9e53"
},
"memorySize": 128,
"policies": [
"arn:aws:iam::aws:policy/AWSLambdaFullAccess",
"arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess"
]
}
}
},
{
"urn": "urn:pulumi:foo::todo::aws:cloudwatch/logGroup:LogGroup::todoc57917fa-func-logs",
"custom": true,
"id": "/aws/lambda/todoc57917fa-2fb58339c66e2b46",
"type": "aws:cloudwatch/logGroup:LogGroup",
"parent": "urn:pulumi:foo::todo::cloud:function:Function::todoc57917fa",
"inputs": {
"name": "/aws/lambda/todoc57917fa-2fb58339c66e2b46",
"retentionInDays": 1
},
"defaults": {
"retentionInDays": "1"
},
"outputs": {
"arn": "arn:aws:logs:us-east-2:153052954103:log-group:/aws/lambda/todoc57917fa-2fb58339c66e2b46:*",
"id": "/aws/lambda/todoc57917fa-2fb58339c66e2b46",
"name": "/aws/lambda/todoc57917fa-2fb58339c66e2b46",
"retentionInDays": "1",
"tags": {}
}
},
{
"urn": "urn:pulumi:foo::todo::aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter::todoc57917fa",
"custom": true,
"id": "cwlsf-166366141",
"type": "aws:cloudwatch/logSubscriptionFilter:LogSubscriptionFilter",
"parent": "urn:pulumi:foo::todo::cloud:function:Function::todoc57917fa",
"inputs": {
"destinationArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
"filterPattern": "",
"logGroup": "/aws/lambda/todoc57917fa-2fb58339c66e2b46"
},
"defaults": {
"name": "todoc57917fa-80b54f1d26aaf9da"
},
"outputs": {
"destinationArn": "arn:aws:lambda:us-east-2:153052954103:function:pulumi-foo-log-collector-e9cd6ec58f2116ff",
"filterPattern": "",
"id": "cwlsf-166366141",
"logGroup": "/aws/lambda/todoc57917fa-2fb58339c66e2b46",
"name": "todoc57917fa-80b54f1d26aaf9da"
}
},
{
"urn": "urn:pulumi:foo::todo::cloud:function:Function::todoc57917fa",
"custom": false,
"type": "cloud:function:Function",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"handler": {}
}
},
{
"urn": "urn:pulumi:foo::todo::aws:apigateway/restApi:RestApi::todo",
"custom": true,
"id": "eupwl7wu4i",
"type": "aws:apigateway/restApi:RestApi",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"body": "{\"swagger\":\"2.0\",\"info\":{\"title\":\"todo\",\"version\":\"1.0\"},\"paths\":{\"/\":{\"get\":{\"responses\":{\"200\":{\"description\":\"200 response\",\"schema\":{\"type\":\"object\"},\"headers\":{\"Content-Type\":{\"type\":\"string\"},\"content-type\":{\"type\":\"string\"}}},\"400\":{\"description\":\"400 response\"},\"500\":{\"description\":\"500 response\"}},\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"GET\",\"type\":\"aws\",\"responses\":{\"4\\\\d{2}\":{\"statusCode\":\"400\"},\"default\":{\"statusCode\":\"200\",\"responseParameters\":{\"method.response.header.Content-Type\":\"integration.response.header.Content-Type\",\"method.response.header.content-type\":\"integration.response.header.content-type\"}},\"5\\\\d{2}\":{\"statusCode\":\"500\"}},\"uri\":\"arn:aws:apigateway:us-east-2:s3:path/todo-8c10043f3d2b0e28/todo4c238266/index.html\",\"credentials\":\"arn:aws:iam::153052954103:role/todo4c238266-c22303f113387c32\"}}},\"/{proxy+}\":{\"x-amazon-apigateway-any-method\":{\"parameters\":[{\"name\":\"proxy\",\"in\":\"path\",\"required\":true,\"type\":\"string\"}],\"responses\":{\"200\":{\"description\":\"200 response\",\"schema\":{\"type\":\"object\"},\"headers\":{\"Content-Type\":{\"type\":\"string\"},\"content-type\":{\"type\":\"string\"}}},\"400\":{\"description\":\"400 response\"},\"500\":{\"description\":\"500 response\"}},\"x-amazon-apigateway-integration\":{\"requestParameters\":{\"integration.request.path.proxy\":\"method.request.path.proxy\"},\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"GET\",\"type\":\"aws\",\"responses\":{\"4\\\\d{2}\":{\"statusCode\":\"400\"},\"default\":{\"statusCode\":\"200\",\"responseParameters\":{\"method.response.header.Content-Type\":\"integration.response.header.Content-Type\",\"method.response.header.content-type\":\"integration.response.header.content-type\"}},\"5\\\\d{2}\":{\"statusCode\":\"500\"}},\"uri\":\"arn:aws:apigateway:us-east-2:s3:path/todo-8c10043f3d2b0e28/todo4c238266/{proxy}\",\"credentials\":\"arn:aws:iam::153052954103:role/todo4c238266-c22303f113387c32\"}}},\"/todo/{id}\":{\"get\":{\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\",\"uri\":\"arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todo035b5d8f-7748c68eadc313c0/invocations\"}},\"post\":{\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\",\"uri\":\"arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todo67876f56-7069ef1500d0e44e/invocations\"}}},\"/todo\":{\"get\":{\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\",\"uri\":\"arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todoc57917fa-2fb58339c66e2b46/invocations\"}}}},\"x-amazon-apigateway-binary-media-types\":[\"*/*\"]}"
},
"defaults": {
"name": "todo-ad0751ace493404e"
},
"outputs": {
"body": "{\"swagger\":\"2.0\",\"info\":{\"title\":\"todo\",\"version\":\"1.0\"},\"paths\":{\"/\":{\"get\":{\"responses\":{\"200\":{\"description\":\"200 response\",\"schema\":{\"type\":\"object\"},\"headers\":{\"Content-Type\":{\"type\":\"string\"},\"content-type\":{\"type\":\"string\"}}},\"400\":{\"description\":\"400 response\"},\"500\":{\"description\":\"500 response\"}},\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"GET\",\"type\":\"aws\",\"responses\":{\"4\\\\d{2}\":{\"statusCode\":\"400\"},\"default\":{\"statusCode\":\"200\",\"responseParameters\":{\"method.response.header.Content-Type\":\"integration.response.header.Content-Type\",\"method.response.header.content-type\":\"integration.response.header.content-type\"}},\"5\\\\d{2}\":{\"statusCode\":\"500\"}},\"uri\":\"arn:aws:apigateway:us-east-2:s3:path/todo-8c10043f3d2b0e28/todo4c238266/index.html\",\"credentials\":\"arn:aws:iam::153052954103:role/todo4c238266-c22303f113387c32\"}}},\"/{proxy+}\":{\"x-amazon-apigateway-any-method\":{\"parameters\":[{\"name\":\"proxy\",\"in\":\"path\",\"required\":true,\"type\":\"string\"}],\"responses\":{\"200\":{\"description\":\"200 response\",\"schema\":{\"type\":\"object\"},\"headers\":{\"Content-Type\":{\"type\":\"string\"},\"content-type\":{\"type\":\"string\"}}},\"400\":{\"description\":\"400 response\"},\"500\":{\"description\":\"500 response\"}},\"x-amazon-apigateway-integration\":{\"requestParameters\":{\"integration.request.path.proxy\":\"method.request.path.proxy\"},\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"GET\",\"type\":\"aws\",\"responses\":{\"4\\\\d{2}\":{\"statusCode\":\"400\"},\"default\":{\"statusCode\":\"200\",\"responseParameters\":{\"method.response.header.Content-Type\":\"integration.response.header.Content-Type\",\"method.response.header.content-type\":\"integration.response.header.content-type\"}},\"5\\\\d{2}\":{\"statusCode\":\"500\"}},\"uri\":\"arn:aws:apigateway:us-east-2:s3:path/todo-8c10043f3d2b0e28/todo4c238266/{proxy}\",\"credentials\":\"arn:aws:iam::153052954103:role/todo4c238266-c22303f113387c32\"}}},\"/todo/{id}\":{\"get\":{\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\",\"uri\":\"arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todo035b5d8f-7748c68eadc313c0/invocations\"}},\"post\":{\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\",\"uri\":\"arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todo67876f56-7069ef1500d0e44e/invocations\"}}},\"/todo\":{\"get\":{\"x-amazon-apigateway-integration\":{\"passthroughBehavior\":\"when_no_match\",\"httpMethod\":\"POST\",\"type\":\"aws_proxy\",\"uri\":\"arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-2:153052954103:function:todoc57917fa-2fb58339c66e2b46/invocations\"}}}},\"x-amazon-apigateway-binary-media-types\":[\"*/*\"]}",
"createdDate": "2017-11-08T19:58:59Z",
"description": "",
"id": "eupwl7wu4i",
"name": "todo",
"rootResourceId": "jxbhzjh5dd"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:apigateway/deployment:Deployment::todo_f569e86a",
"custom": true,
"id": "4ws2ht",
"type": "aws:apigateway/deployment:Deployment",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"description": "Deployment of version todo_f569e86a",
"restApi": "eupwl7wu4i",
"stageName": ""
},
"outputs": {
"createdDate": "2017-11-08T19:59:03Z",
"description": "Deployment of version todo_f569e86a",
"executionArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/",
"id": "4ws2ht",
"invokeUrl": "https://eupwl7wu4i.execute-api.us-east-2.amazonaws.com/",
"restApi": "eupwl7wu4i",
"stageName": ""
}
},
{
"urn": "urn:pulumi:foo::todo::aws:apigateway/stage:Stage::todo",
"custom": true,
"id": "ags-eupwl7wu4i-stage",
"type": "aws:apigateway/stage:Stage",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"deployment": "4ws2ht",
"description": "The current deployment of the API.",
"restApi": "eupwl7wu4i",
"stageName": "stage"
},
"outputs": {
"cacheClusterEnabled": false,
"cacheClusterSize": "",
"clientCertificateId": "",
"deployment": "4ws2ht",
"description": "The current deployment of the API.",
"documentationVersion": "",
"id": "ags-eupwl7wu4i-stage",
"restApi": "eupwl7wu4i",
"stageName": "stage",
"variables": {}
}
},
{
"urn": "urn:pulumi:foo::todo::aws:lambda/permission:Permission::todo_invoke_f0c1d77e",
"custom": true,
"id": "todo_invoke_f0c1d77e-0225bcbbfa5e7941",
"type": "aws:lambda/permission:Permission",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"action": "lambda:invokeFunction",
"function": "todo035b5d8f-7748c68eadc313c0",
"principal": "apigateway.amazonaws.com",
"sourceArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/stage/GET/todo/{id}"
},
"defaults": {
"statementId": "todo_invoke_f0c1d77e-0225bcbbfa5e7941"
},
"outputs": {
"action": "lambda:invokeFunction",
"function": "todo035b5d8f-7748c68eadc313c0",
"id": "todo_invoke_f0c1d77e-0225bcbbfa5e7941",
"principal": "apigateway.amazonaws.com",
"qualifier": "",
"sourceArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/stage/GET/todo/{id}",
"statementId": "todo_invoke_f0c1d77e-0225bcbbfa5e7941"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:lambda/permission:Permission::todo_invoke_44308e8f",
"custom": true,
"id": "todo_invoke_44308e8f-08a405381ef4ecdb",
"type": "aws:lambda/permission:Permission",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"action": "lambda:invokeFunction",
"function": "todo67876f56-7069ef1500d0e44e",
"principal": "apigateway.amazonaws.com",
"sourceArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/stage/POST/todo/{id}"
},
"defaults": {
"statementId": "todo_invoke_44308e8f-08a405381ef4ecdb"
},
"outputs": {
"action": "lambda:invokeFunction",
"function": "todo67876f56-7069ef1500d0e44e",
"id": "todo_invoke_44308e8f-08a405381ef4ecdb",
"principal": "apigateway.amazonaws.com",
"qualifier": "",
"sourceArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/stage/POST/todo/{id}",
"statementId": "todo_invoke_44308e8f-08a405381ef4ecdb"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:lambda/permission:Permission::todo_invoke_a55f2cbc",
"custom": true,
"id": "todo_invoke_a55f2cbc-b70db0537c54d3d2",
"type": "aws:lambda/permission:Permission",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"action": "lambda:invokeFunction",
"function": "todoc57917fa-2fb58339c66e2b46",
"principal": "apigateway.amazonaws.com",
"sourceArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/stage/GET/todo"
},
"defaults": {
"statementId": "todo_invoke_a55f2cbc-b70db0537c54d3d2"
},
"outputs": {
"action": "lambda:invokeFunction",
"function": "todoc57917fa-2fb58339c66e2b46",
"id": "todo_invoke_a55f2cbc-b70db0537c54d3d2",
"principal": "apigateway.amazonaws.com",
"qualifier": "",
"sourceArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/stage/GET/todo",
"statementId": "todo_invoke_a55f2cbc-b70db0537c54d3d2"
}
},
{
"urn": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"custom": false,
"type": "cloud:http:HttpEndpoint",
"inputs": {
"customDomainNames": [],
"customDomains": [],
"routes": [
{
"handlers": [
{},
{}
],
"method": "GET",
"path": "/todo/{id}"
},
{
"handlers": [
{}
],
"method": "POST",
"path": "/todo/{id}"
},
{
"handlers": [
{}
],
"method": "GET",
"path": "/todo"
}
],
"staticRoutes": [
{
"localPath": "www",
"options": {},
"path": "/"
}
],
"url": "https://eupwl7wu4i.execute-api.us-east-2.amazonaws.com/"
}
},
{
"urn": "urn:pulumi:foo::todo::aws:apigateway/deployment:Deployment::todo_f569e86a",
"delete": true,
"custom": true,
"id": "abc123",
"type": "aws:apigateway/deployment:Deployment",
"parent": "urn:pulumi:foo::todo::cloud:http:HttpEndpoint::todo",
"inputs": {
"description": "Deployment of version todo_f569e86a",
"restApi": "eupwl7wu4i",
"stageName": ""
},
"outputs": {
"createdDate": "2017-11-08T19:59:03Z",
"description": "Deployment of version todo_f569e86a",
"executionArn": "arn:aws:execute-api:us-east-2:153052954103:eupwl7wu4i/",
"id": "abc123",
"invokeUrl": "https://eupwl7wu4i.execute-api.us-east-2.amazonaws.com/",
"restApi": "eupwl7wu4i",
"stageName": ""
}
}
]
}
}