A comprehensive Crossplane Configuration package that provides Composite Resource Definitions (XRDs) for AWS Elemental media services on Kubernetes.
This configuration package enables you to provision and manage AWS Elemental media services infrastructure using Kubernetes-native APIs through Crossplane. It provides high-level abstractions for complex media workflows while maintaining the flexibility and power of AWS Elemental services.
Before using this configuration, ensure you have:
If you haven't already installed Crossplane:
helm repo add crossplane-stable https://charts.crossplane.io/stable
helm repo update
helm install crossplane crossplane-stable/crossplane \
--namespace crossplane-system \
--create-namespace
The configuration will automatically install dependencies, but you can install them manually:
# Apply the functions
kubectl apply -f examples/functions.yaml
# The following providers will be installed automatically:
# - xpkg.upbound.io/upbound/provider-family-aws
# - xpkg.upbound.io/upbound/provider-aws-cloudcontrol
# - xpkg.upbound.io/upbound/provider-aws-medialive
# - xpkg.upbound.io/upbound/provider-aws-mediapackage
# - xpkg.upbound.io/upbound/provider-aws-mediastore
# - xpkg.upbound.io/upbound/provider-aws-cloudformation
kubectl apply -f - <<EOF
apiVersion: pkg.crossplane.io/v1
kind: Configuration
metadata:
name: configuration-aws-elemental
spec:
package: xpkg.upbound.io/livewyer-ops/configuration-aws-elemental:latest
EOF
kubectl apply -f examples/rbac.yaml
Create AWS credentials and configure the provider:
AmazonElasticTranscoder_FullAccess
AWSElementalMediaConvertFullAccess
AWSElementalMediaLiveFullAccess
AWSElementalMediaPackageFullAccess
AWSElementalMediaStoreFullAccess
kubectl create secret generic aws-secret -n crossplane-system \
--from-literal=creds='[default]
aws_access_key_id = YOUR_ACCESS_KEY_ID
aws_secret_access_key = YOUR_SECRET_ACCESS_KEY'
kubectl apply -f - <<EOF
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: aws
spec:
credentials:
source: Secret
secretRef:
namespace: crossplane-system
name: aws-secret
key: creds
EOF
kubectl apply -f - <<EOF
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
name: aws
spec:
credentials:
source: InjectedIdentity
EOF
Create a custom IAM policy for MediaConnect and other services:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"mediaconnect:*",
"medialive:*",
"mediapackage:*",
"mediapackagev2:*",
"mediastore:*",
"mediaconvert:*",
"mediatailor:*",
"cloudformation:*",
"iam:PassRole",
"iam:CreateRole",
"iam:CreatePolicy",
"iam:AttachRolePolicy",
"iam:ListRoles",
"iam:GetRole",
"iam:GetPolicy",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups",
"ec2:CreateSecurityGroup",
"ec2:AuthorizeSecurityGroupIngress",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
apiVersion: medialive.aws.livewyer.io/v1alpha1
kind: Network
metadata:
name: my-media-network
spec:
providerConfigRef:
name: aws
forProvider:
region: us-east-1
ipPools:
- Cidr: 192.168.1.0/24
apiVersion: mediaconnect.aws.livewyer.io/v1alpha1
kind: Flow
metadata:
name: my-media-flow
spec:
providerConfigRef:
name: aws
forProvider:
region: us-east-1
flowSize: 1000
See the complete workflow example at examples/workflow.yaml
which demonstrates:
├── apis/ # Composite Resource Definitions
│ ├── mediaconnect/ # MediaConnect XRDs
│ ├── mediaconvert/ # MediaConvert XRDs
│ ├── medialive/ # MediaLive XRDs
│ ├── mediapackage/ # MediaPackage XRDs
│ ├── mediapackagev2/ # MediaPackage V2 XRDs
│ ├── mediastore/ # MediaStore XRDs
│ ├── mediatailor/ # MediaTailor XRDs
│ └── workflow/ # Workflow orchestration XRDs
├── examples/ # Usage examples
├── functions/ # Composition functions
└── tests/ # Test configurations
This configuration automatically installs the following dependencies:
xpkg.upbound.io/upbound/provider-family-aws
(>=v1)xpkg.upbound.io/upbound/provider-aws-cloudcontrol
(>=v1)xpkg.upbound.io/upbound/provider-aws-medialive
(>=v1)xpkg.upbound.io/upbound/provider-aws-mediapackage
(>=v1)xpkg.upbound.io/upbound/provider-aws-mediastore
(>=v1)xpkg.upbound.io/upbound/provider-aws-cloudformation
(>=v1)xpkg.upbound.io/upbound/function-patch-and-transform
(>=v0.9.0)xpkg.upbound.io/upbound/function-go-templating
(>=v0.10.0)xpkg.upbound.io/upbound/function-auto-ready
(>=v0.5.0)xpkg.upbound.io/crossplane-contrib/function-status-transformer
(>=v0.4.1)xpkg.upbound.io/crossplane-contrib/function-sequencer
(>=v0.2.3)kubectl get providers
Missing permissions: Ensure your AWS credentials have all required permissions
Region availability: Some AWS Elemental services are not available in all regions
Resource dependencies: Check that dependent resources are created in the correct order
Enable debug logging for providers:
kubectl patch deployment crossplane -n crossplane-system -p '{"spec":{"template":{"spec":{"containers":[{"name":"crossplane","args":["--debug"]}]}}}}'
Check resource status:
kubectl describe <resource-type> <resource-name>
We welcome contributions! Please see our contributing guidelines and:
For support and questions:
This project is licensed under the MIT License - see the LICENSE file for details.
Maintained by: Livewyer Source: github.com/livewyer-ops/crossplane-configuration-aws-elemental