Adding aws-py-fargate example
ADD
aws-py-fargate/.gitignore
+*.pyc
+venv/

ADD
aws-py-fargate/Pulumi.yaml
+name: aws-py-fargate
+description: A container running in AWS ECS Fargate, using Python infrastructure as code
+runtime: python

ADD
aws-py-fargate/__main__.py
+from pulumi import export, ResourceOptions
+import pulumi_aws as aws
+import json
+
+# Create an ECS cluster to run a container-based service.
+cluster = aws.ecs.Cluster('cluster')
+
+# Read back the default VPC and public subnets, which we will use.
+default_vpc = aws.ec2.get_vpc(default='true')
+default_vpc_subnets = aws.ec2.get_subnet_ids(vpc_id=default_vpc.id)
+
+# Create a SecurityGroup that permits HTTP ingress and unrestricted egress.
+group = aws.ec2.SecurityGroup('web-secgrp',
+ vpc_id=default_vpc.id,
+ description='Enable HTTP access',
+ ingress=[{
+ 'protocol': 'tcp',
+ 'from_port': 80,
+ 'to_port': 80,
+ 'cidr_blocks': ['0.0.0.0/0'],
+ }],
+ egress=[{
+ 'protocol': '-1',
+ 'from_port': 0,
+ 'to_port': 0,
+ 'cidr_blocks': ['0.0.0.0/0'],
+ }]
+)
+
+# Create a load balancer to listen for HTTP traffic on port 80.
+alb = aws.lb.LoadBalancer('app-lb',
+ security_groups=[group.id],
+ subnets=default_vpc_subnets.ids
+)
+
+atg = aws.lb.TargetGroup('app-tg',
+ port=80,
+ protocol='HTTP',
+ target_type='ip',
+ vpc_id=default_vpc.id
+)
+
+wl = aws.lb.Listener('web',
+ load_balancer_arn=alb.arn,
+ port=80,
+ default_actions=[{
+ 'type': 'forward',
+ 'target_group_arn': atg.arn
+ }]
+)
+
+# Create an IAM role that can be used by our service's task.
+role = aws.iam.Role('task-exec-role',
+ assume_role_policy=json.dumps({
+ 'Version': '2008-10-17',
+ 'Statement': [{
+ 'Sid': '',
+ 'Effect': 'Allow',
+ 'Principal': {
+ 'Service': 'ecs-tasks.amazonaws.com'
+ },
+ 'Action': 'sts:AssumeRole',
+ }]
+ })
+)
+
+rpa = aws.iam.RolePolicyAttachment('task-exec-policy',
+ role=role.name,
+ policy_arn='arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy'
+)
+
+# Spin up a load balanced service running our container image.
+task_definition = aws.ecs.TaskDefinition('app-task',
+ family='fargate-task-definition',
+ cpu='256',
+ memory='512',
+ network_mode='awsvpc',
+ requires_compatibilities=['FARGATE'],
+ execution_role_arn=role.arn,
+ container_definitions=json.dumps([{
+ 'name': 'my-app',
+ 'image': 'nginx',
+ 'portMappings': [{
+ 'containerPort': 80,
+ 'hostPort': 80,
+ 'protocol': 'tcp'
+ }]
+ }])
+)
+
+service = aws.ecs.Service('app-svc',
+ cluster=cluster.arn,
+ desired_count=3,
+ launch_type='FARGATE',
+ task_definition=task_definition.arn,
+ network_configuration={
+ 'assign_public_ip': 'true',
+ 'subnets': default_vpc_subnets.ids,
+ 'security_groups': [group.id]
+ },
+ load_balancers=[{
+ 'target_group_arn': atg.arn,
+ 'container_name': 'my-app',
+ 'container_port': 80
+ }],
+ opts=ResourceOptions(depends_on=[wl]),
+)
+
+export('url', alb.dns_name)

ADD
aws-py-fargate/requirements.txt
+pulumi>=1.0.0
+pulumi-aws>=1.0.0

Adding aws-py-fargate example (#552)