Tutorial: Using FSx for Windows File Server file systems with Amazon ECS - Amazon Elastic Container Service

Tutorial: Using FSx for Windows File Server file systems with Amazon ECS

FSx for Windows File Server provides fully managed Microsoft Windows file servers, that are backed by a fully native Windows file system. When using FSx for Windows File Server together with Amazon ECS, you can provision your Windows tasks with persistent, distributed, shared, static file storage. For more information, see What Is FSx for Windows File Server? in the FSx for Windows File Server User Guide.

You can use FSx for Windows File Server to deploy Windows workloads that require access to shared external storage, highly available regional storage, or high-throughput storage. You can mount one or more FSx for Windows File Server file system volumes to an ECS container running on an ECS Windows instance. You can share FSx for Windows File Server file system volumes among multiple ECS containers within a single ECS task.

Note

FSx for Windows File Server might not be available in all Regions. For more information about which Regions support FSx for Windows File Server, see Amazon FSx Endpoints and Quotas in the AWS General Reference.

In this tutorial, you launch an ECS Optimized Windows instance that hosts an FSx for Windows File Server file system and containers that can access the file system. To do this, you first create an AWS Directory Service AWS Managed Microsoft Active Directory. Then, you create an Amazon FSx for Windows File Server file system and an ECS cluster with an ECS instance and an ECS task definition. You configure the task definition for your containers to use the FSx for Windows File Server file system. Finally, you test the file system.

It takes 20 to 45 minutes each time you launch or delete either the Active Directory or the FSx for Windows File Server file system. Be prepared to reserve at least 90 minutes to complete the tutorial or complete the tutorial over a few sessions.

Prerequisites for the tutorial

  • An administratice user. See Set up to use Amazon ECS.

  • (Optional) A pem key pair for connecting to your EC2 Windows instance through RDP access. For information about how to create key pairs, see Amazon EC2 key pairs and Windows instances in the User Guide for Windows Instances.

  • A VPC with at least one public and one private subnet, and one security group. You can use your default VPC. You don't need a NAT gateway or device. AWS Directory Service doesn't support Network Address Translation (NAT) with Active Directory. For this to work, the Active Directory, FSx for Windows File Server file system, ECS Cluster, and ECS instance must be located within your VPC. For more information regarding VPCs and Active Directories, see Amazon VPC console wizard configurations and AWS Managed Microsoft AD Prerequisites.

  • The IAM ecsInstanceRole and ecsTaskExecutionRole permissions are associated with your account. These service-linked roles allow services to make API calls and access containers, secrets, directories and file servers on your behalf.

Step 1: Create IAM access roles

Create a cluster with the AWS Management Console.
  1. See Amazon ECS container instance IAM role to check whether you have an ecsInstanceRole and to see how you can create one if you don't have one.

  2. We recommend that role policies are customized for minimum permissions in an actual production environment. For the purpose of working through this tutorial, verify that the following AWS managed policy is attached to your ecsInstanceRole. Attach the policy if it is not already attached.

    • AmazonEC2ContainerServiceforEC2Role

    To attach AWS managed policies.

    1. Open the IAM console.

    2. In the navigation pane, choose Roles.

    3. Choose an AWS managed role.

    4. Choose Permissions, Attach policies..

    5. To narrow the available policies to attach, use Filter.

    6. Select the appropriate policy and choose Attach policy.

  3. See Amazon ECS task execution IAM role to check whether you have an ecsTaskExecutionRole and to see how you can create one if you don't have one.

    We recommend that role policies are customized for minimum permissions in an actual production environment. For the purpose of working through this tutorial, verify that the following AWS managed policies are attached to your ecsTaskExecutionRole. Attach the policies if they are not already attached. Use the procedure given in the preceding section to attach the AWS managed policies.

    • SecretsManagerReadWrite

    • AmazonFSxReadOnlyAccess

    • AmazonSSMReadOnlyAccess

    • AmazonECSTaskExecutionRolePolicy

Step 2: Create Windows Active Directory (AD)

  1. Follow the steps described in Create Your AWS Managed AD Directory in the AWS Directory Service Administration Guide. Use the VPC you have designated for this tutorial. On Step 3 of Create Your AWS Managed AD Directory, save the user name and password for use in a following step. Also, note the fully qualified domain name for future steps. You can go on to complete the following step while the Active Directory is being created.

  2. Create an AWS Secrets Manager secret to use in the following steps. For more information, see Getting Started with AWS Secrets Manager in the AWS Secrets Manager User Guide.

    1. Open the Secrets Manager console.

    2. Click Store a new secret.

    3. Select Other type of secrets.

    4. For Secret key/value, in the first row, create a key username with value admin. Click on + Add row.

    5. In the new row, create a key password. For value, type in the password you entered in Step 3 of Create Your AWS Managed AD Directory.

    6. Click on the Next button.

    7. Provide a secret name and description. Click Next.

    8. Click Next. Click Store.

    9. From the list of Secrets page, click on the secret you have just created.

    10. Save the ARN of the new secret for use in the following steps.

    11. You can proceed to the next step while your Active Directory is being created.

Step 3: Verify and update your security group

In this step, you verify and update the rules for the security group that you're using. For this, you can use the default security group that was created for your VPC.

Verify and update security group.

You need to create or edit your security group to send data from and to the ports, which are described in Amazon VPC Security Groups in the FSx for Windows File Server User Guide. You can do this by creating the security group inbound rule shown in the first row of the following table of inbound rules. This rule allows inbound traffic from network interfaces (and their associated instances) that are assigned to the security group. All of the cloud resources you create are within the same VPC and attached to the same security group. Therefore, this rule allows traffic to be sent to and from the FSx for Windows File Server file system, Active Directory, and ECS instance as required. The other inbound rules allow traffic to serve the website and RDP access for connecting to your ECS instance.

The following table shows which security group inbound rules are required for this tutorial.

Type Protocol Port range Source

All traffic

All

All

sg-securitygroup

Custom TCP

TCP

8080

0.0.0.0/0

RDP

TCP

3389

your EC2 instance public IP address

The following table shows which security group outbound rules are required for this tutorial.

Type Protocol Port range Destination

All traffic

All

All

0.0.0.0/0

  1. Open the EC2 console and select Security Groups from the left-hand menu.

  2. From the list of security groups now displayed, select check the check-box to the left of the security group that you are using for this tutorial.

    Your security group details are displayed.

  3. Edit the inbound and outbound rules by selecting the Inbound rules or Outbound rules tabs and choosing the Edit inbound rules or Edit outbound rules buttons. Edit the rules to match those displayed in the preceding tables. After you create your EC2 instance later on in this tutorial, edit the inbound rule RDP source with the public IP address of your EC2 instance as described in Connect to your Windows instance from the Amazon EC2 User Guide for Windows Instances.

Step 4: Create an FSx for Windows File Server file system

After your security group is verified and updated and your Active Directory is created and is in the active status, create the FSx for Windows File Server file system in the same VPC as your Active Directory. Use the following steps to create an FSx for Windows File Server file system for your Windows tasks.

Create your first file system.
  1. Open the Amazon FSx console.

  2. On the dashboard, choose Create file system to start the file system creation wizard.

  3. On the Select file system type page, choose FSx for Windows File Server, and then choose Next. The Create file system page appears.

  4. In the File system details section, provide a name for your file system. Naming your file systems makes it easier to find and manage your them. You can use up to 256 Unicode characters. Allowed characters are letters, numbers, spaces, and the special characters plus sign (+). minus sign (-), equal sign (=), period (.), underscore (_), colon (:), and forward slash (/).

  5. For Deployment type choose Single-AZ to deploy a file system that is deployed in a single Availability Zone. Single-AZ 2 is the latest generation of single Availability Zone file systems, and it supports SSD and HDD storage.

  6. For Storage type, choose HDD.

  7. For Storage capacity, enter the minimum storage capacity.

  8. Keep Throughput capacity at its default setting.

  9. In the Network & security section, choose the same Amazon VPC that you chose for your AWS Directory Service directory.

  10. For VPC Security Groups, choose the security group that you verified in Step 3: Verify and update your security group.

  11. For Windows authentication, choose AWS Managed Microsoft Active Directory, and then choose your AWS Directory Service directory from the list.

  12. For Encryption, keep the default Encryption key setting of aws/fsx (default).

  13. Keep the default settings for Maintenance preferences.

  14. Click on the Next button.

  15. Review the file system configuration shown on the Create file system page. For your reference, note which file system settings you can modify after file system is created. Choose Create file system.

  16. Note the file system ID. You will need to use it in a later step.

    You can go on to the next steps to create a cluster and EC2 instance while the FSx for Windows File Server file system is being created.

Step 5: Create an Amazon ECS cluster

Create a cluster using the classic Amazon ECS console
  1. Open the Amazon ECS console.

  2. In the navigation pane, choose Clusters.

  3. On the Clusters page, choose Create Cluster.

  4. Choose EC2 Windows + Networking and choose Next step.

  5. For Cluster name enter windows-fsx-cluster.

  6. Click the check-box under the name of the cluster to create an empty cluster.

  7. Click the Create button on the lower right corner.

  8. Click the View Cluster button when the cluster is successfully created.

    You are now on a page where you can view the details of your cluster.

Step 6: Create an Amazon ECS instance

Launch an ECS Optimized Windows EC2 instance into the ECS cluster you just created using the AWS Management Console and the classic Amazon ECS console
  1. Go to Amazon ECS-optimized AMI in the Amazon ECS Developer Guide to find the latest version of the Windows Server 2019 Full AMI in the same Region as your VPC.

  2. You can get the latest version using one of the following steps.

    Scroll down to the Windows Server 2019 Full AMI table.

    1. Find the latest version in the table for your Region. Click View AMI ID link to a page where you'll find the AMI ID of the latest version. Save a copy of the AMI ID for the next steps.

    2. Run the given Systems Manager command using the AWS CLI and save a copy of the AMI ID that is returned.

  3. Open the Amazon EC2 console.

  4. Click on the Launch Instance button and select Launch Instance.

    You are now on a page that lists available EC2 instances.

  5. Select an AMI for your EC2 instance.
    1. Under Quick Start, click on Community AMIs.

    2. In the search field, enter the AMI ID that you saved from the previous step and press return.

    3. Select the Windows Server 2019 Full AMI that matches the AMI ID that you saved in the previous step.

      You are now on a page listing instance types.

  6. For Instance type page, choose t2.medium or t2.micro and click on Next: Configure Instance Details.

  7. Configure instance details.
    1. On the Configure Instance Details page, enter 1 for Number of Instances.

    2. For Network select your VPC.

    3. For Subnets select a public subnet.

    4. Select Enable for Auto-assign Public IP.

    5. For Domain join directory, select the ID of the Active Directory that you created. This option domain joins your AD when the EC2 instance is launched.

    6. For IAM role, select your ecsInstanceRole from the drop-down menu.

    7. Scroll to the bottom of the page and enter the following into the User data text field.

      <powershell> Initialize-ECSAgent -Cluster windows-fsx-cluster -EnableTaskIAMRole </powershell>
    8. Click Next: Add Storage button.

    9. Click Next: Add Tags button.

    10. Click Next: Configure Security Group button.

  8. On the Configure Security Group page, select the security group that you verified and updated in Step 3: Verify and update your security group. If it doesn't already exist, add an inbound RDP TCP rule to allow traffic from your EC2 instance IP address through port 3389 if you want to be able to RDP into your instance.

  9. Click on Review and Launch button.

  10. On the Review Instance Launch page, click the Launch button.

  11. For Key pair, choose an Amazon EC2 key pair to use with your container instances for RDP access. If you don't specify a key pair, you can't connect to your container instances with RDP. For more information, see Prerequisites for the tutorial.

  12. Click on View instance to see the new instance status among your list of instances.

  13. Open the classic Amazon ECS console and select Clusters.

  14. Select your fsx-windows-cluster cluster.

  15. Select the ECS Instances tab and verify that your ECS instance has been registered in the fsx-windows-cluster cluster.

Step 7: Register a Windows task definition

Before you can run Windows containers in your Amazon ECS cluster, you must register a task definition. The following task definition example displays a simple web page on port 8080 of a container instance. The task launches two containers that have access to the FSx file system. The first container writes an HTML file to the file system. The second container downloads the HTML file from the file system and serves the webpage.

Register the sample task definition with the classic Amazon ECS console
  1. Open the Amazon ECS console.

  2. In the navigation pane, choose Task Definitions.

  3. On the Task Definitions page, choose Create new Task Definition.

  4. On the Select launch type compatibilities page, choose EC2 and then Next step.

    Note

    The Fargate launch type isn't compatible with Windows containers.

  5. On the Create new Task Definition page, scroll to the bottom of the page and choose Configure via JSON.

  6. Use the following sample task definition JSON. Replace the values for your task execution role and the details about your FSx file system and then choose Save.

    { "containerDefinitions": [ { "entryPoint": [ "powershell", "-Command" ], "portMappings": [], "command": ["New-Item -Path C:\\fsx-windows-dir\\index.html -ItemType file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>It Works!</h2> <p>You are using Amazon FSx for Windows File Server file system for persistent container storage.</p>' -Force"], "cpu": 512, "memory": 256, "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019", "essential": false, "name": "container1", "mountPoints": [ { "sourceVolume": "fsx-windows-dir", "containerPath": "C:\\fsx-windows-dir", "readOnly": false } ] }, { "entryPoint": [ "powershell", "-Command" ], "portMappings": [ { "hostPort": 8080, "protocol": "tcp", "containerPort": 80 } ], "command": ["Remove-Item -Recurse C:\\inetpub\\wwwroot\\* -Force; Start-Sleep -Seconds 120; Move-Item -Path C:\\fsx-windows-dir\\index.html -Destination C:\\inetpub\\wwwroot\\index.html -Force; C:\\ServiceMonitor.exe w3svc"], "mountPoints": [ { "sourceVolume": "fsx-windows-dir", "containerPath": "C:\\fsx-windows-dir", "readOnly": false } ], "cpu": 512, "memory": 256, "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019", "essential": true, "name": "container2" } ], "family": "fsx-windows", "executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole", "volumes": [ { "name": "fsx-windows-vol", "fsxWindowsFileServerVolumeConfiguration": { "fileSystemId": "fs-0eeb5730b2EXAMPLE", "authorizationConfig": { "domain": "example.com", "credentialsParameter": "arn:arn-1234" }, "rootDirectory": "share" } } ] }
  7. Click on container1 under Container Definitions.

  8. Scroll to STORAGE AND LOGGING and, for Mount points Source volume, select fsx-windows-vol from the drop-down menu.

  9. For Container path, enter C:\fsx-windows-dir.

  10. Click on Update button.

  11. Repeat the last four steps for container2 under Container Definitions.

  12. For Task execution role, choose your ecsTaskExecutionRole from the drop-down menu.

  13. Verify your information and click on Create button.

Step 8: Run a task and view the results

Before running the task, verify that the status of your FSx for Windows File Server file system is Available. After it is available, you can run a task using the task definition that you created. The task starts out by creating containers that shuffle an HTML file between them using the file system. After the shuffle, a web server serves the simple HTML page.

Note

You might not be able to connect to the website from within a VPN.

Run a task and view the results with the classic console.
  1. Open the Amazon ECS console.

  2. Choose your fsx-windows-cluster cluster.

  3. Choose Tasks tab, and then Run new task.

  4. For Launch Type, select EC2.

  5. For Task Definition, choose the fsx-windows task definition that you created, and then choose Run Task.

  6. Under the Tasks tab, choose the task that you just ran. Your task appears in the list of tasks.

  7. When your task status is RUNNING, click on the task ID.

  8. Expand container2.

  9. Scroll down and click on the external IP address that is associated with the container. Your browser will open and display the following message.

    Note

    If you don't see this message, check that you aren't running in a VPN and make sure that the security group for your container instance allows inbound network HTTP traffic on port 8080.

Step 9: Clean up

Note

It takes 20 to 45 minutes to delete the FSx for Windows File Server file system or the AD. You must wait until the FSx for Windows File Server file system delete operations are complete before starting the AD delete operations.

Remove FSx for Windows File Server file system.
  1. Open the Amazon FSx console

  2. Click the radio button to the left of the FSx for Windows File Server file system that you just created.

  3. Click on Actions.

  4. Select Delete file system.

Remove AD.
  1. Open the AWS Directory Service console.

  2. Click the radio button to the left of the AD you just created.

  3. Click on Actions.

  4. Select Delete directory.

Remove ECS cluster.
  1. Open the Amazon ECS console.

  2. Select Clusters.

  3. Select the cluster you just created.

  4. Click the Delete Cluster button.

Remove ECS instance.
  1. Open the Amazon EC2 console.

  2. From the left-hand menu, select Instances.

  3. Check the check-box to the left of the EC2 instance you created during this exercise.

  4. Click the Instance state and then Terminate instance.

Remove secret.
  1. Open the Secrets Manager console.

  2. Select the secret you created for this walk through.

  3. Click Actions.

  4. Select Delete secret.