AWS App Runner が  AWS Secrets Manager と AWS Systems Manager をサポート

# 概要
App Runner 環境変数のソースとして AWS Secrets Manager と AWS SSM Parameter Store を指定することが出来るようになったよ。

https://aws.amazon.com/jp/about-aws/whats-new/2023/01/aws-app-runner-secrets-configuration-aws-secrets-systems-manager/


# やってみた

下記のブログを参考に動作を確認してみました。

https://aws.amazon.com/jp/blogs/containers/aws-app-runner-now-integrates-with-aws-secrets-manager-and-aws-systems-manager-parameter-store/


# サンプルコードのクローン

```
git clone https://github.com/aws-samples/apprunner-hotel-app
```

# 必要なリソースのデプロイ

先程クローンしてきたファイルの中にある `infra.yaml` を使って CloudFormation スタックを作成してください。

CloudFormation の [出力] タブで、
 `DBSecret`  (Secrets Manager に保存) 
 `HotelName` (SSM Parameter Store に保存) 
を控えておきましょう。（後で使う）
※ `infra.yaml` の以下が該当する箇所です。

```yaml
Outputs:
  DBSecret:
    Description: AWS Secrets Manager secret containing DB credentials
    Value: !Ref AuroraDBSecret
  HotelName:
    Description: AWS Paramter Store value containing Hotel's name
    Value: !Sub arn:${AWS::Partition}:ssm:${AWS::Region}:${AWS::AccountId}:parameter/${HotelNameParam}
```

DB のシークレット情報を AWS Secrets Manager に保存します。
Web アプリケーションは、構成パラメーターを AWS SSM Parameter Store に保存します。


# Web アプリケーションのデプロイ

## ソースおよびデプロイ

「ソース」では、次の通りご自分の GitHub の接続先を指定します。「デプロイ設定」では今回、手動で実施していきます。
![スクリーンショット 2023-02-10 16.22.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/c5db6364-e447-cf1d-6198-89cb26ed46b6.png)

## 構築を設定

ビルドコマンドと起動コマンドを設定などを次のように設定していきます。
![スクリーンショット 2023-02-10 16.29.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/44392665-fe26-a80e-9b95-49bdedc2a638.png)

## サービスを設定

[サービス設定] セクションで環境変数を設定します。

*ここが今回の本題です。*

Source : Secrets Manager
Environment variable name : MYSQL_SECRET
Environment variable value : CloudFromation で出力された DBSecret の 値

→ 環境変数名は、アプリケーションのソース コードで定義されており、rds.js で取得されます。

Source : Secrets Manager
Environment variable name : HOTEL_NAME
Environment variable value : CloudFromation で出力された HotelName の 値

→ 環境変数名は、アプリケーションのソース コードで定義されており、config.js で取得されます。

![スクリーンショット 2023-02-10 16.37.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/b91404d9-b8db-b247-c99c-9c1276121385.png)

[セキュリティ] セクションで、ドロップダウンから AppRunnerHotelAppRole を選択します。
![スクリーンショット 2023-02-10 16.45.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/e724f6f1-c435-587e-f2a1-b7a6baa0a6e5.png)

[ネットワーキング] セクションで、Custom VPC を選択し、CloudFormation でデプロイ済の AppRunnerHotelApp-RDS-Connector を選択します。

※カスタムVPCの詳細については、下記が参考になると思います。　

https://dev.classmethod.jp/articles/aws-app-runner-supports-privately-accessible-services-amazon-vpc/

![スクリーンショット 2023-02-10 16.48.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/e613c949-6482-5df9-c9de-89e157153ec4.png)

[可観測性] セクションでは、AWS X-Ray を有効にしておきます。
![スクリーンショット 2023-02-10 16.49.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/7c6e1141-4ccc-08e9-420d-4933d2b83e02.png)

# 動作確認

App Runner > サービス > apprunner-demo から、デフォルトドメインにアクセスし、`/params` パスに移動します。
Web アプリケーションが環境変数から読み取った構成パラメーターとシークレット情報が一覧表示されるはず です。
![スクリーンショット 2023-02-10 17.53.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/71ac596f-a780-72ef-3ba8-5b87b73acf15.png)

ついでに、パラメータを変更し、動的に追従するか確認してみましょう。

CloudFormation でパラメータを AWS App Runner Hotel2 に変更します。
![スクリーンショット 2023-02-10 18.19.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/6c70930e-7504-b502-3a7b-06be1d94032c.png)

App Runner > サービス > apprunner-demo で「デプロイ」します。
![スクリーンショット 2023-02-10 18.22.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/a4b3a7a0-d342-66c7-4419-22c28e3b18a9.png)

動的に変更されていることが確認できました。
![スクリーンショット 2023-02-10 18.32.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/d5cc0ebc-4c7b-00be-e541-0b35c71537ff.png)