The DevOps Engineer role focuses on implementing automation, CI/CD, observability, and operational resilience for Azure data services. This involves automating infrastructure deployment, configuring build and release pipelines, integrating monitoring solutions, developing backup and recovery scripts, and supporting security enforcement.
Location:Houston, Texas, United States
Responsibilities:
- Automate deployment of infrastructure via ARM/Bicep/Terraform.
- Configure build and release pipelines for data workflows.
- Integrate logging, alerting, and cost monitoring with Azure Monitor, Log Analytics, and Application Insights.
- Develop automated backup and recovery scripts.
- Support security enforcement (private endpoints, managed identities).
- Provide operational readiness testing and DR validation.
Required Skills & Certifications:
- 5+ years in DevOps with Azure Cloud.
- Proficiency in CI/CD (Azure DevOps, GitHub Actions).
- Familiarity with PowerShell, YAML, and IaC.
Preferred Skills & Certifications:
- Experience with FinOps and environment monitoring.
Special Considerations:
- Not specified.
Scheduling:
'use client';
import * as React from 'react';
import {
ColumnDef,
flexRender,
getCoreRowModel,
useReactTable,
} from '@tanstack/react-table';
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from '@/components/ui/table';
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card';
import { CheckCircle2, XCircle, Pencil, Trash2, Plus } from 'lucide-react';
import { Button } from '@/components/ui/button';
type ComplianceMatrixRow = {
id: string;
rfpSection: string;
requirementSummary: string;
painPoint: string;
proposalSection: string;
vtechSolution: string;
keyDifferentiator: string;
compliant: string;
clarifications: string;
priceToWinStrategy: string;
};
type Props = {
data: ComplianceMatrixRow[];
onSave?: (row: ComplianceMatrixRow) => Promise;
readOnly?: boolean;
};
export function ComplianceMatrix({ data: initialData, onSave, readOnly = false }: Props) {
const [data, setData] = React.useState(initialData);
const [editingRowId, setEditingRowId] = React.useState(null);
const [editBuffer, setEditBuffer] = React.useState(null);
const [saving, setSaving] = React.useState(false);
React.useEffect(() => {
setData(initialData);
}, [initialData]);
const startEditing = (row: ComplianceMatrixRow) => {
setEditingRowId(row.id);
setEditBuffer({ ...row });
};
const cancelEditing = () => {
setEditingRowId(null);
setEditBuffer(null);
};
const updateEditBuffer = (field: keyof ComplianceMatrixRow, value: any) => {
setEditBuffer(prev => ({ ...(prev ?? {}), [field]: value }));
};
const saveEditing = async () => {
if (!editingRowId || !editBuffer) return;
setSaving(true);
try {
// Optimistic update
setData(prev => prev.map(r => (r.id === editingRowId ? ({ ...(r as any), ...(editBuffer as any) }) : r)));
// API call to save changes
if (onSave) {
await onSave(editBuffer as ComplianceMatrixRow);
}
setEditingRowId(null);
setEditBuffer(null);
} catch (err: any) {
alert(`Error saving: ${err?.message ?? 'Unknown error'}`);
} finally {
setSaving(false);
}
};
const handleDeleteRow = (id: string) => {
if (!confirm('Are you sure you want to delete this row?')) return;
setData(prev => prev.filter(r => r.id !== id));
if (editingRowId === id) cancelEditing();
};
const handleAddRow = () => {
const newRow: ComplianceMatrixRow = {
id: `new-${Date.now()}`,
rfpSection: '',
requirementSummary: '',
painPoint: '',
proposalSection: '',
vtechSolution: '',
keyDifferentiator: '',
compliant: '',
clarifications: '',
priceToWinStrategy: '',
};
setData(prev => [...prev, newRow]);
setTimeout(() => startEditing(newRow), 50);
};
const columns: ColumnDef[] = [
{
accessorKey: 'rfpSection',
header: 'RFP Section/ID',
cell: ({ row }) => {
const isEditing = row.original.id === editingRowId && !readOnly;
return isEditing ? (
updateEditBuffer('rfpSection', e.target.value)}
className="w-full border rounded px-2 py-1"
/>
) : (
{row.getValue('rfpSection')}
);
},
},
{
accessorKey: 'requirementSummary',
header: 'Requirement Summary',
cell: ({ row }) => {
const isEditing = row.original.id === editingRowId && !readOnly;
return isEditing ? (
updateEditBuffer('requirementSummary', e.target.value)}
className="w-full border rounded px-2 py-1 min-h-[64px] resize-y"
/>
) : (
{row.getValue('requirementSummary')}
);
},
},
{
accessorKey: 'painPoint',
header: 'Pain Point / Need',
cell: ({ row }) => {
const isEditing = row.original.id === editingRowId && !readOnly;
return isEditing ? (
updateEditBuffer('painPoint', e.target.value)}
className="w-full border rounded px-2 py-1 min-h-[48px] resize-y"
/>
) : (
{row.getValue('painPoint')}
);
},
},
{
accessorKey: 'proposalSection',
header: 'Proposal Section',
cell: ({ row }) => {
const isEditing = row.original.id === editingRowId && !readOnly;
return isEditing ? (
updateEditBuffer('proposalSection', e.target.value)}
className="w-full border rounded px-2 py-1"
/>
) : (
{row.getValue('proposalSection')}
);
},
},
{
accessorKey: 'vtechSolution',
header: 'vTech Solution Summary',
cell: ({ row }) => {
const isEditing = row.original.id === editingRowId && !readOnly;
return isEditing ? (
updateEditBuffer('vtechSolution', e.target.value)}
className="w-full border rounded px-2 py-1 min-h-[64px] resize-y"
/>
) : (
{row.getValue('vtechSolution')}
);
},
},
{
accessorKey: 'keyDifferentiator',
header: 'Key Differentiator',
cell: ({ row }) => {
const isEditing = row.original.id === editingRowId && !readOnly;
return isEditing ? (
updateEditBuffer('keyDifferentiator', e.target.value)}
className="w-full border rounded px-2 py-1 min-h-[48px] resize-y"
/>
) : (
{row.getValue('keyDifferentiator')}
);
},
},
{
accessorKey: 'compliant',
header: 'Compliant',
cell: ({ row }) => {
const isEditing = row.original.id === editingRowId && !readOnly;
if (isEditing) {
return (
updateEditBuffer('compliant', e.target.value)}
className="border rounded px-2 py-1"
>
Select
Yes
No
Yes (YES)
);
}
const compliantValue = String(row.getValue('compliant') ?? '').toUpperCase().trim();
const isCompliant = compliantValue === 'Y' || compliantValue === 'YES';
return isCompliant ? : ;
},
},
{
accessorKey: 'clarifications',
header: 'Clarifications / Assumptions',
cell: ({ row }) => {
const isEditing = row.original.id === editingRowId && !readOnly;
return isEditing ? (
updateEditBuffer('clarifications', e.target.value)}
className="w-full border rounded px-2 py-1 min-h-[48px] resize-y"
/>
) : (
{row.getValue('clarifications')}
);
},
},
{
accessorKey: 'priceToWinStrategy',
header: 'Price-to-Win Strategy',
cell: ({ row }) => {
const isEditing = row.original.id === editingRowId && !readOnly;
return isEditing ? (
updateEditBuffer('priceToWinStrategy', e.target.value)}
className="w-full border rounded px-2 py-1 min-h-[48px] resize-y"
/>
) : (
{row.getValue('priceToWinStrategy')}
);
},
},
{
id: 'actions',
header: 'Actions',
cell: ({ row }) => {
if (readOnly) return null;
const isEditing = row.original.id === editingRowId;
return isEditing ? (
{saving ? 'Saving...' : 'Save'}
Cancel
handleDeleteRow(row.original.id)}>
) : (
startEditing(row.original as ComplianceMatrixRow)}>
Edit
handleDeleteRow(row.original.id)}>
);
},
},
];
const table = useReactTable({
data,
columns,
getCoreRowModel: getCoreRowModel(),
});
return (
Compliance Matrix
A detailed breakdown of RFP requirements, our proposed solutions, and strategic analysis.
{!readOnly && (
Add Row
)}
{table.getHeaderGroups().map((headerGroup) => (
{headerGroup.headers.map((header) => {
return (
{header.isPlaceholder
? null
: flexRender(header.column.columnDef.header, header.getContext())}
);
})}
))}
{table.getRowModel().rows?.length ? (
table.getRowModel().rows.map((row) => (
{row.getVisibleCells().map((cell) => (
{flexRender(cell.column.columnDef.cell, cell.getContext())}
))}
))
) : (
No results.
)}
);
}
...Job Description Job Description Job Title: Mortgage Broker Loan Officer Epic Mortgage Inc. Location: Remote | Status: Full-Time | Commission-Based Are you the type of person who doesnt wait for opportunity you create it? Do people naturally trust you,...
...Company Description Tenhulzen Remodeling offers a unique Design | Build approach, centered around developing each project like... ...Role Description This is a full-time on-site position for an Interior Designer at our Woodinville, WA location. The Interior Designer...
Career Advancement Opportunities - Work Life Balance - Excellent Customer Service Required This Jobot Consulting Job is hosted by: Daniel Gonzalez Are you a fit? Easy Apply now by clicking the "Apply" button and sending us your resume. Salary: $18 - $22 per...
...Job Description Technical Project Manager, Partner Operations We are looking for a motivated operations and project management professional to join a fast-growing team focused on scaling physical infrastructure through a global network of partners. The ideal candidate...
...Education: High School diploma or GED. Experience: One+ year of relevant experience. Benefits ~ Flight Benefits - exclusive travel privileges for yourself and your family ~ Competitive pay with daily access to earned wages ~ Paid...