Beispiel #1
0
        internal BuildCustomResourceStack(Construct scope, string id = "Image-Recognition-4-Custom-Stack", IStackProps props = null) : base(scope, id, props)
        {
            try{
                string appSyncName = Fn.ImportValue(BuildAppSyncStack.GRAPHQL_API_ID_EXPORT);
                var    graphqlAPI  = GraphqlApi.FromGraphqlApiAttributes(this, "Existing-Graph-API", new GraphqlApiAttributes {
                    GraphqlApiId = appSyncName
                });

                var sfnProxyDataSource = graphqlAPI.AddHttpDataSource
                                         (
                    "SfnProxyDataSource",
                    "https://states." + Region + ".amazonaws.com/",
                    new HttpDataSourceOptions {
                    AuthorizationConfig = new AwsIamConfig()
                    {
                        SigningRegion      = Region,
                        SigningServiceName = "states"
                    }
                }
                                         );

                PolicyStatement sfnPolicy = new PolicyStatement(new PolicyStatementProps {
                    Effect    = Effect.ALLOW,
                    Actions   = new string[] { "states:StartExecution", "states:DescribeExecution" },
                    Resources = new string[] { "*" }
                });


                sfnProxyDataSource.GrantPrincipal.AddToPrincipalPolicy(sfnPolicy);

                sfnProxyDataSource.CreateResolver(new ResolverProps {
                    TypeName  = "Mutation",
                    FieldName = "startSfnExecution",
                    RequestMappingTemplate  = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Mutation.startSfnExecution.req.vtl"),
                    ResponseMappingTemplate = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Mutation.startSfnExecution.res.vtl"),
                });


                sfnProxyDataSource.CreateResolver(new ResolverProps {
                    TypeName  = "Query",
                    FieldName = "checkSfnStatus",
                    RequestMappingTemplate  = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Query.checkSfnStatus.req.vtl"),
                    ResponseMappingTemplate = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Query.checkSfnStatus.res.vtl"),
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Beispiel #2
0
        public BuildAppSyncStack(Construct scope, string id = "Image-Recognition-1-AppSync-Env-Stack", IStackProps props = null) : base(scope, id, props)
        {
            //TODO: Add Authentication.
            try{
                var api = new GraphqlApi(this, "photoshare", new GraphqlApiProps {
                    Name   = "photoshare",
                    Schema = Schema.FromAsset("src/ImageRecognitionInfrastructure/API/schema.graphql"),
                    // AuthorizationConfig = new AuthorizationConfig{
                    //     DefaultAuthorization = new AuthorizationMode(){
                    //         AuthorizationType = AuthorizationType.USER_POOL,

                    //     },
                    //     AdditionalAuthorizationModes = new AuthorizationMode[]{
                    //         new AuthorizationMode(){AuthorizationType =  AuthorizationType.IAM}
                    //     }
                    // }
                });


                api.AddNoneDataSource("NONE");

                new CfnOutput(this, "App-Sync-API-ID", new CfnOutputProps {
                    Value      = api.ApiId,
                    ExportName = GRAPHQL_API_ID_EXPORT
                });

                new CfnOutput(this, "App-Sync-End-Point", new CfnOutputProps {
                    Value      = api.GraphqlUrl,
                    ExportName = GRAPHQL_API_END_POINT_EXPORT
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error " + ex.Message + " " + ex.InnerException);
            }
        }
        internal BuildAlbumStack(Construct scope, string id = "Image-Recognition-2-Album-Stack", IStackProps props = null) : base(scope, id, props)
        {
            try{
                var albumTable = new Table(this, "AlbumTable", new TableProps {
                    PartitionKey = new Attribute {
                        Name = "id", Type = AttributeType.STRING
                    },
                    BillingMode   = BillingMode.PAY_PER_REQUEST,
                    RemovalPolicy = RemovalPolicy.DESTROY,
                    Stream        = StreamViewType.NEW_AND_OLD_IMAGES
                });

                string appSyncName = Fn.ImportValue(BuildAppSyncStack.GRAPHQL_API_ID_EXPORT);
                var    graphqlAPI  = GraphqlApi.FromGraphqlApiAttributes(this, "Existing-Graph-API", new GraphqlApiAttributes {
                    GraphqlApiId = appSyncName
                });

                var albumTableDataSource = graphqlAPI.AddDynamoDbDataSource("AlbumTable", albumTable);

                albumTableDataSource.CreateResolver(new ResolverProps {
                    TypeName  = "Query",
                    FieldName = "getAlbum",
                    RequestMappingTemplate  = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Query.getAlbum.req.vtl"),
                    ResponseMappingTemplate = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Query.getAlbum.res.vtl"),
                });

                albumTableDataSource.CreateResolver(new ResolverProps {
                    TypeName  = "Query",
                    FieldName = "listAlbums",
                    RequestMappingTemplate  = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Query.listAlbums.req.vtl"),
                    ResponseMappingTemplate = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Query.listAlbums.res.vtl"),
                });

                albumTableDataSource.CreateResolver(new ResolverProps {
                    TypeName  = "Mutation",
                    FieldName = "createAlbum",
                    RequestMappingTemplate  = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Mutation.createAlbum.req.vtl"),
                    ResponseMappingTemplate = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Mutation.createAlbum.res.vtl"),
                });

                albumTableDataSource.CreateResolver(new ResolverProps {
                    TypeName  = "Mutation",
                    FieldName = "updateAlbum",
                    RequestMappingTemplate  = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Mutation.updateAlbum.req.vtl"),
                    ResponseMappingTemplate = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Mutation.updateAlbum.res.vtl"),
                });

                albumTableDataSource.CreateResolver(new ResolverProps {
                    TypeName  = "Mutation",
                    FieldName = "deleteAlbum",
                    RequestMappingTemplate  = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Mutation.deleteAlbum.req.vtl"),
                    ResponseMappingTemplate = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Mutation.deleteAlbum.res.vtl"),
                });

                albumTableDataSource.CreateResolver(new ResolverProps {
                    TypeName  = "Subscription",
                    FieldName = "onCreateAlbum",
                    RequestMappingTemplate  = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Subscription.onCreateAlbum.req.vtl"),
                    ResponseMappingTemplate = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Subscription.onCreateAlbum.res.vtl"),
                });

                albumTableDataSource.CreateResolver(new ResolverProps {
                    TypeName  = "Subscription",
                    FieldName = "onUpdateAlbum",
                    RequestMappingTemplate  = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Subscription.onUpdateAlbum.req.vtl"),
                    ResponseMappingTemplate = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Subscription.onUpdateAlbum.res.vtl"),
                });

                albumTableDataSource.CreateResolver(new ResolverProps {
                    TypeName  = "Subscription",
                    FieldName = "onDeleteAlbum",
                    RequestMappingTemplate  = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Subscription.onDeleteAlbum.req.vtl"),
                    ResponseMappingTemplate = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Subscription.onDeleteAlbum.res.vtl"),
                });

                albumTableDataSource.CreateResolver(new ExtendedResolverProps {
                    TypeName  = "Photo",
                    FieldName = "album",
                    RequestMappingTemplate  = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Photo.album.req.vtl"),
                    ResponseMappingTemplate = MappingTemplate.FromFile("src/ImageRecognitionInfrastructure/API/resolvers/Photo.album.res.vtl")
                });

                new CfnOutput(this, "AlbumTableStreamArn", new CfnOutputProps {
                    Value      = albumTable.TableStreamArn,
                    ExportName = ALBUM_TABLE_STREAM_ARN_EXPORT
                });

                new CfnOutput(this, "AlbumTableDataSourceName", new CfnOutputProps {
                    Value      = albumTableDataSource.Name,
                    ExportName = ALBUM_TABLE_DATASOURCE_NAME_EXPORT
                });

                new CfnOutput(this, "AlbumTableName", new CfnOutputProps {
                    Value      = albumTable.TableName,
                    ExportName = ALBUM_TABLE_NAME_EXPORT
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }