皆さん！知らない間に社会貢献してますよ！～AWSサステナビリティについてまとめてみた～

# AWSを利用している皆さん！
「パフォーマンスを改善させた！」「AWS利用料をこんだけ削減できた！」
そんな日頃行っている**システム改善活動**が、知らない間に**環境問題の改善に貢献してますよ！**

せっかくの社会貢献なので、
> **「自分たちがどんな環境問題に貢献できているのか？」**
> **「もっと貢献するにはどうしたらよいか？」**

を知るきっかけになればと思い記事にしてみました。

いろんな記事や文献を漁ったので、情報量多めのちょっぴりDeep Diveチックな内容になっています。
興味のある個所だけでも読んでもらえると嬉しいです:relaxed:

# まず、AWSにおけるサステナビリティとは
AWSは、2025年までに再生可能エネルギーのみでオペレーションを行うため、グローバルインフラストラクチャ全体の効率と継続的なイノベーションに重点的に取り組んでいます。
AWSは、2040年までに**ネットゼロ**にするというAmazonの目標の達成に向けて取り組んでいます。  

:::note info
ネットゼロとは？
温室効果ガスの排出量を「**正味ゼロ**」にすること。  
カーボンニュートラルと同じ意味でつかわれることがありますが、細かい定義は下記のように異なります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611811/e0403fb7-4df0-bc86-3b9c-5d19fccfdfc9.png)
https://gurilabo.igrid.co.jp/article/2929/
:::

#### ■エネルギー効率
AWSはデータセンターやハードウェアの設計、継続的にエネルギー効率を向上させるための運用パフォーマンスのモデリングに至るまで、インフラのあらゆる側面にわたるエネルギー効率に重点を置いています。

【電力効率】
		　　AWS Nitro Systemへの投資など様々な方法で電力効率を向上させるためにイノベーションを活用しています。
		　　例えば、AWSが設計した**Graviton3**は、最も電力効率の高い汎用プロセッサです。Graviton3ベースのEC2インスタンスは、非Graviton EC2インスタンスよりも同じパフォーマンスを得るために使用する**エネルギーが最大60%少なくなる**そうです！

【冷却効率】
		　　AWSはパートナーと協力して、データセンター冷却システムで使用される冷却媒体の寿命とエアフロー性能の最適化を実現しました。
		　　新しい媒体は耐用年数が2倍になり、以前のバージョンよりも空気が通過しやすくなり、ファンのエネルギーが節約されます。これは建物のエネルギー性能に大きな影響を与え、冷却装置の**エネルギー使用量を20％削減**します。

> https://sustainability.aboutamazon.com/environment/the-cloud?energyType=true

#### ■CO2削減
451 Researchの調査によるとAWSは調査対象のエンタープライズ データセンターと比較して、顧客のワークロードの**CO2排出量を80%近く削減**でき、AWSが100%再生可能エネルギーで稼働すると**最大96%削減**できることもわかりました。
> https://d39w7f4ix9f5s9.cloudfront.net/d1/80/283b833847df8ee4fe9661e0dd8f/11061-aws-451research-advisory-bw-cloudefficiency-eu-2021-r2-final-2.pdf

#### ■水資源管理
AWSは2022年に「2030年までにウォーターポジティブになる！」という取り組みを発表しました。
https://sustainability.aboutamazon.com/environment/the-cloud/water-stewardship

（世界に数十か所ある）AWSデータセンターで利用/排出される水資源において、**水の使用量を削減**し、事業を展開しているコミュニティでの水資源の補給などのプロジェクトに投資しており、
現在の水資源プロジェクトがすべて完了すると、**約24億リットル/年の水を地域社会や環境に戻すことになる！**

水資源に関する取り組みには4つの柱があります。
【① 水の効率】
水の消費量を最適化するための取り組み。
IoTなどのクラウドテクノロジーを使用して、**リアルタイムの水使用量を分析**して、**漏水箇所を特定**しています。


【② 持続可能な資源】
可能な限り**リサイクル水や雨水などの持続可能な水源を使用**しています。
AWSではすでに、世界中の20のデータセンターの冷却にリサイクル水を使用しています。

そうすることで、地域社会と環境にとって**貴重な飲料水を節約**できます。

【③ 地域における水の再利用】
データセンターからの冷却水は**最大96％が再利用可能**であり、オレゴン州では地元の農家に無料で提供され、トウモロコシ、大豆、小麦などの**作物の栽培に役立てられています。**

【④ 水資源の補給】
AWSでは水補給プロジェクトを展開しており、**水に困っている地域へきれいな水を提供する活動を行っています。**

> https://aws.amazon.com/jp/about-aws/whats-new/2022/12/aws-makes-water-positive-commitment-to-return-more-water-to-communities-than-it-uses-by-2030/

:::note info
ウォーターポジティブとは？
消費する水より多くの水を供給することです。
世界中で淡水不足が課題となっている中、AmazonやGoogleなどの企業が水を確保するための様々な取り組みを行っています。
https://ideasforgood.jp/glossary/water-positive/
:::


# AWSユーザ側でできることは？
上記で解説したAWS側の取組みを見て、
「AWS側でだいぶ成果出してるからAWSユーザ側でやることないのでは？」
と思った方もいるのではないでしょうか？

**否！！ 我々でもさらにサステナビリティを向上させることはできます:point_up:**

それは、**AWS Well-Architected Framework**に定義されています！

### AWS Well-Architected Framework「サステナビリティの柱」
2021年にAWS Well-Architected Framework(以降、W-A)に新たに6つ目の柱「サステナビリティの柱」が誕生しました。

	・運用上の優秀性の柱
	・セキュリティの柱
	・信頼性の柱
	・パフォーマンス効率の柱
	・コスト最適化の柱
	・サステナビリティの柱 ★2021年追加

他の柱と同様にサステナビリティの柱でも、
> ワークロードの設計、アーキテクチャ、実装

を評価対象としていますが、異なる点としては、**エネルギー消費量を削減し、エネルギー効率を向上させることを目的**とした内容が含まれていることです。

上記の【■CO2削減】でも解説したように、
AWSと一般的なオンプレ環境での構築を比較した際、CO2排出量が約80%削減できることがわかっています。
これは電力/冷却の効率化や、AWSデータセンターの設計など、**AWS側の積極的な取組みにより実現**しましたが、
我々AWSユーザ側でもこのW-Aを利用し**アーキテクチャを意識/設計する**ことでさらに**サステナビリティを向上**させることできます。

:::note info
AWSでおなじみの「責任共有モデル」がサステナビリティ関連でも存在します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611811/8499e60a-90f0-47a8-87ad-535180e2958b.png)
我々ユーザ側は
**ワークロードやリソースの利用効率を最適化し、リソース数を最小限にする**
という役割が定義されています。

https://docs.aws.amazon.com/wellarchitected/latest/sustainability-pillar/the-shared-responsibility-model.html

:::

では、ユーザ側で具体的にどのようなことを考慮すればよいのか？
カテゴリーごとにべスプラ解説いたします！

中には、皆さんが今まで**コスト削減**や**パフォーマンス改善**等でやってきたことがあるかもしれません:open_mouth:

:::note warn
下記の各カテゴリにはそれぞれ複数のべスプラがありますが、情報量が多いため独断と偏見で内容を絞ってます:bow_tone1:

全べスプラ情報は下記ホワイトペーパーにありますので、ご興味あればご覧ください。
https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/sustainability-pillar/best-practices-for-sustainability-in-the-cloud.html
:::

#### ■ リージョンの選択

##### 【べスプラ概要】
ビジネス要件と持続可能性の目標の**両方**に基づいてリージョンを選択すること（SUS01-BP01）

##### 【べスプラ実装によるメリット】
Amazonの再生可能エネルギープロジェクトや公開されている**炭素強度の低いリージョンの近くにワークロードを配置**することで、ワークロードの**カーボンフットプリントを削減**できます

:::note info
カーボンフットプリント(Carbon Footprint of Products)とは？
商品やサービスの原料調達から廃棄/リサイクルに至るまでのライフサイクル全体を通じて排出される温室効果ガスの排出量をCO2に換算したものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611811/06c57c3d-480a-5538-742a-66c14a89cb1d.png)

https://www.cfp-japan.jp/about/

:::

##### 【べスプラ実装方法】
<dl>
<dt>SUS01-BP01</dt>
<dd>①ワークロードに適したリージョンを評価し、候補をリストアップする</dd>
<dd>　・コンプライアンスに準拠したリージョンか？</dd>
<dd>　・必要なサービスと機能が備わっているか？</dd>
<dd>　・AWS Pricing Calculatorを使用して、各リージョンのワークロードのコストを計算する</dd>
<dd>　・エンドユーザとリージョン間のネットワークレイテンシーをテストする</dd>
<dd>②再生可能エネルギープロジェクトに近いリージョンであり、電力マップ(※)を利用し炭素集約度が他リージョンより低いリージョンを選択する</dd>
</dl>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611811/b53bc220-d940-981f-3866-3cfaf00e35cd.png)

https://app.electricitymaps.com/map

##### 【アンチパターン:skull:】
<dl>
<dt>SUS01-BP01</dt>
<dd>・自分の場所に基づいてワークロードのリージョンを選択する</dd>
<dd>・すべてのワークロードリソースを 1 つの地理的場所に統合する</dd>
</dl>

#### ■ 需要に合わせた調整
##### 【べスプラ概要】
・インフラを**動的にスケールする**こと（SUS02-BP01）
・**未使用アセットの整理/削除する**こと（SUS02-BP03）
・ワークロードを**エンドユーザの近くに配置する**こと（SUS02-BP04）

##### 【べスプラ実装によるメリット】
・需要の急増時や急増後に容量を自動スケールすることで、要件を満たすために必要な適切な数のリソースのみで運用できます（SUS02-BP01）
・不要なアセットを削除することで、リソースが解放されワークロード全体の効率が向上します（SUS02-BP03）
・ワークロードをエンドユーザの近くに配置することで、ネットワーク上のデータ量を減らし、環境負荷を削減しながら、最小限のレイテンシーを実現できる（SUS02-BP04）

##### 【べスプラ実装方法】
<dl>
<dt>SUS02-BP01</dt>
<dd>①Auto Scalingを使用しリソースを自動的にスケールさせる</dd>
<dd>②需要に合わせ、DynamoDBのキャパシティユニットやKinesis Data Streamなど非コンピューティングサービスの設定/導入も検討する</dd>
<dd>③スケールインの導入の際にワークロードが期待通りに動作するかテストを実施する</dd>
</dl>

<dl>
<dt>SUS02-BP03</dt>
<dd>①モニタリングツールを使用して、不要になった静的アセットを特定する</dd>
<dd>②削除によるアーキテクチャへの影響を評価し、不要アセットを削除する</dd>
<dd>③重複して作成されるアセットは統合し、冗長プロセスを排除する</dd>
<dd>④不要アセットがこれ以上生成/保存されないようにアプリケーションを更新する</dd>
<dd>⑤サードパーティ製品を利用している場合は、不要アセットの生成/保存を停止するように指示する</dd>
<dd>⑥サードパーティ製品を利用している場合は、冗長アセットを統合するように指示する</dd>
<dd>⑦ワークロードを定期的に見直して、未使用アセットを特定し削除する</dd>
</dl>

<dl>
<dt>SUS02-BP04</dt>
<dd>①ワークロードのネットワークアクセスパターンを分析して、ユーザがアプリケーションをどのように使用しているか特定する</dd>
<dd>②ワークロードのデプロイに適切なリージョンを選択する</dd>
<dd>③AWSローカルゾーンを使用して、エンドユーザの近くにリソースを配置する</dd>
<dd>④オンプレに置く必要があり、かつAWSにあるワークロードとシームレスに連携させたい場合は、AWS Outpostsの使用を検討する</dd>
<dd>⑤ローカルキャッシュやCloudFront / ElastiCache / DynamoDB AcceleratorなどのAWSキャッシュソリューションを使用する</dd>
<dd>⑥エンドユーザの近くでコード実行できるLamdba@Edge / CloudFront関数 / IoT Greengrassを使用する</dd>
<dd>⑦コネクションプールを使用して、接続の再利用を可能にし、必要なリソースを削減する</dd>
<dd>⑧事前にプロビされた静的ネットワーク容量を、共有の動的容量に置き換え、持続可能性に対するネットワーク容量の影響を他のサブスクライバーと共有する</dd>
</dl>

##### 【アンチパターン:skull:】
<dl>
<dt>SUS02-BP01</dt>
<dd>・ユーザーの負荷に合わせてインフラストラクチャをスケールしない</dd>
<dd>・常に手動でインフラストラクチャをスケールする</dd>
<dd>・スケーリングイベントの後、スケールダウンして元に戻さず、キャパシティーを増加させたままにする</dd>
</dl>

<dl>
<dt>SUS02-BP03</dt>
<dd>・アプリケーションを分析して冗長または不要になったアセットを見つけていない</dd>
<dd>・冗長または不要になったアセットを削除していない</dd>
</dl>

<dl>
<dt>SUS02-BP04</dt>
<dd>・自分の場所に基づいてワークロードのリージョンを選択する</dd>
<dd>・すべてのワークロードリソースを 1 つの地理的場所に統合する</dd>
<dd>・すべてのトラフィックが既存のデータセンターを通過する</dd>
</dl>


#### ■ ソフトウェアとアーキテクチャ
##### 【べスプラ概要】
・使用率が低い、またはまったく使用しないワークロードの**コンポーネントを削除またはリファクタリング**する（SUS03-BP02）
・時間やリソースを最も多く消費する**コード領域を最適化**する（SUS03-BP03）

##### 【べスプラ実装によるメリット】
・未使用のコンポーネントを削除すると、無駄が最小化され、クラウドワークロード全体の効率が向上する（SUS03-BP02）
・効率的なコードは、リソースの使用量を最小化し、パフォーマンスを向上させる（SUS03-BP03）

##### 【べスプラ実装方法】
<dl>
<dt>SUS03-BP02</dt>
<dd>①ワークロードの重要なコンポーネントの使用率メトリクスをモニターしキャプチャする</dd>
<dd>②安定したワークロードの場合は、AWS Compute Optimizerなどのサイズ最適化ツールを定期的に確認して、アイドル/未使用/使用率の低いコンポーネントを特定する</dd>
<dd>　※一次的なワークロードの場合は、使用率メトリクスを評価する</dd>
<dd>③不要になったコンポーネントや関連アセット(例：ECRイメージなど)を廃止する</dd>
<dd>④使用率の低いコンポーネントをリファクタリングまたは他のリソースと統合する</dd>
</dl>

<dl>
<dt>SUS03-BP03</dt>
<dd>①ワークロードを開発する際に、自動化されたコードレビュープロセスを導入して、品質を向上させ、バグやアンチパターンを特定する</dd>
<dd>②ワークロードを実行しながら、リソースをモニターして、作業単位でリソースを多く必要とするコンポーネントを特定して、コードレビュー対象とする</dd>
<dd>③コードレビューでは、コードプロファイラーを使用して、時間またはリソースを最も多く使用するコードの領域を特定し最適化対象とする</dd>
<dd>④Rustなどのエネルギー効率の良いプログラム言語を使用する</dd>
<dd>⑤ソートや書式設定などの不要なコードを削除する</dd>
</dl>


##### 【アンチパターン:skull:】
<dl>
<dt>SUS03-BP02</dt>
<dd>・ワークロードの個別のコンポーネントの使用率レベルを定期的に確認していない</dd>
<dd>・AWS Compute Optimizer のような AWS サイズ最適化ツールからのレコメンデーションを確認し分析しない</dd>
</dl>

<dl>
<dt>SUS03-BP03</dt>
<dd>・リソースの使用量のためにコードを最適化しない</dd>
<dd>・通常、パフォーマンスの問題にはリソースを増やすことで対処している</dd>
<dd>・コードの見直し及び開発プロセスで、パフォーマンスの変化を追跡していない</dd>
</dl>

#### ■ データ
##### 【べスプラ概要】
・ポリシーを使用してデータセットの**ライフサイクルを管理**する（SUS04-BP03）
・データは**再作成が難しい場合にのみバックアップ**する（SUS04-BP08）
##### 【べスプラ実装によるメリット】
・データライフサイクルポリシーを使用することで、ワークロードのデータアクセスと保持を効率的に行うことができる（SUS04-BP03）
・重要ではないデータのバックアップを避けると、ワークロードに必要なストレージリソースを削減し、環境への影響を減らすことができる（SUS04-BP08）
##### 【べスプラ実装方法】
<dl>
<dt>SUS04-BP03</dt>
<dd>①ワークロード内のデータセットを分類する</dd>
<dd>②データクラスごとに処理手順を定義する</dd>
<dd>③ライフサイクルルールを適用するための自動ライフサイクルポリシーを設定する。（例：S3 ライフサイクル、Data Lifecycle Managerなど）</dd>
<dd>④未使用のボリューム、スナップショット、保持期間が過ぎたデータを削除する</dd>
<dd>　※DynamoDBの有効期限やCloudWatchログ保持などのネイティブサービス機能が便利</dd>
<dd>⑤ライフサイクルルールに基づいて、該当する場合はデータを集約及び圧縮する</dd>
</dl>

<dl>
<dt>SUS04-BP08</dt>
<dd>①ワークロード内のデータを重要度で分類する</dd>
<dd>②データ分類の重要度を使用し、RTO/RPOに基づいてバックアップ戦略を策定する。（重要でないデータのバックアップは避けること！）</dd>
<dd>　・簡単に再作成できるデータを除外する</dd>
<dd>　・バックアップから一時データを除外する</dd>
<dd>　・共有の場所からデータを復元するために必要な時間がSLAを超過する場合を除き、データのローカルコピーを除外する</dd>
<dd>③自動化されたソリューションまたはマネージドサービスを使用してデータをバックアップする（例：AWS Backupなど）</dd>
</dl>

##### 【アンチパターン:skull:】
<dl>
<dt>SUS04-BP03</dt>
<dd>・データを手動で削除する</dd>
<dd>・ワークロードデータは削除しない</dd>
<dd>・データ保持やアクセス要件に基づいて、よりエネルギー効率の高いストレージ階層にデータを移動することがない</dd>
</dl>

<dl>
<dt>SUS04-BP08</dt>
<dd>・データのバックアップ戦略がない</dd>
<dd>・簡単に再作成できるデータをバックアップしている</dd>
</dl>

#### ■ ハードウェアとサービス
##### 【べスプラ概要】
・影響が最も少ないインスタンスタイプを使用する（SUS05-BP02）
##### 【べスプラ実装によるメリット】
・エネルギー効率が高く、適切なサイズのインスタンスを使用することで、環境への影響とワークロードのコストを大幅に削減できる（SUS05-BP02）
##### 【べスプラ実装方法】
<dl>
<dt>SUS05-BP02</dt>
<dd>①最新のAWSテクノロジーとインスタンスの情報を入手する（AWSの最新情報などを確認）</dd>
<dd>②ワークロードを計画し、最も影響の少ないインスタンスタイプに移行する</dd>
<dd>　・ワークロードのパフォーマンス効率を向上させるため、なるべくGravitonベースのインスタンスへの移行を検討する</dd>
<dd>　・機械学習のワークロードには、AWS Trainiumなどの専用ハードウェアを利用する</dd>
<dd>③ワークロードインスタンスを操作して最適化する</dd>
<dd>　・一時的なワークロードの場合は、CloudWatchのCPUUtilizationなどのメトリクスを評価して、アイドル/低使用の状態になっていないか確認する</dd>
<dd>　・安定したワークロードの場合は、Compute OptimizerなどのAWSサイズ最適化ツールを定期的に確認する</dd>
</dl>

##### 【アンチパターン:skull:】
<dl>
<dt>SUS05-BP02</dt>
<dd>・インスタンスの 1 つのファミリーのみを使用する</dd>
<dd>・x86 インスタンスのみを使用する</dd>
<dd>・Amazon EC2 Auto Scaling 設定で 1 つのインスタンスタイプを指定する</dd>
<dd>・AWS インスタンスが設計されていない方法で使用されている (たとえば、メモリ集中型のワークロードに計算用に最適化されたインスタンスを使用した場合)</dd>
<dd>・新しいインスタンスタイプを定期的に評価しない</dd>
<dd>・AWS Compute Optimizer のような AWS サイズ最適化ツールからのレコメンデーションを確認しない</dd>
</dl>

#### ■ プロセスと文化
##### 【べスプラ概要】
・ワークロードを最新に保つ（SUS06-BP02）
##### 【べスプラ実装によるメリット】
・ワークロードを最新に保つプロセスを確立することで、新しい機能と能力を採用し、問題を解決しワークロードの効率性を高めることができる（SUS06-BP02）
##### 【べスプラ実装方法】
<dl>
<dt>SUS06-BP02</dt>
<dd>①ワークロードに応じた新しい機能やインスタンスを評価するプロセスとスケジュールを定義する。また新しい機能がワークロードをどのように改善するかを素早くテストする</dd>
<dd>　・接続可能性への影響を削減する</dd>
<dd>　・パフォーマンス効率を高める</dd>
<dd>　・計画した改善にとっての障壁を取り除く</dd>
<dd>　・接続可能性に対する影響の測定能力と管理能力を高める</dd>
<dd>②ソフトウェアおよびアーキテクチャをインベントリに登録して、更新する必要があるコンポーネントを特定する</dd>
<dd>③ワークロードのコンポーネント(マシンイメージ/コンテナイメージ/Lambda)を更新する方法を理解する</dd>
<dd>④更新プロセスにオートメーションを使用する（新しい機能をデプロイする工数を削減し、手動プロセスに起因するエラーを抑制できる）</dd>
</dl>

##### 【アンチパターン:skull:】
<dl>
<dt>SUS06-BP02</dt>
<dd>・現在のアーキテクチャが今後は静的なものとなり、しばらく更新されないと考えている</dd>
<dd>・更新されたソフトウェアおよびパッケージがワークロードと互換性があるかどうかを評価するためのシステムまたは定期的な予定がない</dd>
</dl>

# まとめ
今回の記事では
**・AWSが見えないところで環境問題に取り組んでいたこと**
**・皆さんが今まで頑張ってきた改善活動が、知らない間に環境問題に貢献していたこと**
**・AWSユーザ側でさらにサステナビリティ向上に貢献できること**
についてまとめてみました！

W-A「サステナビリティの柱」には、
> ・AutoScalingを使って、必要な分だけリソースを使う
> ・不要なリソースは定期的に消すこと

など、コスト削減活動で実施していそうなことが定義されており、
皆さんの改善活動に「**サステナビリティ向上**」という付加価値がついていることをご認識いただけたのではないでしょうか。

今後機会があれば、「皆さん、知らない間に〇〇」シリーズを記事にしていきたいと思います！

長文になってしまいましたが、最後まで読んでいただきありがとうございました:bow_tone1: