AWS Fargateを初めて見るー
アウトライン
- はじめに
- 例: コンテナタスク定義
- ECS CLIをPGP署名でセットアップ・検証
- AWSクレデンシャルとIAMロールを設定
- ECSクラスターとセキュリティグループを作成
- クラスターにDockerコンテナをデプロイ
- クリーンアップとサマリー
このプロジェクトのすべてのコードは、私のGitHub上のFirst Lookモノレポで見つけることができます。
はじめに
Fargate は、ECS上でサーバーまたはEC2インスタンスのクラスターを管理することなくコンテナを実行できるAWSサービスです。それには、サーバータイプの選択、クラスターの規模拡大のタイミングの決定、クラスターパッキングの最適化が含まれます。
Fargate起動タイプでタスクとサービスを実行するには、アプリケーションをコンテナにパッケージングし、CPUとメモリの要件を指定し、ネットワークとIAMポリシーを定義し、アプリケーションを起動する必要があります。各Fargateタスクには自身の分離境界があり、他のタスクとの下層カーネル、CPUリソース、メモリリソース、または弾性ネットワークインターフェースを共有しません。
このチュートリアルでは、次のことを学びます:
- ECS CLIをインストールして検証。
- IAMロールを設定。
- セキュリティグループを持つクラスタを設定。
- Fargate起動タイプを使用してタスクを含むサービスをデプロイ。
例: コンテナタスク定義
タスク定義は、Amazon ECSでDockerコンテナを実行するために必要です。指定できるパラメータには以下のようなものがあります:
パラメータ | 定義 |
---|---|
image | タスク内のそれぞれのコンテナに対するDockerイメージ |
cpu, memory | タスクごと、またはタスク内の各コンテナに対するCPUとメモリ |
requiresCompatibilities | タスクがホストされるインフラストラクチャを決定する起動タイプ |
networkMode | タスク内のコンテナのDockerネットワーキングモード |
logConfiguration | タスクのログ設定 |
command | コンテナ起動時に実行されるコマンド |
volumes | タスク内のコンテナのためのデータボリューム |
executionRoleArn | タスクが使用するIAMロール |
このタスク定義は、Fargate起動タイプを使ってウェブサーバーをセットアップし、Apacheのhttpd:2.4
イメージを使用します。コンテナはsample-fargate-app
という名前で、ログ設定とポートマッピングが含まれています。エントリポイントとしてsh -c
をセットし、シェルcommand
を実行してHTMLドキュメントをindex.html
というファイルに出力します。これはusr/local/apache2/htdocs/
ディレクトリ内に配置されます。
{
"containerDefinitions": [{
"command": [
"/bin/sh -c \"echo '<html><head><title>ECS Sample App</title></head><body><div>
<h1>ECS Sample App</h1><p>App running on a container in Amazon ECS.</p>
</div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\""
],
"entryPoint": [ "sh", "-c" ],
"essential": true,
"image": "httpd:2.4",
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group" : "/ecs/fargate-task-definition",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
},
"name": "sample-fargate-app",
"portMappings": [{
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}]
}],
"cpu": "256",
"executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole",
"family": "fargate-task-definition",
"memory": "512",
"networkMode": "awsvpc",
"requiresCompatibilities": [ "FARGATE" ]
}
最後に、httpd
(containerPort
およびhostPort
を80
に設定し)をスタートします。networkMode
は、タスクがAmazon EC2インスタンスと同じネットワーキング属性を割り当てられることを意味するawsvpc
に設定しています。これには、独自のelastic network interface (ENI)とプライマリのプライベートIPv4アドレスが含まれています。
ECS CLIをPGP署名でセットアップ・検証
オペレーティングシステムごとに、Amazon ECS CLIバイナリのダウンロード手順は異なります。この記事の指示はmacOS(特にM1)用です。WindowsまたはLinuxに対するAWSドキュメントでインストール手順を見つけましょう。次のcurl
コマンドでECS CLIインストールスクリプトを実行します:
sudo curl -Lo /usr/local/bin/ecs-cli \
https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-darwin-amd64-latest
sudo
は、システムディレクトリ内のファイルがroot権限を必要としているため必要です。
GnuPGをインストールして、ECS PGP公開鍵用のファイルを作成
Amazon ECS CLI実行ファイルにはPGP署名を使用して暗号署名されています。PGP署名は、Amazon ECS CLI実行ファイルの妥当性を検証するために使用できます。Homebrewで GnuPGをダウンロードしてインストールします。
brew install gnupg
公開鍵ブロックについては、Step 2: Verify the Amazon ECS CLI using PGP signaturesを参照してください。
touch aws-ecs-pgp
Amazon ECS PGP公開鍵の詳細についてはこちらを参照してください。
Key ID: BCE9D9A42D51784F
Type: RSA
Size: 4096/4096
Expires: Never
User ID: Amazon ECS
Key fingerprint: F34C 3DDA E729 26B0 79BE AEC6 BCE9 D9A4 2D51 784F
ECS PGP公開鍵をインポート
gpg --import aws-ecs-pgp
ECS CLI署名をダウンロードして検証
署名は、拡張子が.asc
のASCII分離型PGP署名で保存されています。
curl -Lo ecs-cli.asc \
https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-darwin-amd64-latest.asc
署名ファイルは、対応する実行可能ファイルと同じ名前ですが、.asc
が追加されています。
gpg --verify ecs-cli.asc \
/usr/local/bin/ecs-cli
出力には、あなたの個人的なPGPキーとAmazon ECS PGPキーの間に信頼の連鎖がないという警告が含まれているはずです。
Signature made Tue Apr 3 13:29:30 2018 PDT using RSA key DE3CBD61ADAF8B8E
Good signature from "Amazon ECS <ecs-security@amazon.com>" [unknown]
WARNING: This key is not certified with a trusted signature!
There is no indication that the signature belongs to the owner.
Primary key fingerprint: F34C 3DDA E729 26B0 79BE AEC6 BCE9 D9A4 2D51 784F
Subkey fingerprint: EB3D F841 E2C9 212A 2BD4 2232 DE3C BD61 ADAF 8B8E
CLIバイナリに実行権限を適用
ファイル名の後にchmod +x
を実行すると、そのファイルが実行可能になります。
sudo chmod +x /usr/local/bin/ecs-cli
CLIバージョン番号を確認
amazon-ecs-cli
の変更ログで現在のバージョンを確認してください。
ecs-cli --version
出力:
ecs-cli version 1.21.0 (bb0b8f0)
AWSクレデンシャルとIAMロールを設定
Amazon ECS CLIを使用する前に、AWSクレデンシャル、AWSリージョン、Amazon ECSクラスター名でECS CLIを設定する必要があります。
詳細は公式ドキュメントに従ってCLIを設定してください。AWSアカウントが必要です。一般的には、aws configure
を使用したAWS CLIのセットアップが最も早い方法として推奨されています。
aws configure
My Security CredentialsでAccess Key ID、Secret Access Key、デフォルトリージョンを確認します。出力フォーマットについては空白のままにできます。
AWS Access Key ID: <YOUR_ACCESS_KEY_ID>
AWS Secret Access Key: <YOUR_SECRET_ACCESS_KEY>
Default region name: <YOUR_REGION_NAME>
Default output format [None]:
Amazon ECSコンテナエージェントは、あなたの代わりにAWS APIを呼び出すために、IAMポリシーとロールが必要になります。IAMロールは特定の権限を持つIAMアイデンティティです。
IAMロールは、IAMユーザーのようなAWSのアイデンティティですが、特定の人物と密接に関連づけられているわけではなく、必要な人が誰でも使えることを意図しています。
ディレクトリとプロジェクト・ファイルを作成
CLIを設定した後、空のディレクトリを作成し、以下の3つのファイルが必要です。
- アプリケーションのタスク実行IAMロールを設定するための
task-execution-assume-role.json
- イメージを指定し、コンテナを実行し、ログを設定する
docker-compose.yml
- ECS特有のパラメータを設定する
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/ajcwebdev/a-first-look-at-aws-fargate-395f