AWSは最近、AWS CloudShellがDocker Engineにアクセスできるようになったと発表した。この統合により、コンテナをAWS上にデプロイする前に、ローカルでプロトタイプを作成し、レジストリにプッシュすることができる。
AWS CloudShellは、AWS環境のリソースにコマンドラインでアクセスするためのウェブベースのシェルだ。AWS Console経由でアクセスし、同じ認証情報で事前認証することで、ユーザーはアドホックまたはリピートタスクのためにAWS CLIコマンドを実行できる。AWS CLIに加えて、迅速なプロトタイピングと実験を促進するための様々な一般的な開発・運用ツールが含まれている。Docker Engineは、プリインストールされたツールのリストに追加された最新のものだ。
AWS CloudShellで実行されるDockerコマンドのサンプル(出典:AWS CloudShellチュートリアル)
2020年後半に発表され、開発者コミュニティから歓迎にされたAWS CloudShellは、AWSのウェブベースの統合開発環境(IDE)であるAWS Cloud 9代わる、よりシンプルで安価なコマンドライン管理タスクを提供した。AWS Cloud 9がEC2インスタンスのプロビジョニングを必要としたのに対し、AWS CloudShellは1 vCPU、2GBのRAM、セッション間の1GBの永続ストレージを無料で提供した。これに加えて、kubernetesのコントロールプレーンcliであるkubectlから、Python用のAWS SDKであるBoto3まで、様々なツールがプリインストールされているため、運用保守作業やインタラクティブな開発に適していた。AWS CloudShellにプリインストールされているAWS CDKやAWS CLIとDockerを組み合わせることで、インフラ開発に2つの新しい道が開ける。
まず、CDKのLambdaリソースである "DockerImageFunction "と "DockerImageCode "を利用することで、Dockerコンテナを実行するAWS Lambda関数をAWS CloudShellからデプロイできるようになる。
…
const { DockerImageFunction, DockerImageCode } = require('aws-cdk-lib/aws-lambda');
const path = require('path');
…
class DockerTutorialStack extends Stack {
constructor(scope, id, props) {
super(scope, id, props);
// define lambda that uses a Docker container
const dockerfileDir = path.join(__dirname);
new DockerImageFunction(this, 'DockerTutorialFunction', {
code: DockerImageCode.fromImageAsset(dockerfileDir),
functionName: 'DockerTutorialFunction',
});
}
}
new DockerTutorialStack(app, 'DockerTutorialStack');
Dockerイメージを参照するCDK Stackのデプロイ(出典:AWS CloudShellチュートリアル)
あるいは、AWS CLIを使って、Dockerイメージをビルドし、AWS ECS、AWS EKS 、またはAWS Lambdaで使用するためにレジストリにプッシュもできる。
Amazon ECRにDockerイメージをプッシュする(出典:AWS CloudShellチュートリアル)
Docker Engineが追加されたことで、AWS CloudShellはAzure やGCPで提供されている同等の機能と同等に近づいた。しかし、GCPやAzureの5GBに対して、AWS CloudShellの1GBの永続ストレージの制限は、小さなコンテナしかプロトタイプやビルドができないことを意味する。ユーザーの@MicheAngeCamhiは、Xで彼の経験を共有し、次のように述べた。
ローカルのストレージは1GBに制限されており、Dockerイメージではすぐになくなってしまいます!
実のところ、私のビルドは大きくなり、今では『Docker ran out of space(Dockerが容量を使い果たしました)』で失敗するようになりました。
最後に、Dockerのサポートは現在、カリフォルニア、大阪、ストックホルムのリージョンを除けば、デフォルトのAWS CloudShellリージョンで利用可能だ。更なるガイダンスはAWS CloudShellユーザーガイドに記載されている。