AWSで利用されているオープンソース


# はじめに
AWSについて学んでいると、[オープンソースソフトウェア(OSS)](https://aws.amazon.com/jp/what-is/open-source/)を活用することにより、実現されているサービスが数多く存在していることに気づきます。
実績・経験があるOSSをクラウド上で利用をしたいというユーザーは多く、AWSはそのニーズに応じてサービス提供を行っているためです。

一方で、前提となるOSSに関する知識が少ない場合、AWSサービスについて理解が難しかったり、似たようなサービスのうちどれを選択すれば良いか判断がつかなかったりします。AWSを知るためには、OSSについても知る必要があります。

そこで、今回はタイトルの通り、AWSで利用されているOSSをまとめましたので共有します。
言葉は聞いたことはあるけど、何の事かよく知らないという方が詳しく知るきっかけになればと思います。


# 前提事項
- 今回はなるべく網羅的に、AWS関連のOSSを列挙することを目的にしました。各々の詳細な説明はリンク先にお任せすることにし、本文では基本的な特徴を記載します。
- AWSの場合、OSSそのものをマネージドで提供しているサービスと、OSS互換の機能を持つが中身はOSSとは異なるサービスがありますが、本文では特に区別しておりません。後者の場合は、AWSの公式ページで「互換」という言葉で表現されているようです。
- リンク先は原則AWSの公式サイト、もしくは、NRI OpenStandiaの公式サイトとしています。（2022/12/20時点のものなります。）


# データベース
|AWSサービス名|説明|関連OSS|
|:--|:--|:--
|[Amazon Aurora](https://aws.amazon.com/jp/rds/aurora/?nc2=h_ql_prod_fs_aa)|リレーショナルDB|[PostgreSQL](https://openstandia.jp/oss_info/postgresql/)、[MySQL](https://openstandia.jp/oss_info/mysql/)|
|[Amazon RDS](https://aws.amazon.com/jp/rds/?nc2=h_ql_prod_fs_rds)|リレーショナルDB|PostgreSQL、MySQL、[MariaDB](https://openstandia.jp/oss_info/mariadb/)|
|[Amazon Redshift](https://aws.amazon.com/jp/redshift/?nc2=h_ql_prod_an_rs)|データウェアハウス|PostgreSQL|
|[Amazon DocumentDB](https://aws.amazon.com/jp/documentdb/?nc2=h_ql_prod_db_doc)|ドキュメントDB|[MongoDB](https://openstandia.jp/oss_info/mongodb/)|
|[Amazon ElastiCache](https://aws.amazon.com/jp/elasticache/?nc=sn&loc=0#)|インメモリデータストア|[Redis](https://openstandia.jp/oss_info/redis/)、[Memcached](https://aws.amazon.com/jp/memcached/)|
|[Amazon MemoryDB for Redis](https://aws.amazon.com/jp/memorydb/?nc2=h_ql_prod_db_memdb)|インメモリデータストア|Redis|
|[Amazon Keyspaces](https://aws.amazon.com/jp/keyspaces/?nc2=h_ql_prod_db_mcs)|NoSQL分散データベース|[Cassandra](https://openstandia.jp/oss_info/cassandra/)|


- AuroraとRDSはどちらもリレーショナルDBですが、基本的にはAuroraの方が性能や可用性等の様々な面で優れており推奨されます。ただし、利用できるDBエンジンの選択肢はRDSの方が多く、Auroraを利用する場合は、選択肢はPostgreSQLとMySQLに限られます。PostgreSQLは商用DBと比較しても遜色ない豊富な機能や信頼性を持っていること、MySQLはOSSのDBとしては最も普及しているため情報を集めやすいこと、などが特徴として挙げられます。
- Amazon Redshiftは、PostgreSQLをベースとしていますが、サポートしている機能や関数に相違があるため注意が必要です。([Amazon Redshift および PostgreSQL](https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_redshift-and-postgres-sql.html))
- MariaDBは、オラクル社がMySQLを買収したことをきっかけに派生したOSSで、MySQLと基本的には互換性を持っています。後発ながら開発コミュニティが活発で、性能などの機能強化が行われています。
- MongoDBは、JSONドキュメント形式のデータを保存する際に有用なDBで、リレーショナルDBのようにテーブル定義をする必要がありません。
- RedisとMemcachedは、ともにインメモリデータストアで、高いパフォーマンスが求められるシステムのキャッシュ用途に使用されます。Memcachedは、機能がシンプルで扱いやすい一方で、Redisは高機能で多くのユースケースに対応可能です。（[Redis と Memcached の比較](https://aws.amazon.com/jp/elasticache/redis-vs-memcached/)）
- Amazon ElastiCacheとAmazon MemoryDB for Redisは類似のサービスですが、ElastiCacheの弱点であるデータ耐久性を強化したのがMemoryDBです。（ただし、書き込み性能は低下します。）
- Cassandraは、パーティションキーに基づいてデータを分散配置するNoSQLデータストアで、Amazon KeyspacesとしてCassandraをサーバーレスで利用できます。AWSには類似の主要サービスであるDynamoDBがあるため出番が少ないかもしれませんが、既にオンプレミスでCassandraを利用していて、AWSへの移行が必要な場合などはAmazon Keyspacesの方が移行が容易となります。





# データ分析
|AWSサービス名|説明|関連OSS|
|:--|:--|:--
|[Amazon EMR](https://aws.amazon.com/jp/emr/?nc2=h_ql_prod_an_emr)|ビッグデータ処理|[Hadoop](https://openstandia.jp/oss_info/apache-hadoop/)、[Spark](https://openstandia.jp/oss_info/spark/)、[Presto](https://openstandia.jp/oss_info/presto/)|
|[Amazon Athena](https://aws.amazon.com/jp/athena/?nc2=h_ql_prod_an_ath&whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc)|クエリサービス|Presto|
|[Amazon Managed Streaming for Apache Kafka (MSK)](https://aws.amazon.com/jp/msk/)|ストーリーミング送受信処理|[Apache Kafka](https://openstandia.jp/solution/kafka/)|
|[Amazon OpenSearch Service](https://aws.amazon.com/jp/opensearch-service/?nc2=h_ql_prod_an_es)|検索サービス|[OpenSearch](https://aws.amazon.com/jp/what-is/opensearch/)|

- ビッグデータ処理は多数のリソースが必要となるため、スケーリングが容易なクラウドとの相性がよく、AWSではEMRとしてサービス提供されています。EMRは、HadoopやSparkといった分散処理フレームワークが利用されています。
- HadoopとSparkは類似のOSSですが、後発のSparkはデータをインメモリにキャッシュすることで、Hadoopよりも高速の処理が可能となっています。しかし、データサイズがメモリに乗り切らない処理は、依然としてHadoopが有用であり、両者は組み合わせて利用されます。
- Hadoopとセットで利用されるOSSとして[Apache HBase](https://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-hbase.html)、[Apache Hive](https://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-hive.html)、[Hue](https://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-hue.html)などがあります。それぞれ、ビッグデータ処理に適したDB、データウェアハウス、GUIとなります。（余談ですがこの辺り、OSSが多用されているため、整理したくなり、この記事のテーマを思い至りました。）
- Prestoは、高性能分散型クエリエンジンで大量データに対するクエリを行う際に有用です。[EMRに組み込まれている](https://aws.amazon.com/jp/emr/features/presto/)他、クエリサービスであるAthenaとしてインタラクティブかつ手軽に利用できます。
- データ分析の最初のステップに大量データ取込みがあります。Kafkaは、リアルタイムでストリーミングデータの取込みを行うことができるOSSです。AWSには、類似サービスとして、[Amazon Kinesis Data Streams](https://aws.amazon.com/jp/kinesis/data-streams/)が存在しています。他のAWSサービスとの親和性や導入のし易さは、Kinesis Data Streamsが優位ですが、処理可能なメッセージのサイズや保持期間においてはKafkaが優位であるなど様々な相違点があります。既にオンプレミスでKafkaを利用されている場合はAWSへの移行が容易です。
- Amazon OpenSearch Serviceは、大量データを扱うことができる検索・分析のサービスです。従来、Amazon Elasticsearchとして存在していましたが、Elasticsearchのライセンス体系変更に伴い、名称が変更となりました([Elasticsearchのライセンス変更にともなう AWS の対応方針](https://aws.amazon.com/jp/blogs/news/aws-policy-for-elasticsearch-licence-change/))。OpenSearchは、ライセンス体系変更前のElasticsearchを元に派生した、AWS提供のOSSとなります。

# 構成管理
|AWSサービス名|説明|関連OSS|
|:--|:--|:--
|[AWS OpsWorks](https://aws.amazon.com/jp/opsworks/?nc2=type_a)|構成管理サービス|[Chef](https://openstandia.jp/oss_info/chef/)、[Puppet](https://openstandia.jp/oss_info/puppet/)|

- Chef、Puppetは、コードを使用してサーバーの構成を管理・自動化できるようにするためのOSSです。これにより、複数台のサーバに同じ設定作業を行うことによる労力や人的ミスを減らすことが可能です。
- OpsWorksには、[AWS OpsWorks for Chef Automate](https://aws.amazon.com/jp/opsworks/chefautomate/)、[AWS OpsWorks for Puppet Enterprise](https://aws.amazon.com/jp/opsworks/puppetenterprise/)、[AWS OpsWorks スタック](https://aws.amazon.com/jp/opsworks/stacks/)の3つの選択肢がありますが、Chef、Puppetの経験がなければ、AWS OpsWorks スタックを選択します。AWS OpsWorks スタックは、Chef レシピ（Chefにおける構成管理の記述方法）がサポートされています。



# OpenJDK
|AWSサービス名|説明|関連OSS|
|:--|:--|:--
|[Amazon Corretto](https://aws.amazon.com/jp/corretto/?nc2=h_ql_prod_dt_cor&filtered-posts.sort-by=item.additionalFields.createdDate&filtered-posts.sort-order=desc)|OpenJDKディストリビューション|[Java](https://openstandia.jp/oss_info/java/)|

- OpenJDKをAmazon Correttoとして利用する場合、[無償で長期サポート（LTS）が受けられる](https://aws.amazon.com/jp/corretto/faqs/#support)ことが特長となります。また、AWSサービスですが、オンプレミスで利用することも可能です。

# コンテナ
|AWSサービス名|説明|関連OSS|
|:--|:--|:--
|[Amazon Elastic Container Service (ECS)](https://aws.amazon.com/jp/ecs/?nc2=h_ql_prod_ct_ecs)|コンテナ|[Docker](https://openstandia.jp/oss_info/docker/)
|[Amazon Elastic Kubernetes Service (EKS)](https://aws.amazon.com/jp/eks/?nc2=h_ql_prod_ct_eks)|コンテナオーケストレーション|[Kubernetes](https://openstandia.jp/solution/kubernetes/)|
|[Red Hat OpenShift Service on AWS (ROSA) ](https://aws.amazon.com/jp/rosa/?nc2=h_ql_prod_ct_rosa)|コンテナオーケストレーション|[OpenShift](https://openstandia.jp/oss_info/openshift/)|

- AWSには様々なコンテナ関連のサービスが存在していますが、どれもDocker、Kubernetesがベースのものです。
- OpenShiftはKubernetesをベースに、RedHat社がエンタープライズ向けの機能拡張を加えたものになります。これにより、Kubernetesがより扱いやすくなります。
- AWSの最近の注目の取り組みとして、[コンテナ開発用のオープンソースクライアント「Finch」](https://aws.amazon.com/jp/blogs/news/introducing-finch-an-open-source-client-for-container-development/)があります。これはAWS発のOSSであり、2021年に有料化が開始されたDocker Desktopの代替となる可能性があります。

# ディレクトリサービス
|AWSサービス名|説明|関連OSS|
|:--|:--|:--
|[Simple AD](https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/directory_simple_ad.html)|ディレクトリサービス|[Samba4](https://openstandia.jp/oss_info/samba/)|

- Sambaは、UNIXおよびUNIX互換コンピュータを、Windowsのドメインコントローラーとして使用するためのOSSです。Simple ADは、[AWS Directory Service](https://aws.amazon.com/jp/directoryservice/)の1形態として提供されています。


# 最後に
クラウド×オープンソースを組合せたサービスは、システムを効率的に構築していくための良い組合せであり、今後も増加していくと思われました。引き続きウォッチしていきたいと思います。

最初に述べたように、この記事が何か知るきっかけになれば幸いです。